Name: series-workflowbf72d Phase: Failed StartedAt: 2026-09-04 01:49:14 +0000 UTC FinishedAt: 2026-09-04 02:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf72d[0] Phase: Succeeded StartedAt: 2026-09-04 01:49:14 +0000 UTC FinishedAt: 2026-09-04 02:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf72d[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 01:49:14 +0000 UTC FinishedAt: 2026-09-04 02:07:16 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjNhNWVhYmE5MDNjMjEyNGQ4ZmM2YWQ2NzU1Mjg1Y2U4ZGZkNWNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNTo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA2ODY0N2ZmNGJkZDI0Li5lNzU1OGI4MzgyYWNmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtNzU4Miw2ICYjNDM7NzU4MiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFxuIFx0dGRmeD1cdFx0W0hXLERSTV1cbiBcbiYjNDM7XHR0ZHhfZHBhbXQ9XG4mIzQzO1x0XHRcdFtYODZdIENvbnRyb2xzIHdoZXRoZXIgVERYIHdpbGwgdXNlIER5bmFtaWMgUEFNVFxuJiM0MztcdFx0XHR0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuXG4mIzQzO1xuJiM0MztcdFx0XHRWYWxpZCBwYXJhbWV0ZXJzOiBcJiMzNDtvblwmIzM0OywgXCYjMzQ7b2ZmXCYjMzQ7XG4mIzQzO1x0XHRcdERlZmF1bHQ6IFwmIzM0O29mZlwmIzM0O1xuJiM0MztcbiYjNDM7XHRcdFx0Rm9yIGRldGFpbHMgc2VlOlxuJiM0MztcdFx0XHREb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbiYjNDM7XG4gXHR0ZXN0X3N1c3BlbmQ9XHRbU1VTUEVORF1cbiBcdFx0XHRGb3JtYXQ6IHsgXCYjMzQ7bWVtXCYjMzQ7IHwgXCYjMzQ7c3RhbmRieVwmIzM0OyB8IFwmIzM0O2ZyZWV6ZVwmIzM0OyB9WyxOXVxuIFx0XHRcdFNwZWNpZnkgXCYjMzQ7bWVtXCYjMzQ7IChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFwmIzM0O3N0YW5kYnlcJiMzNDsgKGZvclxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuaW5kZXggMzMwMzQ5OWFkNGM2Zi4uZGUwOTk2N2NlOGQ4YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5AQCAtMjAwLDYgJiM0MzsyMDAsMzMgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlXG4gY2hhbmdlcyBhZnRlciBhbiB1cGRhdGUuIEJ5IGNvbnRyYXN0LCBURUVfVENCX1NWTiByZWZsZWN0cyB0aGUgVENCIGF0IFREXG4gbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC5cbiBcbiYjNDM7RHluYW1pYyBQQU1UXG4mIzQzOy0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7VGhlIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1ldGFkYXRhIGluIHdoaWNoIHRoZSBURFhcbiYjNDM7bW9kdWxlIGtlZXBzIGRhdGEgYWJvdXQgZWFjaCBwaHlzaWNhbCBwYWdlICh0aGluayBzdHJ1Y3QgcGFnZSkuIFNwYWNlXG4mIzQzO2ZvciBpdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIFZNTSwgY29uc3VtZXMgdXAgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW1cbiYjNDM7bWVtb3J5IGFuZCBuZWVkcyB0byBiZSBzdXBwbGllZCB0byB0aGUgVERYIG1vZHVsZSB3aGVuIHRoZSBURFggbW9kdWxlIGlzXG4mIzQzO2ZpcnN0IGxvYWRlZC5cbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBhbiBhZGQtb24gZmVhdHVyZSB0aGF0IGFsbG93cyBhIFZNTSB0byBkeW5hbWljYWxseVxuJiM0MzthbGxvY2F0ZSB0aGUgcGFydCBvZiB0aGUgUEFNVCB3aGljaCB0cmFja3MgNEtCIHBhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlXG4mIzQzO2Ftb3VudCBvZiBtZW1vcnkgdGhhdCBURFggY29uc3VtZXMgd2hpbGUgVERzIGFyZSBub3QgaW4gdXNlLlxuJiM0MztcbiYjNDM7V2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbiYjNDM7XG4mIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byBcJiMzNDtvblwmIzM0Oy4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4mIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuJiM0MztpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4mIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuJiM0MztEeW5hbWljIFBBTVQuXG4mIzQzO1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCBlMjEzYzlhZTNlMzAxLi41YzM1OGM0MGVhZThhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk5LDYgJiM0Mzs5OSw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApXG4gS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA2ODNiYjhiZjQzYTk0Li41N2QzNzQ5MWM3YzA5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE2NDQsNiAmIzQzOzE2NDQsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xuIFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcbiBcbiYjNDM7XHRpbnQgKCp0b3B1cF9leHRlcm5hbF9jYWNoZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpO1xuIFxuIFx0Ym9vbCAoKmhhc193YmludmRfZXhpdCkodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uZTE4NmRmZTViZjg4NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuJiM0MzsjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiAmIzQzOzExOSwzNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuJiM0MztcbiYjNDM7LyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRFBBTVQgcGFnZXMgb3V0c2lkZSBvZiBzcGlubG9ja3MuICovXG4mIzQzO3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XG4mIzQzO1x0aW50IGNudDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW5pdF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuJiM0MztcdGNhY2hlLVx1MDAzZWNudCA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbik7XG4mIzQzO1xuIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7XG4gdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpO1xuIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTtcbiBcbiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gXG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljLi44YTNjYzFhMmE0MWUyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbkBAIC0xLDcgJiM0MzsxLDcgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cbi0jaWZuZGVmIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4tI2RlZmluZSBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuJiM0MzsvKiBURFggZ2xvYmFsIG1ldGFkYXRhIHN0cnVjdHVyZXMuICovXG4mIzQzOyNpZm5kZWYgX1g4Nl9WSVJUX1REWF9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiYjNDM7I2RlZmluZSBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xuIFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XG4gXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRFBBTVQgaXMgc3VwcG9ydGVkICovXG4mIzQzO1x0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiB9O1xuIFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjI4MTY4NjFjYTI3OWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjE3LDYgJiM0Mzs2MTcsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpXG4gXHRcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiBcdFx0aWYgKHIpXG4gXHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4gXHR9XG4gXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcbiBcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uN2M3OWY0ZDRiZjk5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zNjIsNyAmIzQzOzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKVxuIFx0aWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19mcmVlX3BhZ2UoY3RybF9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UoY3RybF9wYWdlKTtcbiB9XG4gXG4gc3RydWN0IHRkeF9mbHVzaF92cF9hcmcge1xuQEAgLTU4OSw3ICYjNDM7NTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xuIFxuLVx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XG4gfVxuIFxuQEAgLTY4MSw2ICYjNDM7NjgxLDggQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWlycWNoaXBfc3BsaXQodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHR0ZHhfaW5pdF9wYW10X2NhY2hlKFx1MDAyNnRkeC1cdTAwM2VwYW10X2NhY2hlKTtcbiYjNDM7XG4gXHRmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0ZHgtXHUwMDNldnQucGlfd2FrZXVwX2xpc3QpO1xuQEAgLTg2Niw2ICYjNDM7ODY4LDggQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0dGR4X2ZyZWVfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ICE9IC0xKSB7XG4gXHRcdEtWTV9CVUdfT04odGR4LVx1MDAzZXN0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtXHUwMDNla3ZtKTtcbiBcdFx0dGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTtcbkBAIC0xNjE4LDYgJiM0MzsxNjIyLDE3IEBAIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxuIFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcbiYjNDM7XHQgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdG1pbl9ucl9zcHRzICYjNDM7PSAtMSAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0ICAgIGt2bV9wZm5fdCBwZm4pXG4ge1xuQEAgLTE2NzYsMTYgJiM0MzsxNjkxLDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRcdFx0XHQgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdGdwYV90IGdwYSA9IGdmbl90b19ncGEoZ2ZuKTtcbiBcdHU2NCBlcnIsIGVudHJ5LCBsZXZlbF9zdGF0ZTtcbiBcdHN0cnVjdCBwYWdlICpzZXB0X3B0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcbiBcdGlmICghc2VwdF9wdClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCBcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRlcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKFx1MDAyNnRvX2t2bV90ZHgoa3ZtKS1cdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCxcbiBcdFx0XHQgICAgICAgXHUwMDI2ZW50cnksIFx1MDAyNmxldmVsX3N0YXRlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcbiYjNDM7XG4gXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbkBAIC0xNjk4LDggJiM0MzsxNzI1LDEzIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0XHQgIHU2NCBuZXdfc3B0ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xuIFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0LyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqL1xuIFx0aWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpXG5AQCAtMTcwNyw2ICYjNDM7MTczOSwxMCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxuIFxuIFx0V0FSTl9PTl9PTkNFKChuZXdfc3B0ZSBcdTAwMjYgVk1YX0VQVF9SV1hfTUFTSykgIT0gVk1YX0VQVF9SV1hfTUFTSyk7XG4gXG4mIzQzO1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG4gXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuQEAgLTE3MTksMTAgJiM0MzsxNzU1LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXG4gXHQgKiBJZiB0aGUgVEQgaXNuJiMzOTt0IGZpbmFsaXplZC9ydW5uYWJsZSwgdGhlbiB1c2Vyc3BhY2UgaXMgaW5pdGlhbGl6aW5nXG4gXHQgKiB0aGUgVk0gaW1hZ2UgdmlhIEtWTV9URFhfSU5JVF9NRU1fUkVHSU9OOyBBREQgdGhlIHBhZ2UgdG8gdGhlIFRELlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoa3ZtX3RkeC1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbiYjNDM7XHRpZiAobGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuJiM0MztcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHR0ZHhfcGFtdF9wdXQocGZuKTtcbiBcbi1cdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTE4MTksNiAmIzQzOzE4NjAsNyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3JlbW92ZV9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKFBGTl9QSFlTKHBmbiksIFBBR0VfU0laRSk7XG4mIzQzO1x0dGR4X3BhbXRfcHV0KHBmbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTg2Miw2ICYjNDM7MTkwNCw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLFxuICAqL1xuIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbiB7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnNlcHRfcHQgPSB2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogS1ZNIGRvZXNuJiMzOTt0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlXG4gXHQgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmVcbkBAIC0xODc1LDE1ICYjNDM7MTkxOSwxNSBAQCBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4gXHQgKiB0aGUgcGFnZSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlIGVuY3J5cHRlZCBwYWdlLlxuIFx0ICovXG4gXHRpZiAoS1ZNX0JVR19PTihpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgoa3ZtKSksIGt2bSkgfHxcbi1cdCAgICB0ZHhfcmVjbGFpbV9wYWdlKHZpcnRfdG9fcGFnZShzcC1cdTAwM2VleHRlcm5hbF9zcHQpKSlcbiYjNDM7XHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKlxuLVx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3Nhcnlcbi1cdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXG4tXHQgKiByZWFkZXJzLlxuJiM0MztcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24mIzM5O3Qgc3VwcG9ydFxuJiM0MztcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXG4mIzQzO1x0ICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy5cbiBcdCAqL1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHNlcHRfcHQpO1xuIG91dDpcbiBcdHNwLVx1MDAzZWV4dGVybmFsX3NwdCA9IE5VTEw7XG4gfVxuQEAgLTI0NTYsNyAmIzQzOzI1MDAsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXG4gXHRyZXQgPSAtRU5PTUVNO1xuIFxuLVx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0dGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXRkcl9wYWdlKVxuIFx0XHRnb3RvIGZyZWVfaGtpZDtcbiBcbkBAIC0yNDY5LDcgJiM0MzsyNTEzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFx0XHRnb3RvIGZyZWVfdGRyO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdFx0dGRjc19wYWdlc1tpXSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdFx0aWYgKCF0ZGNzX3BhZ2VzW2ldKVxuIFx0XHRcdGdvdG8gZnJlZV90ZGNzO1xuIFx0fVxuQEAgLTI1ODcsMTAgJiM0MzsyNjMxLDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIHRlYXJkb3duOlxuIFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICYjMzk7aSYjMzk7ICovXG4gXHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSkge1xuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0XHRcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xuLVx0XHR9XG4mIzQzO1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4mIzQzO1x0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGlmICgha3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzKVxuIFx0XHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbkBAIC0yNjA1LDE2ICYjNDM7MjY0NywxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXHRmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTtcbiBcbiBmcmVlX3RkY3M6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0fVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4gXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHI6XG4tXHRpZiAodGRyX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkcl9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRyX3BhZ2UpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XG4gXG4gZnJlZV9oa2lkOlxuQEAgLTI5NDgsNyAmIzQzOzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGVycjtcbiBcbi1cdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSA9IHBhZ2U7XG5AQCAtMjk2OCw3ICYjNDM7MzAwNyw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghcGFnZSkge1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBmcmVlX3RkY3g7XG5AQCAtMjk5MCw3ICYjNDM7MzAyOSw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdFx0XHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuJiM0MztcdFx0XHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUlPO1xuQEAgLTMwMTgsMTYgJiM0MzszMDU3LDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcbiBmcmVlX3RkY3g6XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4mIzQzO1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRrZnJlZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyk7XG4gXHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHZwcjpcbi1cdGlmICh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSk7XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSA9IE5VTEw7XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGEgPSAwO1xuIFxuQEAgLTM0ODcsNiAmIzQzOzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcbiBcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xuIFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XG4mIzQzO1xuJiM0MztcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcbiYjNDM7XG4gXHR2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG5pbmRleCBhYzgzMjNhNjhiMTYzLi5mZDM2OGUzZWUwNjBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIHN0cnVjdCB2Y3B1X3RkeCB7XG4gXG4gXHR1NjQgbWFwX2dwYV9uZXh0O1xuIFx0dTY0IG1hcF9ncGFfZW5kO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTtcbiB9O1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggMWI5ZmY3NDlkZDhlMC4uMmFjYWI2ZTVmNWY4NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjb3JlX29wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbXNyLWluZGV4LmhcdTAwM2VcbkBAIC00Niw2ICYjNDM7NDcsMTEgQEBcbiAjaW5jbHVkZSBcJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiBcbiYjNDM7LyogTnVtYmVyIG9mIERQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cbiYjNDM7I2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMlxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfbW9kdWxlX3N0YXRlIHtcbiBcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRib29sIHN5c2luaXRfZG9uZTtcbkBAIC02Myw2ICYjNDM7NjksMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XG4gXG4gc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEUEFNVCwgdGhlIGtlcm5lbCBtYWludGFpbnMgYSByZWZlcmVuY2UgY291bnRlclxuJiM0MzsgKiBmb3IgZXZlcnkgMk1CIHJhbmdlLiBUaGUgY291bnRlciBpbmRpY2F0ZXMgaG93IG1hbnkgdXNlcnMgdGhlcmUgYXJlIGZvclxuJiM0MzsgKiB0aGUgRFBBTVQgYXQgdGhlIDJNQiByYW5nZS4gVGhlIGtlcm5lbCBhbGxvY2F0ZXMgRFBBTVQgcmVmY291bnRzIGF0XG4mIzQzOyAqIGluaXRpYWxpemF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGF0b21pY190ICpkcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXG4gc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7XG4gXG5AQCAtMjUyLDYgJiM0MzsyNjYsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBEUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4mIzQzOyAqXG4mIzQzOyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX2luaXQgaW50IGluaXRfZHBhbXRfcmVmY291bnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpkcGFtdF9yZWZjb3VudHMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XG4mIzQzO1x0aWYgKCFkcGFtdF9yZWZjb3VudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX2RwYW10X3JlZmNvdW50cyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dmZyZWUoZHBhbXRfcmVmY291bnRzKTtcbiYjNDM7XHRkcGFtdF9yZWZjb3VudHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX2RwYW10X3JlZmNvdW50KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiBcdTAwM2VcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2ZHBhbXRfcmVmY291bnRzW2luZGV4XTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZVxuICAqIGFsbCBtZW1vcnkgcmVnaW9ucyBhcmUgYWRkZWQgaW4gYWRkcmVzcyBhc2NlbmRpbmcgb3JkZXIgYW5kIGRvbiYjMzk7dFxuQEAgLTUxMCwzNSAmIzQzOzU2MCwzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbiYjNDM7XHRpbnQgYml0c19wZXJfZW50cnk7XG4mIzQzO1xuJiM0MztcdGJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4mIzQzO1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxuICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LlxuICAqL1xuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxuLVx0XHRcdFx0XHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXG4mIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xuJiM0MztcdGNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9O1xuJiM0MztcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbiYjNDM7XHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF80a19lbnRyeV9zaXplLFxuJiM0MztcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXG4mIzQzO1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcbiYjNDM7XHR9O1xuIFxuLVx0c3dpdGNoIChwZ3N6KSB7XG4tXHRjYXNlIFREWF9QU180Szpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzJNOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBNRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFREWF9QU18xRzpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQVURfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbiYjNDM7XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdO1xuJiM0MztcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XG4gXG4tXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xuIFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cbi1cdHBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpO1xuLVxuLVx0cmV0dXJuIHBhbXRfc3o7XG4mIzQzO1x0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XG4gfVxuIFxuIC8qXG5AQCAtNTc2LDE1ICYjNDM7NjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cbiAgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplO1xuIFx0c3RydWN0IHBhZ2UgKnBhbXQ7XG4tXHRpbnQgcGdzeiwgbmlkO1xuJiM0MztcdGludCBuaWQ7XG4gXG4gXHRuaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpO1xuIFxuQEAgLTU5MiwxMyAmIzQzOzY0MCwxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxuIFx0ICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9zaXplID0gMDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykge1xuLVx0XHRwYW10X3NpemVbcGdzel0gPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIHBnc3osXG4tXHRcdFx0XHRcdHBhbXRfZW50cnlfc2l6ZVtwZ3N6XSk7XG4tXHRcdHRkbXJfcGFtdF9zaXplICYjNDM7PSBwYW10X3NpemVbcGdzel07XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzJtX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18yTSk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuJiM0MztcdFx0LyogV2l0aCBEUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbiYjNDM7XHR0ZG1yX3BhbXRfc2l6ZSA9IHRkbXItXHUwMDNlcGFtdF80a19zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsXG4gXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQmIzM5O3MgdXNlIG9mIHJlc2VydmVkIGFyZWFzXG5AQCAtNjA2LDI1ICYjNDM7NjU5LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4mIzQzO1x0ICogdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcbiYjNDM7XHQgKiBwYXRoIG9mIHRoZSBjYWxsZXIgd2lsbCBza2lwIGZyZWVpbmcgdGhlIFBBTVQuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9iYXNlID0gcGFnZV90b19wZm4ocGFtdCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHtcbi1cdFx0cGFtdF9iYXNlW3Bnc3pdID0gdGRtcl9wYW10X2Jhc2U7XG4tXHRcdHRkbXJfcGFtdF9iYXNlICYjNDM7PSBwYW10X3NpemVbcGdzel07XG4tXHR9XG4mIzQzO1x0aWYgKCFwYW10KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzRLXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMk1dO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzFHXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSAmIzQzOyB0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCAmIzQzOzcwMCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yX2RvX3BhbXRfZnVuYyhzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcdTAwMjZwYW10X2Jhc2UsIFx1MDAyNnBhbXRfc2l6ZSk7XG4gXG4gXHQvKiBEbyBub3RoaW5nIGlmIFBBTVQgaGFzbiYjMzk7dCBiZWVuIGFsbG9jYXRlZCBmb3IgdGhpcyBURE1SICovXG4tXHRpZiAoIXBhbXRfc2l6ZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcbiYjNDM7XHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgJiM0Mzs3MjYsMTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJzX2ZyZWVfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4gXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuIFx0aW50IGksIHJldCA9IDA7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCxcbi1cdFx0XHRcdHBhbXRfZW50cnlfc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0fVxuQEAgLTk2OCwxOCAmIzQzOzEwMDgsMTMgQEAgc3RhdGljIF9faW5pdCBpbnQgY29uc3RydWN0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdFx0XHRcdCAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4ge1xuLVx0dTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF80a19lbnRyeV9zaXplLFxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8ybV9lbnRyeV9zaXplLFxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplLFxuLVx0fTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBmaWxsX291dF90ZG1ycyh0bWJfbGlzdCwgdGRtcl9saXN0KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTtcbiYjNDM7XHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTk5OCw2ICYjNDM7MTAzMyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVFx0QklUKDE2KVxuJiM0MztcbiBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdFx0XHRcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxuIHtcbkBAIC0xMDI2LDYgJiM0MzsxMDYzLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xuIFx0YXJncy5yZHggPSB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XG4gXHRhcmdzLnI4ID0gZ2xvYmFsX2tleWlkO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7RW5hYmxlIER5bmFtaWMgUEFNVFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFx1MDAyNmFyZ3MpO1xuIFxuIFx0LyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovXG5AQCAtMTE2NywxMCAmIzQzOzEyMTAsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHQgKi9cbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFxuLVx0cmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuJiM0MztcdHJldCA9IGluaXRfZHBhbXRfcmVmY291bnRzKCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXRfdGR4bWVtO1xuIFxuJiM0MztcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9kcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cbiBcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcdTAwMjZ0ZHhfc3lzaW5mby50ZG1yKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIyMCw2ICYjNDM7MTI2Nyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuIFx0ZnJlZV90ZG1yX2xpc3QoXHUwMDI2dGR4X3RkbXJfbGlzdCk7XG4gZXJyX2ZyZWVfdGR4bWVtOlxuIFx0ZnJlZV90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO2Vycl9mcmVlX2RwYW10X3JlZmNvdW50czpcbiYjNDM7XHRmcmVlX2RwYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwNSw2ICYjNDM7MjA1NCwyOTMgQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XG4gXG4mIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZHhfZW5hYmxlX2RwYW10KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4mIzQzO1x0aWYgKHBhZ2UpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNnBhZ2UtXHUwMDNlbHJ1KTtcbiYjNDM7XHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBhZ2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGNhY2hlKVxuJiM0MztcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFsbG9jX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIGo7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbiYjNDM7XHRcdGlmICghcGFtdF9wYWdlc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbal0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzXG4mIzQzO1x0XHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSGVscGVyIGZvciBidWlsZGluZyBEUEFNVCBzZWFtY2FsbCgpIGFyZ3VtZW50cy4gKi9cbiYjNDM7c3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbiYjNDM7e1xuJiM0MztcdC8qIEZpbmQgdGhlIDJNQi13aWRlIERQQU1UIHJlZ2lvbiBmb3IgJiMzOTtwZm4mIzM5OzogKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgUE1EX1NJWkUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFREWCBBQkkgcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgcGFnZSBsZXZlbCB0aGUgaW5zdGFsbGVkIERQQU1UXG4mIzQzO1x0ICogYmFja2luZyB3aWxsIGNvdmVyLCBldmVuIHRob3VnaCB0b2RheSBvbmx5IDJNQiBpcyBzdXBwb3J0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIGhwYV8ybWIgfCBURFhfUFNfMk07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFkZCBEUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9hZGQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuJiM0MztcdFx0LnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLFxuJiM0MztcdFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcbiYjNDM7XHRcdC5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFx1MDAyNmFyZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cbiYjNDM7c3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbiYjNDM7XHR9O1xuJiM0MztcdHU2NCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcdTAwMjZhcmdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBQQU1UIHBhZ2VzIG91dCBvZiB0aGUgc3RydWN0IHBlciB0aGUgVERYIEFCSSAqL1xuJiM0MztcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuJiM0MztcdHBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBEUEFNVCBtZW1vcnkgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhkcGFtdF9sb2NrKTtcbiYjNDM7XG4mIzQzOy8qIEJ1bXAgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIERQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xuJiM0MztpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdO1xuJiM0MztcdGF0b21pY190ICpkcGFtdF9yZWZjb3VudDtcbiYjNDM7XHR1NjQgdGR4X3N0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgRFBBTVQgZW50cnkgaXMgYWxyZWFkeSBhZGRlZCAoaS5lLiByZWZjb3VudCBcdTAwM2U9IDEpLFxuJiM0MztcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVubGlrZSB0ZHhfcGFtdF9wdXQoKSB3aGljaCB1c2VzIGF0b21pY19kZWNfYW5kX2xvY2soKSB0b1xuJiM0MztcdCAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLVx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xuJiM0MztcdCAqIGVxdWl2YWxlbnQgY29tYmluZWQgcHJpbWl0aXZlIGZvciAwLVx1MDAzZTEuIFJlY2hlY2sgdW5kZXIgdGhlXG4mIzQzO1x0ICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtXHUwMDNlMVxuJiM0MztcdCAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGF0b21pY19pbmNfbm90X3plcm8oZHBhbXRfcmVmY291bnQpKVxuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJlZmNvdW50IGlzIHplcm8sIGFuZCB0aGlzIGxvY2tlZCBwYXRoIGlzIHRoZVxuJiM0MztcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cdTAwM2UxLlxuJiM0MztcdCAqL1xuJiM0MztcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpO1xuJiM0MztcbiYjNDM7LyogRHJvcCBEUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBEUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cbiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcbiYjNDM7XHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XG4mIzQzO1x0dTY0IHRkeF9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIERQQU1UIGVudHJ5LCBkb24mIzM5O3RcbiYjNDM7XHQgKiByZW1vdmUgaXQgeWV0LiBKdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKGRwYW10X3JlZmNvdW50LCBcdTAwMjZkcGFtdF9sb2NrKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXG4mIzQzO1x0ICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhc1xuJiM0MztcdCAqIHRoZXJlIGlzIG5vIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBidXQgZG8geWVsbCBsb3VkbHkgYXNcbiYjNDM7XHQgKiBmYWlsdXJlIGluZGljYXRlcyBhIGtlcm5lbCBidWcsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQsIGFuZFxuJiM0MztcdCAqIHRoZSBkYW5nbGluZyBEUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogYXRvbWljX2RlY19hbmRfbG9jaygpIGFscmVhZHkgZGVjcmVtZW50ZWQgaXQgdG8gMCxcbiYjNDM7XHRcdCAqIGJ1dCB0aGUgRFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkcGFtdF9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfcHV0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9wYW10X2NhY2hlKTtcbiYjNDM7XG4mIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbiYjNDM7e1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRucGFnZXMgKj0gVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY2FjaGUtXHUwMDNlY250IFx1MDAzYyBucGFnZXMpIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcGFnZSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VscnUsIFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCk7XG4mIzQzO1x0XHRjYWNoZS1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFggbW9kdWxlIGZvciB1c2UgYXMgYSBcJiMzNDtjb250cm9sXCYjMzQ7XG4mIzQzOyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxuJiM0MzsgKiBndWVzdCwgYW5kIHRodXMgb2J0YWluIFREWCBwcm90ZWN0aW9ucywgaW5jbHVkaW5nIERQQU1UIHRyYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxuJiM0MzsgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwYWdlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuJiM0MztcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19zZXR1cChcJiMzNDt0ZHhfZHBhbXQ9XCYjMzQ7LCB0ZHhfZHBhbXRfc2V0dXApO1xuJiM0MztcbiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNDgsNiAmIzQzOzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4mIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVx0XHQ1OVxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXHRcdFx0NjlcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5pbmRleCBlNDljMzAwZjIzZDQzLi45OGViZjE3YWFiMWNlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuJiM0MzsgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuICAqXG4gICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb25cbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXG5AQCAtMzMsNiAmIzQzOzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzb1xuJiM0MztcdCAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0JiMzOTtzIG5vdCBzdXBwb3J0ZWQuIERvbiYjMzk7dFxuJiM0MztcdCAqIHRyeSB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlXG4mIzQzO1x0ICogRFBBTVQgYnV0IGRvbiYjMzk7dCBleHBvc2UgdGhlIG1ldGFkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKVxuJiM0MztcdFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZjNhNWVhYmE5MDNjMjEyNGQ4ZmM2YWQ2NzU1Mjg1Y2U4ZGZkNWNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMjowNTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNjg2NDdmZjRiZGQyNC4uZTc1NThiODM4MmFjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTc1ODIsNiAmIzQzOzc1ODIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAogCXRkZng9CQlbSFcsRFJNXQogCiYjNDM7CXRkeF9kcGFtdD0KJiM0MzsJCQlbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVQKJiM0MzsJCQl0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuCiYjNDM7CiYjNDM7CQkJVmFsaWQgcGFyYW1ldGVyczogJiMzNDtvbiYjMzQ7LCAmIzM0O29mZiYjMzQ7CiYjNDM7CQkJRGVmYXVsdDogJiMzNDtvZmYmIzM0OwomIzQzOwomIzQzOwkJCUZvciBkZXRhaWxzIHNlZToKJiM0MzsJCQlEb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsKIAl0ZXN0X3N1c3BlbmQ9CVtTVVNQRU5EXQogCQkJRm9ybWF0OiB7ICYjMzQ7bWVtJiMzNDsgfCAmIzM0O3N0YW5kYnkmIzM0OyB8ICYjMzQ7ZnJlZXplJiMzNDsgfVssTl0KIAkJCVNwZWNpZnkgJiMzNDttZW0mIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciAmIzM0O3N0YW5kYnkmIzM0OyAoZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKaW5kZXggMzMwMzQ5OWFkNGM2Zi4uZGUwOTk2N2NlOGQ4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdApAQCAtMjAwLDYgJiM0MzsyMDAsMzMgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlCiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVEQKIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuCiAKJiM0MztEeW5hbWljIFBBTVQKJiM0MzstLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztUaGUgUGh5c2ljYWwgQWRkcmVzcyBNZXRhZGF0YSBUYWJsZSAoUEFNVCkgaXMgbWV0YWRhdGEgaW4gd2hpY2ggdGhlIFREWAomIzQzO21vZHVsZSBrZWVwcyBkYXRhIGFib3V0IGVhY2ggcGh5c2ljYWwgcGFnZSAodGhpbmsgc3RydWN0IHBhZ2UpLiBTcGFjZQomIzQzO2ZvciBpdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIFZNTSwgY29uc3VtZXMgdXAgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0KJiM0MzttZW1vcnkgYW5kIG5lZWRzIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSBURFggbW9kdWxlIHdoZW4gdGhlIFREWCBtb2R1bGUgaXMKJiM0MztmaXJzdCBsb2FkZWQuCiYjNDM7CiYjNDM7RHluYW1pYyBQQU1UIGlzIGFuIGFkZC1vbiBmZWF0dXJlIHRoYXQgYWxsb3dzIGEgVk1NIHRvIGR5bmFtaWNhbGx5CiYjNDM7YWxsb2NhdGUgdGhlIHBhcnQgb2YgdGhlIFBBTVQgd2hpY2ggdHJhY2tzIDRLQiBwYWdlcy4gVGhpcyByZWR1Y2VzIHRoZQomIzQzO2Ftb3VudCBvZiBtZW1vcnkgdGhhdCBURFggY29uc3VtZXMgd2hpbGUgVERzIGFyZSBub3QgaW4gdXNlLgomIzQzOwomIzQzO1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6CiYjNDM7CiYjNDM7ICBbLi5dIHZpcnQvdGR4OiBFbmFibGUgRHluYW1pYyBQQU1UCiYjNDM7ICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVQKJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWQKJiM0MzsKJiM0MztEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsCiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byAmIzM0O29uJiMzNDsuIFRoZSBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgVERYIG1vZHVsZQomIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmcKJiM0Mztjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluCiYjNDM7aXRzIGVudW1lcmF0aW9uIG9mIER5bmFtaWMgUEFNVCBzdXBwb3J0LCBrZXJuZWwgc3VwcG9ydCBjYW4gYmUgY2hhbmdlZCB0bwomIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dAomIzQzO0R5bmFtaWMgUEFNVC4KJiM0MzsKIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IGUyMTNjOWFlM2UzMDEuLjVjMzU4YzQwZWFlOGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaApAQCAtOTksNiAmIzQzOzk5LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcCkKIEtWTV9YODZfT1AobG9hZF9tbXVfcGdkKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKQogS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdCkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpCiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdCkKIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19vZmZzZXQpCiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDY4M2JiOGJmNDNhOTQuLjU3ZDM3NDkxYzdjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTY0NCw2ICYjNDM7MTY0NCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJLyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqLwogCXZvaWQgKCpmcmVlX2V4dGVybmFsX3NwdCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CiAKJiM0MzsJaW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTsKIAogCWJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCmluZGV4IDg5ZTk3ZDU3NjFkODkuLmUxODZkZmU1YmY4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQAogLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi8KICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HCUJJVF9VTEwoMSkKICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9ECUJJVF9VTEwoMTgpCiYjNDM7I2RlZmluZSBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVAlCSVRfVUxMKDM2KQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApAQCAtMTE4LDEyICYjNDM7MTE5LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfc3VwcG9ydHNfcnVudGltZV91cGRhdGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mCiAJcmV0dXJuIHN5c2luZm8tJmd0O2ZlYXR1cmVzLnRkeF9mZWF0dXJlczAgJmFtcDsgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HOwogfQogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pOwomIzQzOwomIzQzOy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIERQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqLwomIzQzO3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0OwomIzQzOwlpbnQgY250OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7Y2FjaGUtJmd0O3BhZ2VfbGlzdCk7CiYjNDM7CWNhY2hlLSZndDtjbnQgPSAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7CiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKJiM0MztpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpOwomIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pOwomIzQzOwogaW50IHRkeF9ndWVzdF9rZXlpZF9hbGxvYyh2b2lkKTsKIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTsKIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTsKIAogdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7CiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogc3RydWN0IHRkeF90ZCB7CiAJLyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovCiAJc3RydWN0IHBhZ2UgKnRkcl9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCmluZGV4IDQxMTUwZDU0NjU4OWMuLjhhM2NjMWEyYTQxZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmgKQEAgLTEsNyAmIzQzOzEsNyBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi8KLSNpZm5kZWYgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKLSNkZWZpbmUgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKJiM0MzsvKiBURFggZ2xvYmFsIG1ldGFkYXRhIHN0cnVjdHVyZXMuICovCiYjNDM7I2lmbmRlZiBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSAomIzQzOyNkZWZpbmUgX1g4Nl9WSVJUX1REWF9URFhfR0xPQkFMX01FVEFEQVRBX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTIxLDYgJiM0MzsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7CiAJdTE2IHBhbXRfNGtfZW50cnlfc2l6ZTsKIAl1MTYgcGFtdF8ybV9lbnRyeV9zaXplOwogCXUxNiBwYW10XzFnX2VudHJ5X3NpemU7CiYjNDM7CiYjNDM7CS8qIE9wdGlvbmFsIG1ldGFkYXRhLCBpZiBEUEFNVCBpcyBzdXBwb3J0ZWQgKi8KJiM0MzsJdTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKIH07CiAKIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li4yODE2ODYxY2EyNzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTYxNyw2ICYjNDM7NjE3LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KQogCQkJCQkgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiYjNDM7CiYjNDM7CQlyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwogCX0KIAlyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoJmFtcDt2Y3B1LSZndDthcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSwKIAkJCQkgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBiMjcyYzIwNTg2YTc0Li43Yzc5ZjRkNGJmOTlhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTM2Miw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpCiAJaWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSkKIAkJcmV0dXJuOwogCi0JX19mcmVlX3BhZ2UoY3RybF9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7CiB9CiAKIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHsKQEAgLTU4OSw3ICYjNDM7NTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pCiAKIAl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTsKIAotCV9fZnJlZV9wYWdlKGt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlKTsKIAlrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSA9IE5VTEw7CiB9CiAKQEAgLTY4MSw2ICYjNDM7NjgxLDggQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXRkeF9pbml0X3BhbXRfY2FjaGUoJmFtcDt0ZHgtJmd0O3BhbXRfY2FjaGUpOwomIzQzOwogCWZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbCgmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1KTsKIAl2Y3B1LSZndDthcmNoLmFwaWMtJmd0O2d1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3RkeC0mZ3Q7dnQucGlfd2FrZXVwX2xpc3QpOwpAQCAtODY2LDYgJiM0Mzs4NjgsOCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCWludCBpOwogCiYjNDM7CXRkeF9mcmVlX3BhbXRfY2FjaGUoJmFtcDt0ZHgtJmd0O3BhbXRfY2FjaGUpOwomIzQzOwogCWlmICh2Y3B1LSZndDtjcHUgIT0gLTEpIHsKIAkJS1ZNX0JVR19PTih0ZHgtJmd0O3N0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtJmd0O2t2bSk7CiAJCXRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7CkBAIC0xNjE4LDYgJiM0MzsxNjIyLDE3IEBAIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKQogCXRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpOwogfQogCiYjNDM7c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE1pbnVzIG9uZSBwYWdlIHRvIGV4Y2x1ZGUgdGhlIHJvb3QgU1BULCBidXQgcGx1cyBvbmUgcGFnZSBmb3IgYQomIzQzOwkgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLgomIzQzOwkgKi8KJiM0MzsJbWluX25yX3NwdHMgJiM0Mzs9IC0xICYjNDM7IDE7CiYjNDM7CiYjNDM7CXJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZSgmYW1wO3RvX3RkeCh2Y3B1KS0mZ3Q7cGFtdF9jYWNoZSwgbWluX25yX3NwdHMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2FkZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCwKIAkJCSAgICBrdm1fcGZuX3QgcGZuKQogewpAQCAtMTY3NiwxNiAmIzQzOzE2OTEsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCQkJCSAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpOwogCWdwYV90IGdwYSA9IGdmbl90b19ncGEoZ2ZuKTsKIAl1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7CiAJc3RydWN0IHBhZ2UgKnNlcHRfcHQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKQomIzQzOwkJcmV0dXJuIC1FSU87CiAKIAlzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTsKIAlpZiAoIXNlcHRfcHQpCiAJCXJldHVybiAtRUlPOwogCiYjNDM7CXJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgJmFtcDt0b190ZHgodmNwdSktJmd0O3BhbXRfY2FjaGUpOwomIzQzOwlpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCWVyciA9IHRkaF9tZW1fc2VwdF9hZGQoJmFtcDt0b19rdm1fdGR4KGt2bSktJmd0O3RkLCBncGEsIGxldmVsLCBzZXB0X3B0LAogCQkJICAgICAgICZhbXA7ZW50cnksICZhbXA7bGV2ZWxfc3RhdGUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJdGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTsKJiM0MzsKIAlpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTY5OCw4ICYjNDM7MTcyNSwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsCiAJCQkJICB1NjQgbmV3X3NwdGUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7CiAJc3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7CiAJa3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAogCS8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi8KIAlpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSkKQEAgLTE3MDcsNiAmIzQzOzE3MzksMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmUKIAogCVdBUk5fT05fT05DRSgobmV3X3NwdGUgJmFtcDsgVk1YX0VQVF9SV1hfTUFTSykgIT0gVk1YX0VQVF9SV1hfTUFTSyk7CiAKJiM0MzsJcmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgJmFtcDt0b190ZHgodmNwdSktJmd0O3BhbXRfY2FjaGUpOwomIzQzOwlpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCS8qCiAJICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KCkKIAkgKiBiZWZvcmUga3ZtX3RkeC0mZ3Q7c3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHQKQEAgLTE3MTksMTAgJiM0MzsxNzU1LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlCiAJICogSWYgdGhlIFREIGlzbiYjMzk7dCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZwogCSAqIHRoZSBWTSBpbWFnZSB2aWEgS1ZNX1REWF9JTklUX01FTV9SRUdJT047IEFERCB0aGUgcGFnZSB0byB0aGUgVEQuCiAJICovCi0JaWYgKHVubGlrZWx5KGt2bV90ZHgtJmd0O3N0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSkKLQkJcmV0dXJuIHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwlpZiAobGlrZWx5KGt2bV90ZHgtJmd0O3N0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSkKJiM0MzsJCXJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXRkeF9wYW10X3B1dChwZm4pOwogCi0JcmV0dXJuIHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTgxOSw2ICYjNDM7MTg2MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfcmVtb3ZlX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIAkJcmV0dXJuIC1FSU87CiAKIAl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIoUEZOX1BIWVMocGZuKSwgUEFHRV9TSVpFKTsKJiM0MzsJdGR4X3BhbXRfcHV0KHBmbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NjIsNiAmIzQzOzE5MDQsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSwKICAqLwogc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewomIzQzOwlzdHJ1Y3QgcGFnZSAqc2VwdF9wdCA9IHZpcnRfdG9fcGFnZShzcC0mZ3Q7ZXh0ZXJuYWxfc3B0KTsKJiM0MzsKIAkvKgogCSAqIEtWTSBkb2VzbiYjMzk7dCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZQogCSAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZQpAQCAtMTg3NSwxNSAmIzQzOzE5MTksMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogCSAqIHRoZSBwYWdlIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGUgZW5jcnlwdGVkIHBhZ2UuCiAJICovCiAJaWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8Ci0JICAgIHRkeF9yZWNsYWltX3BhZ2UodmlydF90b19wYWdlKHNwLSZndDtleHRlcm5hbF9zcHQpKSkKJiM0MzsJICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpCiAJCWdvdG8gb3V0OwogCiAJLyoKLQkgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGJlY2F1c2UgUkNVLXRpbWUgZnJlZSBpcyB1bm5lY2Vzc2FyeQotCSAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nCi0JICogcmVhZGVycy4KJiM0MzsJICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2VzbiYjMzk7dCBzdXBwb3J0CiYjNDM7CSAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlCiYjNDM7CSAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuCiAJICovCi0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLSZndDtleHRlcm5hbF9zcHQpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc2VwdF9wdCk7CiBvdXQ6CiAJc3AtJmd0O2V4dGVybmFsX3NwdCA9IE5VTEw7CiB9CkBAIC0yNDU2LDcgJiM0MzsyNTAwLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogCiAJcmV0ID0gLUVOT01FTTsKIAotCXRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwl0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAlpZiAoIXRkcl9wYWdlKQogCQlnb3RvIGZyZWVfaGtpZDsKIApAQCAtMjQ2OSw3ICYjNDM7MjUxMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIAkJZ290byBmcmVlX3RkcjsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQl0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJdGRjc19wYWdlc1tpXSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAkJaWYgKCF0ZGNzX3BhZ2VzW2ldKQogCQkJZ290byBmcmVlX3RkY3M7CiAJfQpAQCAtMjU4NywxMCAmIzQzOzI2MzEsOCBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiB0ZWFyZG93bjoKIAkvKiBPbmx5IGZyZWUgcGFnZXMgbm90IHlldCBhZGRlZCwgc28gc3RhcnQgYXQgJiMzOTtpJiMzOTsgKi8KIAlmb3IgKDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmICh0ZGNzX3BhZ2VzW2ldKSB7Ci0JCQlfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKLQkJCXRkY3NfcGFnZXNbaV0gPSBOVUxMOwotCQl9CiYjNDM7CQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7CiYjNDM7CQl0ZGNzX3BhZ2VzW2ldID0gTlVMTDsKIAl9CiAJaWYgKCFrdm1fdGR4LSZndDt0ZC50ZGNzX3BhZ2VzKQogCQlrZnJlZSh0ZGNzX3BhZ2VzKTsKQEAgLTI2MDUsMTYgJiM0MzsyNjQ3LDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIAlmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTsKIAogZnJlZV90ZGNzOgotCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlpZiAodGRjc19wYWdlc1tpXSkKLQkJCV9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pOwotCX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pOwogCWtmcmVlKHRkY3NfcGFnZXMpOwogCWt2bV90ZHgtJmd0O3RkLnRkY3NfcGFnZXMgPSBOVUxMOwogCiBmcmVlX3RkcjoKLQlpZiAodGRyX3BhZ2UpCi0JCV9fZnJlZV9wYWdlKHRkcl9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTsKIAlrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSA9IE5VTEw7CiAKIGZyZWVfaGtpZDoKQEAgLTI5NDgsNyAmIzQzOzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAJaW50IHJldCwgaTsKIAl1NjQgZXJyOwogCi0JcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCXRkeC0mZ3Q7dnAudGR2cHJfcGFnZSA9IHBhZ2U7CkBAIC0yOTY4LDcgJiM0MzszMDA3LDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAkJaWYgKCFwYWdlKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlX3RkY3g7CkBAIC0yOTkwLDcgJiM0MzszMDI5LDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCQkJICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuCiAJCQkgKi8KIAkJCWZvciAoOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJCQlfX2ZyZWVfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwomIzQzOwkJCQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKIAkJCQl0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMOwogCQkJfQogCQkJcmV0dXJuIC1FSU87CkBAIC0zMDE4LDE2ICYjNDM7MzA1NywxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAKIGZyZWVfdGRjeDoKIAlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSkKLQkJCV9fZnJlZV9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiYjNDM7CQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKIAkJdGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDsKIAl9CiAJa2ZyZWUodGR4LSZndDt2cC50ZGN4X3BhZ2VzKTsKIAl0ZHgtJmd0O3ZwLnRkY3hfcGFnZXMgPSBOVUxMOwogCiBmcmVlX3RkdnByOgotCWlmICh0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UpCi0JCV9fZnJlZV9wYWdlKHRkeC0mZ3Q7dnAudGR2cHJfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UpOwogCXRkeC0mZ3Q7dnAudGR2cHJfcGFnZSA9IE5VTEw7CiAJdGR4LSZndDt2cC50ZHZwcl9wYSA9IDA7CiAKQEAgLTM0ODcsNiAmIzQzOzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAogCXZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlOwogCXZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0OwomIzQzOwomIzQzOwlpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpCiYjNDM7CQl2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7CiYjNDM7CiAJdnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oCmluZGV4IGFjODMyM2E2OGIxNjMuLmZkMzY4ZTNlZTA2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaApAQCAtNzIsNiAmIzQzOzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHsKIAogCXU2NCBtYXBfZ3BhX25leHQ7CiAJdTY0IG1hcF9ncGFfZW5kOwomIzQzOwomIzQzOwlzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTsKIH07CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCmluZGV4IDFiOWZmNzQ5ZGQ4ZTAuLjJhY2FiNmU1ZjVmODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMKQEAgLTMwLDYgJiM0MzszMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3VzcGVuZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2NvcmVfb3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zcGVjaWFsX2luc25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL21zci1pbmRleC5oJmd0OwpAQCAtNDYsNiAmIzQzOzQ3LDExIEBACiAjaW5jbHVkZSAmIzM0O3NlYW1jYWxsX2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHguaCYjMzQ7CiAKJiM0MzsvKiBOdW1iZXIgb2YgRFBBTVQgcGFnZXMgdG8gYmUgcHJvdmlkZWQgdG8gVERYIG1vZHVsZSBwZXIgMk1CIHJlZ2lvbiBvZiBQQSAqLwomIzQzOyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDIKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB0ZHhfZW5hYmxlX2RwYW10IF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKIHN0cnVjdCB0ZHhfbW9kdWxlX3N0YXRlIHsKIAlib29sIGluaXRpYWxpemVkOwogCWJvb2wgc3lzaW5pdF9kb25lOwpAQCAtNjMsNiAmIzQzOzY5LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpOwogCiBzdGF0aWMgc3RydWN0IHRkbXJfaW5mb19saXN0IHRkeF90ZG1yX2xpc3Q7CiAKJiM0MzsvKgomIzQzOyAqIE9uIGEgbWFjaGluZSB3aXRoIERQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyCiYjNDM7ICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3IKJiM0MzsgKiB0aGUgRFBBTVQgYXQgdGhlIDJNQiByYW5nZS4gVGhlIGtlcm5lbCBhbGxvY2F0ZXMgRFBBTVQgcmVmY291bnRzIGF0CiYjNDM7ICogaW5pdGlhbGl6YXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGF0b21pY190ICpkcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqLwogc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7CiAKQEAgLTI1Miw2ICYjNDM7MjY2LDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHsKIAkub3BzID0gJmFtcDt0ZHhfc3lzY29yZV9vcHMsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBEUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7ICoKJiM0MzsgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9faW5pdCBpbnQgaW5pdF9kcGFtdF9yZWZjb3VudHModm9pZCkKJiM0Mzt7CiYjNDM7CXNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKmRwYW10X3JlZmNvdW50cyk7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkcGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpOwomIzQzOwlpZiAoIWRwYW10X3JlZmNvdW50cykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCB2b2lkIGZyZWVfZHBhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZmcmVlKGRwYW10X3JlZmNvdW50cyk7CiYjNDM7CWRwYW10X3JlZmNvdW50cyA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwkvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiAmZ3Q7Jmd0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO2RwYW10X3JlZmNvdW50c1tpbmRleF07CiYjNDM7fQomIzQzOwogLyoKICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZQogICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJiMzOTt0CkBAIC01MTAsMzUgJiM0Mzs1NjAsMzcgQEAgc3RhdGljIF9faW5pdCBpbnQgZmlsbF9vdXRfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzOwomIzQzOwlpbnQgYml0c19wZXJfZW50cnk7CiYjNDM7CiYjNDM7CWJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7CiYjNDM7CW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJcGFtdF9zeiA9IERJVl9ST1VORF9VUChucl9wYW10X2VudHJpZXMgKiBiaXRzX3Blcl9lbnRyeSwgQklUU19QRVJfQllURSk7CiYjNDM7CiYjNDM7CXJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDYWxjdWxhdGUgUEFNVCBzaXplIGdpdmVuIGEgVERNUiBhbmQgYSBwYWdlIHNpemUuICBUaGUgcmV0dXJuZWQKICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LgogICovCi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeiwKLQkJCQkJICAgICB1MTYgcGFtdF9lbnRyeV9zaXplKQomIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KQogewogCXVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzOwomIzQzOwljb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTsKJiM0MzsJY29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewomIzQzOwkJdGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsCiYjNDM7CQl0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMm1fZW50cnlfc2l6ZSwKJiM0MzsJCXRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLAomIzQzOwl9OwogCi0Jc3dpdGNoIChwZ3N6KSB7Ci0JY2FzZSBURFhfUFNfNEs6Ci0JCW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJYnJlYWs7Ci0JY2FzZSBURFhfUFNfMk06Ci0JCW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgUE1EX1NISUZUOwotCQlicmVhazsKLQljYXNlIFREWF9QU18xRzoKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQVURfU0hJRlQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJcmV0dXJuIDA7Ci0JfQomIzQzOwlucl9wYW10X2VudHJpZXMgPSB0ZG1yLSZndDtzaXplICZndDsmZ3Q7IHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdOwomIzQzOwlwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplW3Bnc3pdOwogCi0JcGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZTsKIAkvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqLwotCXBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpOwotCi0JcmV0dXJuIHBhbXRfc3o7CiYjNDM7CXJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opOwogfQogCiAvKgpAQCAtNTc2LDE1ICYjNDM7NjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzCiAgKiB3aXRoaW4gQHRkbXIsIGFuZCBzZXQgdXAgUEFNVHMgZm9yIEB0ZG1yLgogICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCi0JCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsCi0JCQkJICAgdTE2IHBhbXRfZW50cnlfc2l6ZVtdKQomIzQzOwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKLQl1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdOwotCXVuc2lnbmVkIGxvbmcgcGFtdF9zaXplW1REWF9QU19OUl07Ci0JdW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTsKIAl1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplOwogCXN0cnVjdCBwYWdlICpwYW10OwotCWludCBwZ3N6LCBuaWQ7CiYjNDM7CWludCBuaWQ7CiAKIAluaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpOwogCkBAIC01OTIsMTMgJiM0Mzs2NDAsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLAogCSAqIENhbGN1bGF0ZSB0aGUgUEFNVCBzaXplIGZvciBlYWNoIFREWCBzdXBwb3J0ZWQgcGFnZSBzaXplCiAJICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuCiAJICovCi0JdGRtcl9wYW10X3NpemUgPSAwOwotCWZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiAmbHQ7IFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHsKLQkJcGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LAotCQkJCQlwYW10X2VudHJ5X3NpemVbcGdzel0pOwotCQl0ZG1yX3BhbXRfc2l6ZSAmIzQzOz0gcGFtdF9zaXplW3Bnc3pdOwomIzQzOwl0ZG1yLSZndDtwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7CiYjNDM7CXRkbXItJmd0O3BhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCS8qIFdpdGggRFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqLwomIzQzOwkJdGRtci0mZ3Q7cGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0ZG1yLSZndDtwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7CiAJfQogCiYjNDM7CXRkbXJfcGFtdF9zaXplID0gdGRtci0mZ3Q7cGFtdF80a19zaXplICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZSAmIzQzOyB0ZG1yLSZndDtwYW10XzFnX3NpemU7CiYjNDM7CiAJLyoKIAkgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsCiAJICogUEFNVHMuICBUaGlzIGhlbHBzIG1pbmltaXplIHRoZSBQQU1UJiMzOTtzIHVzZSBvZiByZXNlcnZlZCBhcmVhcwpAQCAtNjA2LDI1ICYjNDM7NjU5LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKIAkgKi8KIAlwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsCiAJCQluaWQsICZhbXA7bm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAoIXBhbXQpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJLyoKLQkgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGUKLQkgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS4KJiM0MzsJICogdGRtci0mZ3Q7cGFtdF80a19iYXNlIGlzIHN0aWxsIHplcm8gc28gdGhlIGVycm9yCiYjNDM7CSAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC4KIAkgKi8KLQl0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTsKLQkJdGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTsKLQl9CiYjNDM7CWlmICghcGFtdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JdGRtci0mZ3Q7cGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107Ci0JdGRtci0mZ3Q7cGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107CiYjNDM7CXRkbXItJmd0O3BhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gdGRtci0mZ3Q7cGFtdF80a19iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfNGtfc2l6ZTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gdGRtci0mZ3Q7cGFtdF8ybV9iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU1LDEwICYjNDM7NzAwLDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJdGRtcl9nZXRfcGFtdCh0ZG1yLCAmYW1wO3BhbXRfYmFzZSwgJmFtcDtwYW10X3NpemUpOwogCiAJLyogRG8gbm90aGluZyBpZiBQQU1UIGhhc24mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqLwotCWlmICghcGFtdF9zaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKQomIzQzOwlpZiAoIXBhbXRfYmFzZSkKIAkJcmV0dXJuOwogCiAJcGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTsKQEAgLTY4NCwxNCAmIzQzOzcyNiwxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCkKIAogLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCi0JCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LAotCQkJCQl1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZG1yX2xpc3QtJmd0O25yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsCi0JCQkJcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJCXJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC05NjgsMTggJiM0MzsxMDA4LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAkJCQkgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCQkJCSAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7Ci0JdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewotCQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfNGtfZW50cnlfc2l6ZSwKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUsCi0JCXN5c2luZm9fdGRtci0mZ3Q7cGFtdF8xZ19lbnRyeV9zaXplLAotCX07CiAJaW50IHJldDsKIAogCXJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJcmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5OCw2ICYjNDM7MTAzMyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQJQklUKDE2KQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCiAJCQkJICAgIHU2NCBnbG9iYWxfa2V5aWQpCiB7CkBAIC0xMDI2LDYgJiM0MzsxMDYzLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCWFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTsKIAlhcmdzLnJkeCA9IHRkbXJfbGlzdC0mZ3Q7bnJfY29uc3VtZWRfdGRtcnM7CiAJYXJncy5yOCA9IGdsb2JhbF9rZXlpZDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXG4mIzM0Oyk7CiYjNDM7CQlhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCAmYW1wO2FyZ3MpOwogCiAJLyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovCkBAIC0xMTY3LDEwICYjNDM7MTIxMCwxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAkgKi8KIAlnZXRfb25saW5lX21lbXMoKTsKIAotCXJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzOwlyZXQgPSBpbml0X2RwYW10X3JlZmNvdW50cygpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3B1dF90ZHhtZW07CiAKJiM0MzsJcmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoJmFtcDt0ZHhfbWVtbGlzdCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9mcmVlX2RwYW10X3JlZmNvdW50czsKJiM0MzsKIAkvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqLwogCXJldCA9IGFsbG9jX3RkbXJfbGlzdCgmYW1wO3RkeF90ZG1yX2xpc3QsICZhbXA7dGR4X3N5c2luZm8udGRtcik7CiAJaWYgKHJldCkKQEAgLTEyMjAsNiAmIzQzOzEyNjcsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAlmcmVlX3RkbXJfbGlzdCgmYW1wO3RkeF90ZG1yX2xpc3QpOwogZXJyX2ZyZWVfdGR4bWVtOgogCWZyZWVfdGR4X21lbWxpc3QoJmFtcDt0ZHhfbWVtbGlzdCk7CiYjNDM7ZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOgomIzQzOwlmcmVlX2RwYW10X3JlZmNvdW50cygpOwogCWdvdG8gb3V0X3B1dF90ZHhtZW07CiB9CiAKQEAgLTIwMDUsNiAmIzQzOzIwNTQsMjkzIEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTsKIAomIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKQomIzQzO3sKJiM0MzsJaWYgKCF0ZHhfZW5hYmxlX2RwYW10KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gc3lzaW5mby0mZ3Q7ZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCAmYW1wOyBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmFtcDtjYWNoZS0mZ3Q7cGFnZV9saXN0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKJiM0MzsJaWYgKHBhZ2UpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7cGFnZS0mZ3Q7bHJ1KTsKJiM0MzsJCWNhY2hlLSZndDtjbnQtLTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19kcGFtdF9wYWdlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlpZiAoY2FjaGUpCiYjNDM7CQlyZXR1cm4gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSk7CiYjNDM7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTsKJiM0MzsJCWlmICghcGFtdF9wYWdlc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBpOyBqJiM0MzsmIzQzOykKJiM0MzsJCV9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbal0pOwomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlcwomIzQzOwkJICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS4KJiM0MzsJCSAqLwomIzQzOwkJdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJCV9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIEhlbHBlciBmb3IgYnVpbGRpbmcgRFBBTVQgc2VhbWNhbGwoKSBhcmd1bWVudHMuICovCiYjNDM7c3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbikKJiM0Mzt7CiYjNDM7CS8qIEZpbmQgdGhlIDJNQi13aWRlIERQQU1UIHJlZ2lvbiBmb3IgJiMzOTtwZm4mIzM5OzogKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCwgUE1EX1NJWkUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBURFggQUJJIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHBhZ2UgbGV2ZWwgdGhlIGluc3RhbGxlZCBEUEFNVAomIzQzOwkgKiBiYWNraW5nIHdpbGwgY292ZXIsIGV2ZW4gdGhvdWdoIHRvZGF5IG9ubHkgMk1CIGlzIHN1cHBvcnRlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBZGQgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9hZGQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwkJLnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSwKJiM0MzsJCS5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBzZWFtY2FsbChUREhfUEhZTUVNX1BBTVRfQURELCAmYW1wO2FyZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwl9OwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgJmFtcDthcmdzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi8KJiM0MzsJcGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7CiYjNDM7CXBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBEUEFNVCBtZW1vcnkgKi8KJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRwYW10X2xvY2spOwomIzQzOwomIzQzOy8qIEJ1bXAgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIERQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqLwomIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07CiYjNDM7CWF0b21pY190ICpkcGFtdF9yZWZjb3VudDsKJiM0MzsJdTY0IHRkeF9zdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX2RwYW10X3JlZmNvdW50KHBmbik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBEUEFNVCBlbnRyeSBpcyBhbHJlYWR5IGFkZGVkIChpLmUuIHJlZmNvdW50ICZndDs9IDEpLAomIzQzOwkgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2RwYW10X2xvY2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG8KJiM0MzsJICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtJmd0OzAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBubwomIzQzOwkgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC0mZ3Q7MS4gUmVjaGVjayB1bmRlciB0aGUKJiM0MzsJICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtJmd0OzEKJiM0MzsJICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSkKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCXJldCA9IC1FSU87CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGUKJiM0MzsJICogb25seSB3YXkgdG8gaW5jcmVhc2UgaXQgZnJvbSAwLSZndDsxLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3NldChkcGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7ZHBhbXRfbG9jayk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9mcmVlOgomIzQzOwlzcGluX3VubG9jaygmYW1wO2RwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpOwomIzQzOwomIzQzOy8qIERyb3AgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovCiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTsKJiM0MzsJYXRvbWljX3QgKmRwYW10X3JlZmNvdW50OwomIzQzOwl1NjQgdGR4X3N0YXR1czsKJiM0MzsKJiM0MzsJaWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX2RwYW10X3JlZmNvdW50KHBmbik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgRFBBTVQgZW50cnksIGRvbiYjMzk7dAomIzQzOwkgKiByZW1vdmUgaXQgeWV0LiBKdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soZHBhbXRfcmVmY291bnQsICZhbXA7ZHBhbXRfbG9jaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW4KJiM0MzsJICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhcwomIzQzOwkgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzCiYjNDM7CSAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kCiYjNDM7CSAqIHRoZSBkYW5nbGluZyBEUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC4KJiM0MzsJICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLAomIzQzOwkJICogYnV0IHRoZSBEUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC4KJiM0MzsJCSAqLwomIzQzOwkJYXRvbWljX3NldChkcGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkcGFtdF9sb2NrKTsKJiM0MzsJZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpOwomIzQzOwlyZXR1cm47CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkcGFtdF9sb2NrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7CiYjNDM7CiYjNDM7dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJd2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKQomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9wYW10X2NhY2hlKTsKJiM0MzsKJiM0MztpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlucGFnZXMgKj0gVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOwomIzQzOwomIzQzOwl3aGlsZSAoY2FjaGUtJmd0O2NudCAmbHQ7IG5wYWdlcykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBhZ2UpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQlsaXN0X2FkZCgmYW1wO3BhZ2UtJmd0O2xydSwgJmFtcDtjYWNoZS0mZ3Q7cGFnZV9saXN0KTsKJiM0MzsJCWNhY2hlLSZndDtjbnQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWCBtb2R1bGUgZm9yIHVzZSBhcyBhICYjMzQ7Y29udHJvbCYjMzQ7CiYjNDM7ICogcGFnZSwgaS5lLiBwYWdlcyB0aGF0IGFyZSB1c2VkIGZvciBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGEgZ2l2ZW4gVERYCiYjNDM7ICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBEUEFNVCB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkgewomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFggbW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sCiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguCiYjNDM7ICovCiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7CiYjNDM7CV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCAmYW1wO3RkeF9lbmFibGVfZHBhbXQpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO19fc2V0dXAoJiMzNDt0ZHhfZHBhbXQ9JiMzNDssIHRkeF9kcGFtdF9zZXR1cCk7CiYjNDM7CiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKQogewogCXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCmluZGV4IGJkZmQwZTFlMzM3YWMuLmE4ODZjNTRkZWNhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmgKQEAgLTQ4LDYgJiM0Mzs0OCw4IEBACiAjZGVmaW5lIFRESF9TWVNfQ09ORklHCQkJNDUKICNkZWZpbmUgVERIX1NZU19TSFVURE9XTgkJNTIKICNkZWZpbmUgVERIX1NZU19VUERBVEUJCQk1MwomIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERAkJNTgKJiM0MzsjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkUJCTU5CiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRQkJCTY5CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYwppbmRleCBlNDljMzAwZjIzZDQzLi45OGViZjE3YWFiMWNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLgomIzQzOyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuCiAgKgogICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb24KICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS4KQEAgLTMzLDYgJiM0MzszMywxOCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZgogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwl1NjQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsICZhbXA7dmFsKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cyA9IHZhbDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiAJcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwogCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoJmFtcDtzeXNpbmZvLSZndDt0ZF9jb25mKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzbwomIzQzOwkgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCYjMzk7cyBub3Qgc3VwcG9ydGVkLiBEb24mIzM5O3QKJiM0MzsJICogdHJ5IHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2UKJiM0MzsJICogRFBBTVQgYnV0IGRvbiYjMzk7dCBleHBvc2UgdGhlIG1ldGFkYXRhLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKQomIzQzOwkJcmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KCZhbXA7c3lzaW5mby0mZ3Q7dGRtcik7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxOTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBURFggRFBBTVQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHRoZSBwYXRjaCBpcyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIExldCYjMzk7cyBkaWcgaW4uIEZpcnN0LCBJIG5lZWQgdG8gKnVuZGVyc3RhbmQqIHdoYXQgdGhpcyBwYXRjaCBpcyBldmVuIGRvaW5nLiBBaCwgaXQmIzM5O3MgYWRkaW5nIER5bmFtaWMgUEFNVCAoRFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGluIHRoZSBLVk0gVERYIGFuZCB2aXJ0L3ZteC90ZHggY29tcG9uZW50cy4gVGhhdCYjMzk7cyBnb29kIGluZm9ybWF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBjb2RlJiMzOTtzIG1vZGlmaWVkLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGRlY2VudCBjaHVuayBvZiB0aGUgY29kZWJhc2U6IGRvY3VtZW50YXRpb24sIGluY2x1ZGUgZmlsZXMgaW4gYGFyY2gveDg2YCwgYW5kIHNvbWUga2V5IGBrdm1gIGRpcmVjdG9yaWVzLCBlc3BlY2lhbGx5IHRob3NlIGRlYWxpbmcgd2l0aCBgdm14YCBhbmQgYHRkeGAgKGluY2x1ZGluZyBgdGR4X2dsb2JhbF9tZXRhZGF0YWApLiBUaGF0IGJyZWFkdGggb2YgY2hhbmdlcyBpcyBpbnRlcmVzdGluZy4gVGhlIGRlZXBlciBpdCBnb2VzIHRoZSBtb3JlIG9wcG9ydHVuaXR5IGZvciBoaWRkZW4gZWRnZSBjYXNlcy4KCk5leHQsIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZnV6emFiaWxpdHkgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50cy4gQ2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBmdW5jdGlvbmFsaXR5IGluIFFFTVUgb3IgR0NFPyBEb2VzIHRoZSBURFggaG9zdCAodGhhdCBJbnRlbCBURFggbW9kdWxlL1NFQU1DQUxMKSBmdW5jdGlvbiBwcm9wZXJseSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgd2l0aG91dCByZWFsIFREWCBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24uCgpXYWl0IGEgc2Vjb25k4oCmIEhvdyBkb2VzIHRoaXMgVERYIGhvc3QgZ2V0IGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBMZXQmIzM5O3MgZG8gYSBxdWljayBkaXZlLiBJIHNob3VsZCBjaGVjayBgZ3JlcHBlcmAgYW5kIGxvb2sgaW50byBgYXJjaC94ODYvdmlydC92bXgvdGR4L2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIFREWCBob3N0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfdGR4X21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTE2OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkbXJzKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMTg3LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjExODg6c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4OS17XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEyNzU9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzA0LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMDU6XHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzA2LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFREWCBIb3N0IEluaXRpYWxpemF0aW9uIGFuZCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBURFggaG9zdCBlbnZpcm9ubWVudC4gRmlyc3QsIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHRkeF9lbmFibGVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24sIEkmIzM5O20gc3VyZSwgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBURFggZmVhdHVyZXMgYXJlIGFjdGl2YXRlZC4gS25vd2luZyB3aGVyZSB0aGlzIGlzIGNhbGxlZCBhbmQgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHdpbGwgdGVsbCBtZSBxdWl0ZSBhIGJpdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB3ZSYjMzk7cmUgdXNpbmcgZWFybHkgaW5pdGlhbGl6YXRpb24gdGVjaG5pcXVlcyBvciBkZWZlcnJpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZXNlIGNhbGwgc2l0ZXMgd2l0aCBhbnkgVERYLXNwZWNpZmljIGhvc3QgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzIGNydWNpYWwgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGUgVERYIGVudmlyb25tZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBpZGVudGlmeSBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBub3RlIHdoaWNoIG1vZHVsZXMgYXJlIGluaXRpYWxpemVkIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9lbmFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTUyLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjUzOnN0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0LVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMTg4PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMjc0LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEyNzU6c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzYte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzE3LX1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzE4OnN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzE5LVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMDU3PWJvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIwNTgte1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIwNTk6XHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjA2MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMzM3PXN0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjMzOC17XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjMzOTpcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzQwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEzNwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBURFggRW5hYmxlbWVudCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRkeF9lbmFibGUoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBhcmUgYnJvdWdodCBvbmxpbmUgd2l0aGluIHRoZSBWTVggY29udGV4dC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBjb3JlIG9mIHRoZSBURFggaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM6IHdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQsIHdoYXQgcmVnaXN0ZXJzIGFyZSBtYW5pcHVsYXRlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY29udHJvbCBiaXRzIGFyZSBzZXQgdG8gZW5hYmxlIFREWCBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGFueSBjYWxscyB0byBsb3dlci1sZXZlbCBmdW5jdGlvbnMsIHN1Y2ggYXMgdGhvc2UgcmVsYXRlZCB0byBoYW5kbGluZyBURFgtc3BlY2lmaWMgTVNScyBvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBURFggbW9kdWxlIGl0c2VsZi4gVGhpcyBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBlYXJseSBib290IHN0YWdlcyBhbmQgdGhlIHNlY3VyZSBzZXR1cCBvZiB0aGUgVERYIGVudmlyb25tZW50LCBzbyBJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWxldmVsIGRldGFpbHMgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0ZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOlxuMTI3MTpcdFx0ZnJlZV9kcGFtdF9yZWZjb3VudHMoKTtcbjEyNzI6XHRcdGdvdG8gb3V0X3B1dF90ZHhtZW07XG4xMjczOlx0fVxuMTI3NDpcdFxuMTI3NTpcdHN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbjEyNzY6XHR7XG4xMjc3Olx0XHRlbnVtIGNwdWhwX3N0YXRlIHN0YXRlO1xuMTI3ODpcdFx0aW50IHJldDtcbjEyNzk6XHRcbjEyODA6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcbjEyODE6XHRcdFx0cHJfZXJyKFwmIzM0O1REWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxuXCYjMzQ7KTtcbjEyODI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMjgzOlx0XHR9XG4xMjg0Olx0XG4xMjg1Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWFNBVkUpKSB7XG4xMjg2Olx0XHRcdHByX2VycihcJiMzNDtYU0FWRSBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjEyODc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjg4Olx0XHR9XG4xMjg5Olx0XG4xMjkwOlx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTU9WRElSNjRCKSkge1xuMTI5MTpcdFx0XHRwcl9lcnIoXCYjMzQ7TU9WRElSNjRCIGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMTI5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyOTM6XHRcdH1cbjEyOTQ6XHRcbjEyOTU6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUxGU05PT1ApKSB7XG4xMjk2Olx0XHRcdHByX2VycihcJiMzNDtTZWxmLXNub29wIGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMTI5NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEyOTg6XHRcdH1cbjEyOTk6XHRcbjEzMDA6XHRcdHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7dmlydC90ZHg6b25saW5lXCYjMzQ7LFxuMTMwMTpcdFx0XHRcdFx0ICB0ZHhfb25saW5lX2NwdSwgdGR4X29mZmxpbmVfY3B1KTtcbjEzMDI6XHRcdGlmIChzdGF0ZSBcdTAwM2MgMClcbjEzMDM6XHRcdFx0cmV0dXJuIHN0YXRlO1xuMTMwNDpcdFxuMTMwNTpcdFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XG4xMzA2Olx0XHRpZiAocmV0KSB7XG4xMzA3Olx0XHRcdHByX2VycihcJiMzNDtURFgtTW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxlZCAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuMTMwODpcdFx0XHRjcHVocF9yZW1vdmVfc3RhdGUoc3RhdGUpO1xuMTMwOTpcdFx0XHRyZXR1cm4gcmV0O1xuMTMxMDpcdFx0fVxuMTMxMTpcdFxuMTMxMjpcdFx0cmVnaXN0ZXJfc3lzY29yZShcdTAwMjZ0ZHhfc3lzY29yZSk7XG4xMzEzOlx0XG4xMzE0Olx0XHR0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcbjEzMTU6XHRcdHByX2luZm8oXCYjMzQ7VERYLU1vZHVsZSBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG4xMzE2Olx0XHRyZXR1cm4gMDtcbjEzMTc6XHR9XG4xMzE4Olx0c3Vic3lzX2luaXRjYWxsKHRkeF9lbmFibGUpO1xuMTMxOTpcdFxuMTMyMDpcdGludCB0ZHhfbW9kdWxlX3NodXRkb3duKHZvaWQpXG4xMzIxOlx0e1xuMTMyMjpcdFx0c3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmIGhhbmRvZmYgPSB7fTtcbjEzMjM6XHRcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuMTMyNDpcdFx0aW50IHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI1MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFREWCBIb3N0IFBsYXRmb3JtIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAuICBGaXJzdCB0aGluZ3MgZmlyc3Q6IHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgKmRlZmluZWQqIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmRldGVjdGVkKiBpbiB0aGUgY29kZT8gIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwLiAgR290dGEgdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIHJldmVhbHMgYWJvdXQgdGhpcyBURFggaG9zdCBwbGF0Zm9ybSBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIwMC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NEUF9MM1x0XHQoIDcqMzImIzQzOyA2KSAvKiBcJiMzNDtjZHBfbDNcJiMzNDsgQ29kZSBhbmQgRGF0YSBQcmlvcml0aXphdGlvbiBMMyAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMDE6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STVx0KCA3KjMyJiM0MzsgNykgLyogXCYjMzQ7dGR4X2hvc3RfcGxhdGZvcm1cJiMzNDsgUGxhdGZvcm0gc3VwcG9ydHMgYmVpbmcgYSBURFggaG9zdCAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMDItI2RlZmluZSBYODZfRkVBVFVSRV9IV19QU1RBVEVcdFx0KCA3KjMyJiM0MzsgOCkgLyogXCYjMzQ7aHdfcHN0YXRlXCYjMzQ7IEFNRCBIVy1QU3RhdGUgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTM0Njc9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM0OTg6XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTktXHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEyNzU9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMjc5LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEyODA6XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI4MS1cdFx0cHJfZXJyKFwmIzM0O1REWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQxNz1zdGF0aWMgYm9vbCBwYWRkcl9pc190ZHhfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHBoeXMpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0MjMtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQyNDpcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSlcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDI1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODA9dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTYzMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjMyOlx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTYzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMTEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVERYIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIFREWCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIGB0ZHhfaW5pdGAgd2l0aGluIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLCBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgMTU4MCB0aHJvdWdoIDE2NDAuIFRoaXMgcmFuZ2UgdHlwaWNhbGx5IGhvbGRzIGNyaXRpY2FsIHNldHVwIGZ1bmN0aW9ucywgcG90ZW50aWFsIHNlY3VyaXR5IGNoZWNrcywgb3IgY29uZmlndXJhdGlvbiBzdGVwcyBkaXJlY3RseSByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgVERYIGFyZSBiZWluZyBpbml0aWFsaXplZCBpbiByZWxhdGlvbiB0byBJbnRlbCYjMzk7cyBhcmNoaXRlY3R1cmUuIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBjb25jZXJuaW5nIGd1ZXN0IGNvbnRleHQgaW5pdGlhbGl6YXRpb24sIFREWCBtb2R1bGUgcmVnaXN0cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBoYW5kbGluZyBvciB2ZXJpZmljYXRpb24gcHJvY2Vzc2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1ODA6XHR2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuMTU4MTpcdHtcbjE1ODI6XHRcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XG4xNTgzOlx0XHRpbnQgZXJyO1xuMTU4NDpcdFxuMTU4NTpcdFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFx1MDAyNm5yX3RkeF9rZXlpZHMpO1xuMTU4NjpcdFx0aWYgKGVycilcbjE1ODc6XHRcdFx0cmV0dXJuO1xuMTU4ODpcdFxuMTU4OTpcdFx0cHJfaW5mbyhcJiMzNDtCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXG5cJiMzNDssXG4xNTkwOlx0XHRcdFx0dGR4X2tleWlkX3N0YXJ0LCB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgbnJfdGR4X2tleWlkcyk7XG4xNTkxOlx0XG4xNTkyOlx0XHQvKlxuMTU5MzpcdFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IHRvIHByb3RlY3RcbjE1OTQ6XHRcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJiMzOTtzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJiMzOTt0IGJlXG4xNTk1Olx0XHQgKiBhbnkgbGVmdCBmb3IgVERYIGd1ZXN0cyB0aHVzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcbjE1OTY6XHRcdCAqIGF0IGFsbC5cbjE1OTc6XHRcdCAqL1xuMTU5ODpcdFx0aWYgKG5yX3RkeF9rZXlpZHMgXHUwMDNjIDIpIHtcbjE1OTk6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxuXCYjMzQ7KTtcbjE2MDA6XHRcdFx0cmV0dXJuO1xuMTYwMTpcdFx0fVxuMTYwMjpcdFxuMTYwMzpcdFx0LypcbjE2MDQ6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXG4xNjA1Olx0XHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbjE2MDY6XHRcdCAqL1xuMTYwNzpcdFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XG4xNjA4Olx0XHRcdHByX2VycihcJiMzNDtpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcblwmIzM0Oyk7XG4xNjA5Olx0XHRcdHJldHVybjtcbjE2MTA6XHRcdH1cbjE2MTE6XHRcbjE2MTI6XHRcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcbjE2MTM6XHRcdGlmIChlcnIpIHtcbjE2MTQ6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXG5cJiMzNDssXG4xNjE1Olx0XHRcdFx0XHRlcnIpO1xuMTYxNjpcdFx0XHRyZXR1cm47XG4xNjE3Olx0XHR9XG4xNjE4Olx0XG4xNjE5Olx0I2lmIGRlZmluZWQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxuMTYyMDpcdFx0cHJfaW5mbyhcJiMzNDtEaXNhYmxlIEFDUEkgUzMuIFR1cm4gb2ZmIFREWCBpbiB0aGUgQklPUyB0byB1c2UgQUNQSSBTMy5cXG5cJiMzNDspO1xuMTYyMTpcdFx0YWNwaV9zdXNwZW5kX2xvd2xldmVsID0gTlVMTDtcbjE2MjI6XHQjZW5kaWZcbjE2MjM6XHRcbjE2MjQ6XHRcdC8qXG4xNjI1Olx0XHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IGFuZFxuMTYyNjpcdFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXG4xNjI3Olx0XHQgKi9cbjE2Mjg6XHRcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XG4xNjI5Olx0XHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgMTtcbjE2MzA6XHRcdHRkeF9ucl9ndWVzdF9rZXlpZHMgPSBucl90ZHhfa2V5aWRzIC0gMTtcbjE2MzE6XHRcbjE2MzI6XHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xuMTYzMzpcdFxuMTYzNDpcdFx0Y2hlY2tfdGR4X2VycmF0dW0oKTtcbjE2MzU6XHR9XG4xNjM2Olx0XG4xNjM3Olx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X2dldF9zeXNpbmZvKHZvaWQpXG4xNjM4Olx0e1xuMTYzOTpcdFx0aWYgKCF0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgaW4gdGhlIFREWCBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGlzIHRoZSBUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24gKFREWCkgaG9zdCBlbnZpcm9ubWVudCBhY3R1YWxseSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGNvbnRleHQgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IG15IGludmVzdGlnYXRpb25zIGZyb20gYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBMZXQgbWUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQ2Nz1jb25zdCBjaGFyICp0ZHhfZHVtcF9tY2VfaW5mbyhzdHJ1Y3QgbWNlICptKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDc3LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE0Nzg6c3RhdGljIF9faW5pdCBpbnQgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyh1MzIgKnRkeF9rZXlpZF9zdGFydCxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDc5LVx0XHRcdFx0XHQgICAgdTMyICpucl90ZHhfa2V5aWRzKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNTgwPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODQtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTU4NTpcdGVyciA9IHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcoXHUwMDI2dGR4X2tleWlkX3N0YXJ0LCBcdTAwMjZucl90ZHhfa2V5aWRzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTg2LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MjYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgdGR4LmNgIHRvIFVuZGVyc3RhbmQgS2V5IFBhcnRpdGlvbmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgVERYIGhhbmRsZXMgaXRzIHJlY29yZCBrZXkgSUQgcGFydGl0aW9uaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCBWTVggdmlydHVhbGl6YXRpb24uIFRoZSB0YXJnZXQgaXMgdGhlIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIFREWCBtb2R1bGUgZmlndXJlcyBvdXQgaG93IHRvIHNsaWNlIGFuZCBkaWNlIHRoZSByZWNvcmQga2V5IElEcy4mIzM0OyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIGFuZCBwYXJ0aXRpb25zIHRoZXNlIElEcywgbGlrZWx5IHJlbGF0ZWQgdG8gc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MgY29udHJvbCB3aXRoaW4gdGhlIFREWCBlbnZpcm9ubWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBURFggZW5zdXJlcyB0aGUgaXNvbGF0aW9uIGFuZCBpbnRlZ3JpdHkgb2YgcHJvdGVjdGVkIHZpcnR1YWwgbWFjaGluZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHVzZWQgaGVyZSwgYXMgdGhleSYjMzk7bGwgbGlrZWx5IHJldmVhbCB0aGUgcGFydGl0aW9uaW5nIHN0cmF0ZWd5IGFuZCBhbnkgYXNzb2NpYXRlZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NzU6XHRcdHJldHVybiBcJiMzNDtURFggcHJpdmF0ZSBtZW1vcnkgZXJyb3IuIFBvc3NpYmxlIGtlcm5lbCBidWcuXCYjMzQ7O1xuMTQ3NjpcdH1cbjE0Nzc6XHRcbjE0Nzg6XHRzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxuMTQ3OTpcdFx0XHRcdFx0XHQgICAgdTMyICpucl90ZHhfa2V5aWRzKVxuMTQ4MDpcdHtcbjE0ODE6XHRcdHUzMiBfbnJfbWt0bWVfa2V5aWRzLCBfdGR4X2tleWlkX3N0YXJ0LCBfbnJfdGR4X2tleWlkcztcbjE0ODI6XHRcdHN0cnVjdCBtc3IgdmFsO1xuMTQ4MzpcdFx0aW50IHJldDtcbjE0ODQ6XHRcbjE0ODU6XHRcdC8qXG4xNDg2Olx0XHQgKiBJQTMyX01LVE1FX0tFWUlEX1BBUlRJT05JTkc6XG4xNDg3Olx0XHQgKiAgIEJpdCBbMzE6MF06XHROdW1iZXIgb2YgTUtUTUUgS2V5SURzLlxuMTQ4ODpcdFx0ICogICBCaXQgWzYzOjMyXTpcdE51bWJlciBvZiBURFggcHJpdmF0ZSBLZXlJRHMuXG4xNDg5Olx0XHQgKi9cbjE0OTA6XHRcdHJldCA9IHJkbXNycV9zYWZlKE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgXHUwMDI2dmFsLnEpO1xuMTQ5MTpcdFx0X25yX21rdG1lX2tleWlkcyA9IHZhbC5sO1xuMTQ5MjpcdFx0X25yX3RkeF9rZXlpZHMgPSB2YWwuaDtcbjE0OTM6XHRcdGlmIChyZXQgfHwgIV9ucl90ZHhfa2V5aWRzKVxuMTQ5NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0OTU6XHRcbjE0OTY6XHRcdC8qIFREWCBLZXlJRHMgc3RhcnQgYWZ0ZXIgdGhlIGxhc3QgTUtUTUUgS2V5SUQuICovXG4xNDk3Olx0XHRfdGR4X2tleWlkX3N0YXJ0ID0gX25yX21rdG1lX2tleWlkcyAmIzQzOyAxO1xuMTQ5ODpcdFxuMTQ5OTpcdFx0KnRkeF9rZXlpZF9zdGFydCA9IF90ZHhfa2V5aWRfc3RhcnQ7XG4xNTAwOlx0XHQqbnJfdGR4X2tleWlkcyA9IF9ucl90ZHhfa2V5aWRzO1xuMTUwMTpcdFxuMTUwMjpcdFx0cmV0dXJuIDA7XG4xNTAzOlx0fVxuMTUwNDpcdFxuMTUwNTpcdHN0YXRpYyBib29sIGlzX3RkeF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbjE1MDY6XHR7XG4xNTA3Olx0XHRzdHJ1Y3QgdGR4X21lbWJsb2NrICp0bWI7XG4xNTA4Olx0XG4xNTA5Olx0XHQvKlxuMTUxMDpcdFx0ICogVGhpcyBjaGVjayBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0X3Bmblx1MDAzYy1cdTAwM2VlbmRfcGZuIHJhbmdlIGRvZXMgbm90XG4xNTExOlx0XHQgKiBjcm9zcyBtdWx0aXBsZSBAdGR4X21lbWxpc3QgZW50cmllcy4gIEEgc2luZ2xlIG1lbW9yeSBvbmxpbmVcbjE1MTI6XHRcdCAqIGV2ZW50IGFjcm9zcyBtdWx0aXBsZSBtZW1ibG9ja3MgKGZyb20gd2hpY2ggQHRkeF9tZW1saXN0XG4xNTEzOlx0XHQgKiBlbnRyaWVzIGFyZSBkZXJpdmVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbikgaXNcbjE1MTQ6XHRcdCAqIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgYmVjYXVzZSBtZW1vcnkgb2ZmbGluZS9vbmxpbmUgaXMgZG9uZVxuMTUxNTpcdFx0ICogb24gZ3JhbnVsYXJpdHkgb2YgJiMzOTtzdHJ1Y3QgbWVtb3J5X2Jsb2NrJiMzOTssIGFuZCB0aGUgaG90cGx1Z2dhYmxlXG4xNTE2Olx0XHQgKiBtZW1vcnkgcmVnaW9uIChvbmUgbWVtYmxvY2spIG11c3QgYmUgbXVsdGlwbGUgb2YgbWVtb3J5X2Jsb2NrLlxuMTUxNzpcdFx0ICovXG4xNTE4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtYiwgXHUwMDI2dGR4X21lbWxpc3QsIGxpc3QpIHtcbjE1MTk6XHRcdFx0aWYgKHN0YXJ0X3BmbiBcdTAwM2U9IHRtYi1cdTAwM2VzdGFydF9wZm4gXHUwMDI2XHUwMDI2IGVuZF9wZm4gXHUwMDNjPSB0bWItXHUwMDNlZW5kX3BmbilcbjE1MjA6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjE1MjE6XHRcdH1cbjE1MjI6XHRcdHJldHVybiBmYWxzZTtcbjE1MjM6XHR9XG4xNTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBURFggSG9zdCBTdXBwb3J0IGluIHRoZSBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGByZG1zcnFfc2FmZShNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsICZhbXA7dmFsLnEpYC4gVGhpcyBwb2ludHMgZGlyZWN0bHkgdG8gVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykga2V5IElEIHBhcnRpdGlvbmluZywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIGhvc3QgZW52aXJvbm1lbnQuIEludGVsIFREWCBtYW5kYXRlcyBzcGVjaWZpYyBoYXJkd2FyZTogU2FwcGhpcmUgUmFwaWRzIG9yIG5ld2VyIFhlb24sIHdpdGggU0VBTVJSIGFuZCBhIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBmaXJtd2FyZS4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBlbXVsYXRlIGEgVERYIGhvc3QgdXNpbmcgUUVNVT8gQW5kLCBhIGZvbGxvdy11cDogY2FuIHdlIGFjaGlldmUgdGhpcyB3aXRoaW4gYSBRRU1VIGluc3RhbmNlIG9uIGEgR0NFIChHb29nbGUgQ29tcHV0ZSBFbmdpbmUpIFZNPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgbmVnYXRpdmUuIFN0YW5kYXJkIFFFTVUsIGFuZCB0aGVyZWZvcmUgR0NFIFZNcywgKmRvbiYjMzk7dCogZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIGNvbXBvbmVudHM6IFNFQU1SUiwgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB0aGUgVERYIG1vZHVsZSwgb3IgdGhlIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgIE1TUi4KClNvLCB3aGVyZSBpcyB0aGUgZm9jdXMgb2YgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbj8gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzICpob3N0KiBURFggc3VwcG9ydCwgYXMgZXZpZGVuY2VkIGJ5IHRoZSBmaWxlIHBhdGhzIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gQ2FuIHRoaXMgVERYIGhvc3QgY29kZSwgb3IgS1ZNIFREWCBob3N0IGNvZGUsIGJlIHRyaWdnZXJlZCB3aXRob3V0IHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBURFggaGFyZHdhcmU/CgpMZXQmIzM5O3MgZGVsdmUgZGVlcGVyIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBXaXRoaW4gdGhhdCwgSSBzZWUgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBhbmQgdGhlIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBXaGF0IGlzIGBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpYCBleGFjdGx5PyBFeGFtaW5pbmcgYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhgLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpYC4gVGhpcyBzaWduaWZpZXMgYW4gb3B0aW9uYWwgY2FsbCB0aGF0IHJldHVybnMgMCBpZiBub3QgaW1wbGVtZW50ZWQuCgpOb3csIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBJIHNlZSB0aGF0IGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7YCBpcyBhc3NpZ25lZCAqb25seSBpZiogYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pYCBpcyB0cnVlLiBGb3Igbm9uLVREWCBlbnZpcm9ubWVudHMgKHN0YW5kYXJkIFZNWCBvciBTVk0pLCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGBOVUxMYCAoZHVlIHRvIGBPUFRJT05BTF9SRVQwYCksIGVuc3VyaW5nIGEgcmV0dXJuIG9mIDAuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uLgoKU28sIHRvIHN1bW1hcml6ZSBhbmQgY29uZmlybSBteSBzdXNwaWNpb25zLCBJIG5lZWQgdG8ga25vdyB3aGVuIGB2dF94ODZfb3BzYCBvciBgdGR4X2hhcmR3YXJlX3NldHVwYCBhcmUgY2FsbGVkLiBUaGlzIHdvdWxkIGlsbHVtaW5hdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFREWC1zcGVjaWZpYyBob3N0IGNvZGUgaXMgaW5pdGlhbGl6ZWQgYW5kIGV4ZWN1dGVkLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aG9zZSBpZGVudGlmaWVycyB3aXRoaW4gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfaGFyZHdhcmVfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQ9c3RhdGljIF9faW5pdCBpbnQgdnRfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyOlx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMzg4PXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzOTItXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzOTM6c3RhdGljIGludCBfX2luaXQgX190ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM5NC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY2LVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDY3OmludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0Njgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUwMi1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzUwMzpcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTA0LVx0aWYgKHIpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTktXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEwOmludCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTExLXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTY3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gVERYIFNldHVwIGluIEtWTS94ODYqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBhcmUgYmVpbmcgc2V0IHVwIGluIHRoZSBLVk0veDg2IGVudmlyb25tZW50LiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGNvcmUgVk1YIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIEkgcmVjYWxsIHRoYXQgdGhlIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGhlcmUuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25zIGZvciBURFggYXJlIGxpa2VseSBvY2N1cnJpbmcuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbjsgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwcm9jZXNzb3ImIzM5O3MgVERYLXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nLiBJIGV4cGVjdCB0byBmaW5kIGRldGFpbHMgb24gZW5hYmxpbmcgVERYLCBjb25maWd1cmluZyB0aGUgVERYIG1vZHVsZSwgYW5kIG1heWJlIGV2ZW4gc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBndWVzdCBlbnZpcm9ubWVudCB3aXRoaW4gYSBURFggY29udGV4dC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDkwOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM0OTE6XHRcdH1cbjM0OTI6XHRcbjM0OTM6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9PU1hTQVZFKSkge1xuMzQ5NDpcdFx0XHRwcl9lcnIoXCYjMzQ7dGR4OiBPU1hTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMzQ5NTpcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4zNDk2Olx0XHR9XG4zNDk3Olx0XG4zNDk4Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG4zNDk5Olx0XHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4zNTAwOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM1MDE6XHRcdH1cbjM1MDI6XHRcbjM1MDM6XHRcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xuMzUwNDpcdFx0aWYgKHIpIHtcbjM1MDU6XHRcdFx0LypcbjM1MDY6XHRcdFx0ICogRGlzYWJsZSBURFggb25seSBidXQgZG9uJiMzOTt0IGZhaWwgdG8gbG9hZCBtb2R1bGUgaWYgdGhlIFREWFxuMzUwNzpcdFx0XHQgKiBtb2R1bGUgY291bGQgbm90IGJlIGxvYWRlZC4gIE5vIG5lZWQgdG8gcHJpbnQgbWVzc2FnZSBzYXlpbmdcbjM1MDg6XHRcdFx0ICogXCYjMzQ7bW9kdWxlIGlzIG5vdCBsb2FkZWRcJiMzNDsgYmVjYXVzZSBpdCB3YXMgcHJpbnRlZCB3aGVuIHRoZSBmaXJzdFxuMzUwOTpcdFx0XHQgKiBTRUFNQ0FMTCBmYWlsZWQuICBEb24mIzM5O3QgYm90aGVyIHVud2luZGluZyB0aGUgUy1FUFQgaG9va3Mgb3JcbjM1MTA6XHRcdFx0ICogdm1fc2l6ZSwgYXMga3ZtX3g4Nl9vcHMgaGF2ZSBhbHJlYWR5IGJlZW4gZmluYWxpemVkIChhbmQgYXJlXG4zNTExOlx0XHRcdCAqIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkKS4gIFRoZSBTLUVQVCBjb2RlIGlzIHVucmVhY2hhYmxlLFxuMzUxMjpcdFx0XHQgKiBhbmQgYWxsb2NhdGluZyBhIGZldyBtb3JlIGJ5dGVzIHBlciBWTSBpbiBhIHNob3VsZC1iZS1yYXJlXG4zNTEzOlx0XHRcdCAqIGZhaWx1cmUgc2NlbmFyaW8gaXMgYSBub24taXNzdWUuXG4zNTE0Olx0XHRcdCAqL1xuMzUxNTpcdFx0XHRpZiAociA9PSAtRU5PREVWKVxuMzUxNjpcdFx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM1MTc6XHRcbjM1MTg6XHRcdFx0cmV0dXJuIHI7XG4zNTE5Olx0XHR9XG4zNTIwOlx0XG4zNTIxOlx0XHRLVk1fU0FOSVRZX0NIRUNLX1ZNX1NUUlVDVF9TSVpFKGt2bV90ZHgpO1xuMzUyMjpcdFxuMzUyMzpcdFx0dnRfeDg2X29wcy52bV9zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCB2dF94ODZfb3BzLnZtX3NpemUsIHNpemVvZihzdHJ1Y3Qga3ZtX3RkeCkpO1xuMzUyNDpcdFxuMzUyNTpcdFx0dnRfeDg2X29wcy5zZXRfZXh0ZXJuYWxfc3B0ZSA9IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGU7XG4zNTI2Olx0XHR2dF94ODZfb3BzLmZyZWVfZXh0ZXJuYWxfc3B0ID0gdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdDtcbjM1Mjc6XHRcbjM1Mjg6XHRcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcbjM1Mjk6XHRcdFx0dnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlO1xuMzUzMDpcdFxuMzUzMTpcdFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XG4zNTMyOlx0XHRyZXR1cm4gMDtcbjM1MzM6XHRcbjM1MzQ6XHRzdWNjZXNzX2Rpc2FibGVfdGR4OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA2MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEzMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFREWCBTdXBwb3J0IGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkeW5hbWljIFBBTVQgKFBhZ2UgQXR0cmlidXRlIFRhYmxlKSBzdXBwb3J0IGluIFREWCBpcyBlbmFibGVkLiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQgaGluZ2VzIG9uIGB0ZHhfZW5hYmxlX2RwYW10YCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRgIGZlYXR1cmUgZmxhZyByZXBvcnRlZCBieSB0aGUgVERYIG1vZHVsZSBpdHNlbGYgdmlhIFNFQU1DQUxMcy4gIEFuZCwgb2YgY291cnNlLCBgdGR4X2VuYWJsZV9kcGFtdGAgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNvIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnNpZGVyLgoKVGhlIFREWCBob3N0IHBsYXRmb3JtIGFsc28gcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzOiBwaHlzaWNhbCBDUFUgc3VwcG9ydCAoYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCksIHRoZSBNU1IgYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AsIHByb3BlciBTRUFNUlIgcmFuZ2UgcmVnaXN0ZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIEJJT1MsIGFuZCBmdW5jdGlvbmluZyBTRUFNQ0FMTHMgdG8gdGhlIEludGVsIFREWCBmaXJtd2FyZSBtb2R1bGUuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBpZGVudGlmaWVkIGluIHNlY3Rpb24gMiBvZiB0aGUgb3JpZ2luYWwgcHJvbXB0IGluY2x1ZGUgdGhlIEludGVsIFREWCBob3N0PyAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgKnllcyouCgpMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIENhbiBzdGFuZGFyZCBRRU1VIGVtdWxhdGUgYSBURFggaG9zdD8gTm8uIFFFTVUgY2FuIG9ubHkgZnVuY3Rpb24gYXMgYSBURFggZ3Vlc3QgdXNpbmcgS1ZNIFREWCBydW5uaW5nIG9uIGEgcmVhbCBURFggaG9zdC4gIFFFTVUgVENHIHNpbXBseSBsYWNrcyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQg4oCTIG5vIFNFQU1SUiwgbm8gU0VBTUNBTEwgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIE1LVE1FIHBhcnRpdGlvbmluZyBNU1IgZW11bGF0aW9uLiAgSW4gYW55IHN0YW5kYXJkIFFFTVUvS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpbyBvciBRRU1VIFRDRywgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCB3aWxsIG5vdCBiZSBwcmVzZW50LiBUaGUgYHJkbXNycV9zYWZlKE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORylgIHdpbGwgaW5ldml0YWJseSBmYWlsLCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC4KClRoZXJlZm9yZSwgdGhlIGB0ZHhfaW5pdCgpYCBmdW5jdGlvbiB3b3VsZCBmYWlsIGVhcmx5IG9uIHdpdGggYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGUga2V5IGJpdCBoZXJlIGlzIHRoZSBmb2xsb3dpbmcgY29kZSBibG9jazoKCmBgYGMKcmV0ID0gcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCAmYW1wO3ZhbC5xKTsKaWYgKHJldCB8fCAhX25yX3RkeF9rZXlpZHMpCiAgICByZXR1cm4gLUVJTlZBTDsKYGBgCgpDb25zZXF1ZW50bHksIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGZsYWcgd2lsbCBuZXZlciBiZSBzZXQuIFRoZSBgdGR4X2VuYWJsZSgpYCBmdW5jdGlvbiB3aWxsIGZhaWwgaW1tZWRpYXRlbHksIGFuZCBgdGR4X2hhcmR3YXJlX3NldHVwKClgIHdpbGwgZmFpbCBhcyB3ZWxsLiBUaGlzIGxlYWRzIHRvIGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlYCByZW1haW5pbmcgTlVMTC4gQXMgYSByZXN1bHQsIGFsbCB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZHluYW1pYyBQQU1UIOKAkyBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAsIGV0Yy4g4oCTIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBFdmVuIGlmIHRoZXkgKndlcmUqIGNhbGxlZCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIHdvdWxkIHJldHVybiBgZmFsc2VgIGltbWVkaWF0ZWx5IGFueXdheSAocmV0dXJuaW5nIDAgaW1tZWRpYXRlbHkpLiBUaGUgVERYIEtWTSBtb2R1bGUsIHdpbGwgbmV2ZXIgZXZlbiBiZSBhYmxlIHRvIGNyZWF0ZSBhIFREWCBWTSB3aXRob3V0IGBlbmFibGVfdGR4YC4KCk5vdywgbGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSByZWNlbnQgY2hhbmdlIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gTXkgdGhpbmtpbmcgbm93IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHBvaW50ZXIsIGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgd2hpY2ggY2FuIHBvaW50IHRvIGEgZnVuY3Rpb24gdG8gaGFuZGxlIGV4dGVybmFsIGNhY2hpbmcgb3BlcmF0aW9ucy4KCmBgYGMKCQlyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKCQlpZiAocikKCQkJcmV0dXJuIHI7CmBgYAoKSSB3aWxsIG5lZWQgdG8gaW52ZXN0aWdhdGUgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgY2FuIGJlIHNldCBhcyBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNTpcdFxuIDYwNjpcdHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuIDYwNzpcdHtcbiA2MDg6XHRcdGludCByO1xuIDYwOTpcdFxuIDYxMDpcdFx0LyogMSBybWFwLCAxIHBhcmVudCBQVEUgcGVyIGxldmVsLCBhbmQgdGhlIHByZWZldGNoZWQgcm1hcHMuICovXG4gNjExOlx0XHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9wdGVfbGlzdF9kZXNjX2NhY2hlLFxuIDYxMjpcdFx0XHRcdFx0ICAgICAgIDEgJiM0MzsgUFQ2NF9ST09UX01BWF9MRVZFTCAmIzQzOyBQVEVfUFJFRkVUQ0hfTlVNKTtcbiA2MTM6XHRcdGlmIChyKVxuIDYxNDpcdFx0XHRyZXR1cm4gcjtcbiA2MTU6XHRcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiA2MTY6XHRcdFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfZXh0ZXJuYWxfc3B0X2NhY2hlLFxuIDYxNzpcdFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gNjE4Olx0XHRcdGlmIChyKVxuIDYxOTpcdFx0XHRcdHJldHVybiByO1xuIDYyMDpcdFxuIDYyMTpcdFx0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiA2MjI6XHRcdFx0aWYgKHIpXG4gNjIzOlx0XHRcdFx0cmV0dXJuIHI7XG4gNjI0Olx0XHR9XG4gNjI1Olx0XHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcbiA2MjY6XHRcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiA2Mjc6XHRcdGlmIChyKVxuIDYyODpcdFx0XHRyZXR1cm4gcjtcbiA2Mjk6XHRcdGlmIChtYXliZV9pbmRpcmVjdCkge1xuIDYzMDpcdFx0XHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dlZF9pbmZvX2NhY2hlLFxuIDYzMTpcdFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gNjMyOlx0XHRcdGlmIChyKVxuIDYzMzpcdFx0XHRcdHJldHVybiByO1xuIDYzNDpcdFx0fVxuIDYzNTpcdFx0cmV0dXJuIGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfcGFnZV9oZWFkZXJfY2FjaGUsXG4gNjM2Olx0XHRcdFx0XHRcdCAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gNjM3Olx0fVxuIDYzODpcdFxuIDYzOTpcdHN0YXRpYyB2b2lkIG1tdV9mcmVlX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0mIzM5O3MgTWlycm9yZWQgVERQIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIEtWTSBjb2RlLCBhbmQgdGhlIGZpcnN0IGxpbmUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LSZndDtrdm0pKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCAqa3ZtX2hhc19taXJyb3JlZF90ZHAqLi4uIHdoYXQmIzM5O3MgdGhhdCBhY3R1YWxseSAqZG8qPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hlY2sgYmVmb3JlIEkgY2FuIHRydWx5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBsb2dpYy4KClRpbWUgdG8gcmVhY2ggZm9yIHRoZSB0cnVzdHkgZ3JlcCBjb21tYW5kLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBvZiBga3ZtX2hhc19taXJyb3JlZF90ZHBgIHdpdGhpbiB0aGUgS1ZNIHNvdXJjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gT25jZSBJIGhhdmUgdGhlIGRlZmluaXRpb24sIEkgY2FuIHN0YXJ0IHRvIGRpc3NlY3QgaG93IHRoZSBtaXJyb3JlZCBURFAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogd2UgbWlnaHQgYmUgY2hlY2tpbmcgZm9yIGl0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9oYXNfbWlycm9yZWRfdGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM5MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0LVx0XHRyZXR1cm4gcjtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE1Olx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXHUwMDNla3ZtKSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTYtXHRcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM5OTA9c3RhdGljIGludCBtbXVfYWxsb2NfZGlyZWN0X3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTgtXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTk6XHRcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQwMDAtXHRcdCAgICAhVkFMSURfUEFHRShtbXUtXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaD0zMD1zdGF0aWMgaW5saW5lIGVudW0ga3ZtX3RkcF9tbXVfcm9vdF90eXBlcyBrdm1fZ2ZuX3JhbmdlX2ZpbHRlcl90b19yb290X3R5cGVzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC0zNC1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjM1Olx0aWYgKCFrdm1faGFzX21pcnJvcmVkX3RkcChrdm0pKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzYtXHRcdHJldHVybiBLVk1fRElSRUNUX1JPT1RTO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc5NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTWlycm9yZWQgVERQIElzc3VlcyBpbiBLVk0qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IFRyYW5zcGFyZW50IFBhZ2UgU2hhcmluZyAoVFBTKSBhbmQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBtYW5hZ2VtZW50IGFyZSBpbnRlcmFjdGluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbWlycm9yZWQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBlbnRyaWVzIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgZXhpc3RlbmNlIGFuZCBkZWZpbml0aW9uIG9mIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgaW4gYGFyY2gveDg2L2t2bS9tbXUuaGAuIFRoaXMgbGlrZWx5IGZsYWdzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyBvciBzdXBwb3J0cyBtaXJyb3JlZCBwYWdlIHRhYmxlcywgcG90ZW50aWFsbHkgaW5mbHVlbmNpbmcgdGhlIE1NVSYjMzk7cyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UsIGFuZCBpbXBvcnRhbnRseSwgd2hpY2ggY29kZSBwYXRocyBhcmUgYWN0aXZlbHkgZXhlY3V0ZWQgaW4gdGhlIHN5c3RlbS4gVGhlIHNwZWNpZmljcyBvZiB0aGUgY2hlY2sgd2lsbCBiZSBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlbiB0cmFjZSBkb3duIGFueSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiAzOTM6XHR7XG4gMzk0Olx0XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbiAzOTU6XHR9XG4gMzk2Olx0XG4gMzk3Olx0c3RhdGljIGlubGluZSBnZm5fdCBrdm1fZ2ZuX2RpcmVjdF9iaXRzKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiAzOTg6XHR7XG4gMzk5Olx0XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzO1xuIDQwMDpcdH1cbiA0MDE6XHRcbiA0MDI6XHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX2FkZHJfZGlyZWN0KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuIDQwMzpcdHtcbiA0MDQ6XHRcdGdwYV90IGdwYV9kaXJlY3RfYml0cyA9IGdmbl90b19ncGEoa3ZtX2dmbl9kaXJlY3RfYml0cyhrdm0pKTtcbiA0MDU6XHRcbiA0MDY6XHRcdHJldHVybiAhZ3BhX2RpcmVjdF9iaXRzIHx8IChncGEgXHUwMDI2IGdwYV9kaXJlY3RfYml0cyk7XG4gNDA3Olx0fVxuIDQwODpcdFxuIDQwOTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faXNfZ2ZuX2FsaWFzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKktWTSBURFggVk0gQ3JlYXRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pYCBmdW5jdGlvbiBpcyBhIHNpbXBsZSBjaGVjazsgaXQgZXNzZW50aWFsbHkgdGVsbHMgdXMgaWYgYSBLVk0gaW5zdGFuY2UgaXMgYSBURFggVk0gYnkgY29tcGFyaW5nIGl0cyBhcmNoaXRlY3R1cmUmIzM5O3MgVk0gdHlwZSB3aXRoIGBLVk1fWDg2X1REWF9WTWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqaG93KiBhIFZNIGlzIGFjdHVhbGx5IGFzc2lnbmVkIHRoZSBgS1ZNX1g4Nl9URFhfVk1gIHR5cGUgZHVyaW5nIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBUaGUga2V5IGlzIHRvIHRyYWNlIHdoZXJlIGBLVk1fWDg2X1REWF9WTWAgaXMgYmVpbmcgdXRpbGl6ZWQgZHVyaW5nIHRoZSBWTSYjMzk7cyBpbnN0YW50aWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLVk0gVk0gY3JlYXRpb24gZmxvdyB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIHRoaXMgc3BlY2lmaWMgdHlwZSBiZWluZyBhc3NpZ25lZC4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBkZXRlcm1pbmUgdGhlIGV4YWN0IHBhdGggYnkgdHJhY2luZyB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9URFhfVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS5oLTM5My17XG5hcmNoL3g4Ni9rdm0vbW11Lmg6Mzk0Olx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzk1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTg9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NjI6XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTYzLVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xODk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xOTQtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxOTU6XHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5Ni1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjEte1xuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MjpcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02My19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA1OD1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3OC1cdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3OTpcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDgwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gS1ZNL1ZNWCBDb3JlIExvZ2ljKioKCk9rYXksIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgeDg2IEtWTS9WTVggY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNzAuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgaXQgZGVwZW5kcyBvbiB0aGUgY29udGV4dCwgYnV0IGl0IGNvdWxkIHJlbGF0ZSB0byBWTSBlbnRyeS9leGl0IGhhbmRsaW5nLCBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBzZXR1cCwgb3IgcG90ZW50aWFsbHkgZmF1bHQgbWFuYWdlbWVudCBzcGVjaWZpYyB0byBJbnRlbCYjMzk7cyBWVC14IGV4dGVuc2lvbnMuIEtub3dpbmcgaG93IGRlZXBseSBpbnRlZ3JhdGVkIGFuZCBhcmNoaXRlY3R1cmFsbHkgaW1wb3J0YW50IFZNWCBpcywgSSBiZXQgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGNydWNpYWwuIEZyb20gdGhlcmUgSSBjYW4gZm9sbG93IHRoZSBjYWxsIHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBteSBzcGVjaWZpYyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDYwOlx0XHR1bnNpZ25lZCB2Y3B1X3NpemUsIHZjcHVfYWxpZ247XG4xMDYxOlx0XHRpbnQgcjtcbjEwNjI6XHRcbjEwNjM6XHRcdHIgPSB2bXhfaW5pdCgpO1xuMTA2NDpcdFx0aWYgKHIpXG4xMDY1Olx0XHRcdHJldHVybiByO1xuMTA2NjpcdFxuMTA2NzpcdFx0LypcbjEwNjg6XHRcdCAqIFREWCBhbmQgVk1YIGhhdmUgZGlmZmVyZW50IHZDUFUgc3RydWN0dXJlcy4gIENhbGN1bGF0ZSB0aGVcbjEwNjk6XHRcdCAqIG1heGltdW0gc2l6ZS9hbGlnbiBzbyB0aGF0IGt2bV9pbml0KCkgY2FuIHVzZSB0aGUgbGFyZ2VyXG4xMDcwOlx0XHQgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBrbWVtX3ZjcHVfY2FjaGUuXG4xMDcxOlx0XHQgKi9cbjEwNzI6XHRcdHZjcHVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmNwdV92bXgpO1xuMTA3MzpcdFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XG4xMDc0Olx0XHRpZiAoZW5hYmxlX3RkeCkge1xuMTA3NTpcdFx0XHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxuMTA3NjpcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2Y3B1X3RkeCkpO1xuMTA3NzpcdFx0XHR2Y3B1X2FsaWduID0gbWF4X3QodW5zaWduZWQsIHZjcHVfYWxpZ24sXG4xMDc4Olx0XHRcdFx0XHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcbjEwNzk6XHRcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XG4xMDgwOlx0XHR9XG4xMDgxOlx0XG4xMDgyOlx0XHQvKlxuMTA4MzpcdFx0ICogQ29tbW9uIEtWTSBpbml0aWFsaXphdGlvbiBfbXVzdF8gY29tZSBsYXN0LCBhZnRlciB0aGlzLCAvZGV2L2t2bSBpc1xuMTA4NDpcdFx0ICogZXhwb3NlZCB0byB1c2Vyc3BhY2UhXG4xMDg1Olx0XHQgKi9cbjEwODY6XHRcdHIgPSBrdm1faW5pdCh2Y3B1X3NpemUsIHZjcHVfYWxpZ24sIFRISVNfTU9EVUxFKTtcbjEwODc6XHRcdGlmIChyKVxuMTA4ODpcdFx0XHRnb3RvIGVycl9rdm1faW5pdDtcbjEwODk6XHRcbjEwOTA6XHRcdHJldHVybiAwO1xuMTA5MTpcdFxuMTA5MjpcdGVycl9rdm1faW5pdDpcbjEwOTM6XHRcdHZteF9leGl0KCk7XG4xMDk0Olx0XHRyZXR1cm4gcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqTmF2aWdhdGluZyB0aGUgVERYIEltcGxlbWVudGF0aW9uIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBURFggaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gS1ZNJiMzOTtzIFZNWCBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKGVuYWJsZV90ZHgpYCBpbiBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLiBDbGVhcmx5LCB0aGlzIGlzIGEgcGl2b3RhbCBkZWNpc2lvbiBwb2ludCByZWxhdGVkIHRvIHdoZXRoZXIgb3Igbm90IFREWCBmZWF0dXJlcyBhcmUgYWN0aXZhdGVkIGR1cmluZyBWTSBleGVjdXRpb24uCgpNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgZW5hYmxlX3RkeGAgdmFyaWFibGUgaXMgYWN0dWFsbHkgYmVpbmcgc2V0LiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggVERYIGlzIGVuYWJsZWQgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUsIGlkZWFsbHkgc3RhcnRpbmcgZnJvbSB0aGlzIGNoZWNrLCB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggYW5kIGhvdyB0aGUgVERYIGVuYWJsaW5nIGRlY2lzaW9uIGlzIHVsdGltYXRlbHkgbWFkZS4gS25vd2luZyB0aGUgc291cmNlIG9mIGBlbmFibGVfdGR4YCB3aWxsIHByb3ZpZGUgaW5zaWdodHMgaW50byBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGhhcmR3YXJlIGNoZWNrcywgb3Igb3RoZXIgcnVudGltZSBjb25kaXRpb25zIHRoYXQgaW5mbHVlbmNlIFREWOKAmXMgb3BlcmF0aW9uYWwgc3RhdGUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgZWl0aGVyIGEgY29uZmlndXJhdGlvbiBmbGFnIG9yIGEgZGV0ZXJtaW5hdGlvbiBtYWRlIGR1cmluZyBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYW5kIHNlY3VyaXR5IHBvbGljaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVfdGR4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2PXN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTgtXHQvKiBOb3RlLCBURFggKmFuZCogVk1YIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVERYIGlzIGVuYWJsZWQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjAtXHRcdHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcdHJldHVybiBlbmFibGVfdGR4ID8gdGR4X2hhcmR3YXJlX3NldHVwKCkgOiAwO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1PXN0YXRpYyB2b2lkIHZ0X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3Olx0aWYgKGVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zOC1cdFx0dGR4X2hhcmR3YXJlX3Vuc2V0dXAoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDczLVx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc0Olx0aWYgKGVuYWJsZV90ZHgpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzUtXHRcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01NS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTY6Ym9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ2Nz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ3NC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ3NTpcdGlmICghZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ3Ni1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM0LXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MzU6XHRlbmFibGVfdGR4ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzNi1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTItXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEzOmV4dGVybiBib29sIGVuYWJsZV90ZHg7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTg3PVREWF9CVUlMRF9URFZQU19BQ0NFU1NPUlMoNjQsIFNUQVRFX05PTl9BUkNILCBzdGF0ZV9ub25fYXJjaCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODktI2Vsc2VcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTkwOiNkZWZpbmUgZW5hYmxlX3RkeFx0MFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xOTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQxCgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDE5MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ29kZSBSZWFjaGFiaWxpdHkgZm9yIFREWCBEeW5hbWljIFBBTVQgU3VwcG9ydCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBEeW5hbWljIFBBTVQgc3VwcG9ydCBmb3IgSW50ZWwgVERYLCBmb2N1c2luZyBvbiBpdHMgcmVhY2hhYmlsaXR5IGluIGEgZnV6emluZyBjb250ZXh0LiBGcm9tIGV4YW1pbmluZyBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgYW5kIHJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDM1MzUsIGEgY2xlYXIgcGljdHVyZSBlbWVyZ2VzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRoaXM6IHdpdGhvdXQgc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUg4oCTIGEgcGh5c2ljYWwgVERYLWVuYWJsZWQgaG9zdCDigJMgdGhpcyBjb2RlIHBhdGggKm5ldmVyKiBnZXRzIGhpdC4KClRoZSBgdGR4X2hhcmR3YXJlX3NldHVwKClgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCBjaGVja3MgZm9yIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAuIElmIHRoYXQgZmxhZyBpc24mIzM5O3Qgc2V0LCB3aGljaCBpdCB3b24mIzM5O3QgYmUgb24gc3RhbmRhcmQgaGFyZHdhcmUgb3IgUUVNVSwgdGhlIHNldHVwIGZhaWxzIGFuZCBgZW5hYmxlX3RkeGAgaXMgc2V0IHRvIDAuIFRoaXMsIGluIHR1cm4sIHByZXZlbnRzIGBLVk1fWDg2X1REWF9WTWAgZnJvbSBiZWluZyBzdXBwb3J0ZWQuIENvbnNlcXVlbnRseSwgY3JlYXRpbmcgYSBURFggVk0gdGhyb3VnaCBgaW9jdGwoS1ZNX0NSRUFURV9WTV9UWVBFKWAgd2lsbCBmYWlsIHdpdGggYC1FSU5WQUxgLCBtYWtpbmcgYGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtJmd0O2t2bSlgIGFsd2F5cyBmYWxzZS4KClRoaXMgY3J1Y2lhbCBga3ZtX2hhc19taXJyb3JlZF90ZHAoKWAgY2hlY2sgaXMgdGhlIGdhdGVrZWVwZXIuIFRoZSBNTVUgYnJhbmNoIGNvbnRhaW5pbmcgdGhlIGNhbGxzIHRvIGBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZWAgYW5kIGBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpYCBpbiBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXNgIGlzIGNvbXBsZXRlbHkgYnlwYXNzZWQuICBGdXJ0aGVybW9yZSwgYWxsIHRoZSBuZXcgZnVuY3Rpb25zIHRpZWQgdG8gZHluYW1pYyBQQU1UIChlLmcuLCBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGZ1bmN0aW9ucywgZXRjLikgYXJlIHVucmVhY2hhYmxlLiBUaGUga2VybmVsIHBhcmFtZXRlcnMgZm9yIGR5bmFtaWMgUEFNVCBhcmUgb25seSBwYXJzZWQgaWYgVERYIGlzIGVuYWJsZWQgb24gdGhlIGhvc3QgcGxhdGZvcm0uCgpJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgYm9vdC10aW1lIGZ1bmN0aW9ucyBtb2RpZmllZCwgYW5kIHRoZXkgYWxsIGZhbGwgaW50byB0aGUgc2FtZSB0cmFwLiBGdW5jdGlvbnMgbGlrZSBgdGRtcl9nZXRfcGFtdF9zemAgYW5kIGBpbml0X3RkeF9tb2R1bGUoKWAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmbGFnLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRob3NlIEtWTSBmdW5jdGlvbnMgbGlrZSBgdGR4X3ZjcHVfY3JlYXRlYCBhbmQgYHRkeF9oYXJkd2FyZV9zZXR1cGAuICBUaGVzZSBhbGwgb3BlcmF0ZSB3aXRoaW4gdGhlIFREWCBob3N0IGNvbnRleHQgYW5kIEtWTSBURFggVk0gc2V0dXAuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBndWlkZWxpbmVzLiBUaGlzIGNvZGUgdW5lcXVpdm9jYWxseSBmaXRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYywgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIOKAkyBhbiBJbnRlbCBURFggaG9zdCBwbGF0Zm9ybSB3aXRoIHRoZSBwcm9wZXIgQklPUyBzdXBwb3J0IGFuZCBmaXJtd2FyZSBtb2R1bGUuIFRoaXMgZ29lcyBiZXlvbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy4gSXQmIzM5O3Mgbm90IGp1c3QgdGhhdCBhIGZlYXR1cmUgaXNuJiMzOTt0ICplbmFibGVkKiwgYnV0IHRoYXQgdGhlIGZvdW5kYXRpb25hbCAqaGFyZHdhcmUqIGlzbiYjMzk7dCBwcmVzZW50LgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYSBoYXJkd2FyZSBlbnZpcm9ubWVudCB0aGF0IGlzbiYjMzk7dCByZXBsaWNhdGVkIGluIHRoZSB0eXBpY2FsIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIER5bmFtaWMgUEFNVCAoRFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGhvc3QgaW4gdGhlIGtlcm5lbCBhbmQgS1ZNLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBlbnRpcmVseSBjb25maW5lZCB0byBJbnRlbCBURFggaG9zdCBpbml0aWFsaXphdGlvbiBhbmQgS1ZNIFREWCBndWVzdCBtYW5hZ2VtZW50ICh1bmRlciBhcmNoL3g4Ni92aXJ0L3ZteC90ZHggYW5kIGFyY2gveDg2L2t2bS92bXgvdGR4LmMsIHBsdXMgbWlycm9yZWQgVERQIGhhbmRsaW5nIGd1YXJkZWQgYnkgS1ZNX1g4Nl9URFhfVk0pLiBUaGVzZSBwYXRocyBzdHJpY3RseSByZXF1aXJlIHBoeXNpY2FsIEludGVsIENQVXMgd2l0aCBURFggaG9zdCBwbGF0Zm9ybSBzdXBwb3J0IChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSwgTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBTRUFNUlIsIGFuZCB0aGUgSW50ZWwgVERYIGZpcm13YXJlIG1vZHVsZSksIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDU6NTMuODAwNzEyMjMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MzY4NTI2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgKERQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IGluIHRoZSBrZXJuZWwgYW5kIEtWTS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZW50aXJlbHkgY29uZmluZWQgdG8gSW50ZWwgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gYW5kIEtWTSBURFggZ3Vlc3QgbWFuYWdlbWVudCAodW5kZXIgYXJjaC94ODYvdmlydC92bXgvdGR4IGFuZCBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jLCBwbHVzIG1pcnJvcmVkIFREUCBoYW5kbGluZyBndWFyZGVkIGJ5IEtWTV9YODZfVERYX1ZNKS4gVGhlc2UgcGF0aHMgc3RyaWN0bHkgcmVxdWlyZSBwaHlzaWNhbCBJbnRlbCBDUFVzIHdpdGggVERYIGhvc3QgcGxhdGZvcm0gc3VwcG9ydCAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0sIE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgU0VBTVJSLCBhbmQgdGhlIEludGVsIFREWCBmaXJtd2FyZSBtb2R1bGUpLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDU6NTMuODAwNzIyMTUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgwMTk2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZjNhNWVhYmE5MDNjMjEyNGQ4ZmM2YWQ2NzU1Mjg1Y2U4ZGZkNWNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDI6MDU6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IDY4NjQ3ZmY0YmRkMjQuLmU3NTU4YjgzODJhY2YgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC03NTgyLDYgKzc1ODIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFxuIFxcdHRkZng9XFx0XFx0W0hXLERSTV1cXG4gXFxuK1xcdHRkeF9kcGFtdD1cXG4rXFx0XFx0XFx0W1g4Nl0gQ29udHJvbHMgd2hldGhlciBURFggd2lsbCB1c2UgRHluYW1pYyBQQU1UXFxuK1xcdFxcdFxcdHRvIHNhdmUgbWVtb3J5LCB3aGVuIHN1cHBvcnRlZC5cXG4rXFxuK1xcdFxcdFxcdFZhbGlkIHBhcmFtZXRlcnM6IFxcXCJvblxcXCIsIFxcXCJvZmZcXFwiXFxuK1xcdFxcdFxcdERlZmF1bHQ6IFxcXCJvZmZcXFwiXFxuK1xcbitcXHRcXHRcXHRGb3IgZGV0YWlscyBzZWU6XFxuK1xcdFxcdFxcdERvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbitcXG4gXFx0dGVzdF9zdXNwZW5kPVxcdFtTVVNQRU5EXVxcbiBcXHRcXHRcXHRGb3JtYXQ6IHsgXFxcIm1lbVxcXCIgfCBcXFwic3RhbmRieVxcXCIgfCBcXFwiZnJlZXplXFxcIiB9WyxOXVxcbiBcXHRcXHRcXHRTcGVjaWZ5IFxcXCJtZW1cXFwiIChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFxcXCJzdGFuZGJ5XFxcIiAoZm9yXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbmluZGV4IDMzMDM0OTlhZDRjNmYuLmRlMDk5NjdjZThkOGMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuQEAgLTIwMCw2ICsyMDAsMzMgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlXFxuIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURFxcbiBsYXVuY2ggdGltZSBhbmQgaXMgbm90IGFmZmVjdGVkLlxcbiBcXG4rRHluYW1pYyBQQU1UXFxuKy0tLS0tLS0tLS0tLVxcbitcXG4rVGhlIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1ldGFkYXRhIGluIHdoaWNoIHRoZSBURFhcXG4rbW9kdWxlIGtlZXBzIGRhdGEgYWJvdXQgZWFjaCBwaHlzaWNhbCBwYWdlICh0aGluayBzdHJ1Y3QgcGFnZSkuIFNwYWNlXFxuK2ZvciBpdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIFZNTSwgY29uc3VtZXMgdXAgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW1cXG4rbWVtb3J5IGFuZCBuZWVkcyB0byBiZSBzdXBwbGllZCB0byB0aGUgVERYIG1vZHVsZSB3aGVuIHRoZSBURFggbW9kdWxlIGlzXFxuK2ZpcnN0IGxvYWRlZC5cXG4rXFxuK0R5bmFtaWMgUEFNVCBpcyBhbiBhZGQtb24gZmVhdHVyZSB0aGF0IGFsbG93cyBhIFZNTSB0byBkeW5hbWljYWxseVxcbithbGxvY2F0ZSB0aGUgcGFydCBvZiB0aGUgUEFNVCB3aGljaCB0cmFja3MgNEtCIHBhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlXFxuK2Ftb3VudCBvZiBtZW1vcnkgdGhhdCBURFggY29uc3VtZXMgd2hpbGUgVERzIGFyZSBub3QgaW4gdXNlLlxcbitcXG4rV2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcXG4rXFxuKyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG4rXFxuK0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcXG4rcGFyYW1ldGVyIGlzIHNldCB0byBcXFwib25cXFwiLiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGVcXG4raW50ZXJuYWwgZGV0YWlscyBwcmV2ZW50IER5bmFtaWMgUEFNVCBmcm9tIHdvcmtpbmcgb24gYWxsIGtleWlkIHBhcnRpdGlvbmluZ1xcbitjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluXFxuK2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG9cXG4rZGVmYXVsdCBvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIEludGVsIFREWCBkb2N1bWVudGF0aW9uIGFib3V0XFxuK0R5bmFtaWMgUEFNVC5cXG4rXFxuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggZTIxM2M5YWUzZTMwMS4uNWMzNThjNDBlYWU4YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC05OSw2ICs5OSw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApXFxuIEtWTV9YODZfT1AobG9hZF9tbXVfcGdkKVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXFxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcXG4gS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpXFxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19vZmZzZXQpXFxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDY4M2JiOGJmNDNhOTQuLjU3ZDM3NDkxYzdjMDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMTY0NCw2ICsxNjQ0LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcXG4gXFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xcbiBcXHR2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xcbiBcXG4rXFx0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcXG4gXFxuIFxcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxcbmluZGV4IDg5ZTk3ZDU3NjFkODkuLmUxODZkZmU1YmY4ODUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxcbkBAIC0zNiw2ICszNiw3IEBAXFxuIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovXFxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HXFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRFxcdEJJVF9VTEwoMTgpXFxuKyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRcXHRCSVRfVUxMKDM2KVxcbiBcXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXFxuIFxcbkBAIC0xMTgsMTIgKzExOSwzNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxcbiBcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORztcXG4gfVxcbiBcXG4rYm9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xcbitcXG4rLyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRFBBTVQgcGFnZXMgb3V0c2lkZSBvZiBzcGlubG9ja3MuICovXFxuK3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xcbitcXHRpbnQgY250O1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbGlzdCk7XFxuK1xcdGNhY2hlLVxcdTAwM2VjbnQgPSAwO1xcbit9XFxuK1xcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XFxuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuK2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XFxuK3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xcbitcXG4gaW50IHRkeF9ndWVzdF9rZXlpZF9hbGxvYyh2b2lkKTtcXG4gdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpO1xcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XFxuIFxcbiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuIFxcbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKTtcXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gc3RydWN0IHRkeF90ZCB7XFxuIFxcdC8qIFREIHJvb3Qgc3RydWN0dXJlOiAqL1xcbiBcXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbmluZGV4IDQxMTUwZDU0NjU4OWMuLjhhM2NjMWEyYTQxZTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXFxuQEAgLTEsNyArMSw3IEBAXFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cXG4tI2lmbmRlZiBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxcbi0jZGVmaW5lIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuKy8qIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cXG4rI2lmbmRlZiBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSFxcbisjZGVmaW5lIF9YODZfVklSVF9URFhfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTIxLDYgKzIxLDkgQEAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yIHtcXG4gXFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcXG4gXFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcXG4gXFx0dTE2IHBhbXRfMWdfZW50cnlfc2l6ZTtcXG4rXFxuK1xcdC8qIE9wdGlvbmFsIG1ldGFkYXRhLCBpZiBEUEFNVCBpcyBzdXBwb3J0ZWQgKi9cXG4rXFx0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcXG4gfTtcXG4gXFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjgxNjg2MWNhMjc5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC02MTcsNiArNjE3LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuIFxcdFxcdGlmIChyKVxcbiBcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuK1xcdFxcdHIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xcbitcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcdH1cXG4gXFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjdjNzlmNGQ0YmY5OWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5AQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKVxcbiBcXHRpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UoY3RybF9wYWdlKTtcXG4gfVxcbiBcXG4gc3RydWN0IHRkeF9mbHVzaF92cF9hcmcge1xcbkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiBcXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcXG4gXFxuLVxcdF9fZnJlZV9wYWdlKGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlKTtcXG4gXFx0a3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xcbiB9XFxuIFxcbkBAIC02ODEsNiArNjgxLDggQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICghaXJxY2hpcF9zcGxpdCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHRkeF9pbml0X3BhbXRfY2FjaGUoXFx1MDAyNnRkeC1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcbiBcXHRmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1KTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX3dha2V1cF9saXN0KTtcXG5AQCAtODY2LDYgKzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXFx1MDAyNnRkeC1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcbiBcXHRpZiAodmNwdS1cXHUwMDNlY3B1ICE9IC0xKSB7XFxuIFxcdFxcdEtWTV9CVUdfT04odGR4LVxcdTAwM2VzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LVxcdTAwM2Vrdm0pO1xcbiBcXHRcXHR0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpO1xcbkBAIC0xNjE4LDYgKzE2MjIsMTcgQEAgdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXFxuIFxcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE1pbnVzIG9uZSBwYWdlIHRvIGV4Y2x1ZGUgdGhlIHJvb3QgU1BULCBidXQgcGx1cyBvbmUgcGFnZSBmb3IgYVxcbitcXHQgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLlxcbitcXHQgKi9cXG4rXFx0bWluX25yX3NwdHMgKz0gLTEgKyAxO1xcbitcXG4rXFx0cmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKFxcdTAwMjZ0b190ZHgodmNwdSktXFx1MDAzZXBhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbiBcXHRcXHRcXHQgICAga3ZtX3Bmbl90IHBmbilcXG4ge1xcbkBAIC0xNjc2LDE2ICsxNjkxLDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRcXHRcXHQgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xcbiBcXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XFxuIFxcdHU2NCBlcnIsIGVudHJ5LCBsZXZlbF9zdGF0ZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnNlcHRfcHQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcXG4gXFx0aWYgKCFzZXB0X3B0KVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuK1xcdHJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgXFx1MDAyNnRvX3RkeCh2Y3B1KS1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGVyciA9IHRkaF9tZW1fc2VwdF9hZGQoXFx1MDAyNnRvX2t2bV90ZHgoa3ZtKS1cXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW50cnksIFxcdTAwMjZsZXZlbF9zdGF0ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuQEAgLTE2OTgsOCArMTcyNSwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0ICB1NjQgbmV3X3NwdGUpXFxuIHtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcXG4gXFx0c3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7XFxuIFxcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHQvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovXFxuIFxcdGlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKVxcbkBAIC0xNzA3LDYgKzE3MzksMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcXG4gXFxuIFxcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXFx1MDAyNiBWTVhfRVBUX1JXWF9NQVNLKSAhPSBWTVhfRVBUX1JXWF9NQVNLKTtcXG4gXFxuK1xcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFxcdTAwMjZ0b190ZHgodmNwdSktXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxcbiBcXHQgKiBiZWZvcmUga3ZtX3RkeC1cXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcXG5AQCAtMTcxOSwxMCArMTc1NSwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxcbiBcXHQgKiBJZiB0aGUgVEQgaXNuJ3QgZmluYWxpemVkL3J1bm5hYmxlLCB0aGVuIHVzZXJzcGFjZSBpcyBpbml0aWFsaXppbmdcXG4gXFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShrdm1fdGR4LVxcdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXFxuLVxcdFxcdHJldHVybiB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFx0aWYgKGxpa2VseShrdm1fdGR4LVxcdTAwM2VzdGF0ZSA9PSBURF9TVEFURV9SVU5OQUJMRSkpXFxuK1xcdFxcdHJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0dGR4X3BhbXRfcHV0KHBmbik7XFxuIFxcbi1cXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTE4MTksNiArMTg2MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfcmVtb3ZlX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIoUEZOX1BIWVMocGZuKSwgUEFHRV9TSVpFKTtcXG4rXFx0dGR4X3BhbXRfcHV0KHBmbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xODYyLDYgKzE5MDQsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSxcXG4gICovXFxuIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcXG4ge1xcbitcXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdCA9IHZpcnRfdG9fcGFnZShzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0KTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEtWTSBkb2Vzbid0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlXFxuIFxcdCAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZVxcbkBAIC0xODc1LDE1ICsxOTE5LDE1IEBAIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcXG4gXFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cXG4gXFx0ICovXFxuIFxcdGlmIChLVk1fQlVHX09OKGlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeChrdm0pKSwga3ZtKSB8fFxcbi1cXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXFx1MDAzZWV4dGVybmFsX3NwdCkpKVxcbitcXHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGJlY2F1c2UgUkNVLXRpbWUgZnJlZSBpcyB1bm5lY2Vzc2FyeVxcbi1cXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xcbi1cXHQgKiByZWFkZXJzLlxcbitcXHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydFxcbitcXHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxcbitcXHQgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLlxcbiBcXHQgKi9cXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVxcdTAwM2VleHRlcm5hbF9zcHQpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc2VwdF9wdCk7XFxuIG91dDpcXG4gXFx0c3AtXFx1MDAzZWV4dGVybmFsX3NwdCA9IE5VTEw7XFxuIH1cXG5AQCAtMjQ1Niw3ICsyNTAwLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiBcXG4gXFx0cmV0ID0gLUVOT01FTTtcXG4gXFxuLVxcdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHR0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0aWYgKCF0ZHJfcGFnZSlcXG4gXFx0XFx0Z290byBmcmVlX2hraWQ7XFxuIFxcbkBAIC0yNDY5LDcgKzI1MTMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIFxcdFxcdGdvdG8gZnJlZV90ZHI7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdHRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdFxcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdFxcdGlmICghdGRjc19wYWdlc1tpXSlcXG4gXFx0XFx0XFx0Z290byBmcmVlX3RkY3M7XFxuIFxcdH1cXG5AQCAtMjU4NywxMCArMjYzMSw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gdGVhcmRvd246XFxuIFxcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAnaScgKi9cXG4gXFx0Zm9yICg7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHRkY3NfcGFnZXNbaV0pIHtcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuLVxcdFxcdFxcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4rXFx0XFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0aWYgKCFrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX3BhZ2VzKVxcbiBcXHRcXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcXG5AQCAtMjYwNSwxNiArMjY0NywxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIFxcdGZyZWVfY3B1bWFza192YXIocGFja2FnZXMpO1xcbiBcXG4gZnJlZV90ZGNzOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdGlmICh0ZGNzX3BhZ2VzW2ldKVxcbi1cXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4tXFx0fVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKVxcbitcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuIFxcdGtmcmVlKHRkY3NfcGFnZXMpO1xcbiBcXHRrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX3BhZ2VzID0gTlVMTDtcXG4gXFxuIGZyZWVfdGRyOlxcbi1cXHRpZiAodGRyX3BhZ2UpXFxuLVxcdFxcdF9fZnJlZV9wYWdlKHRkcl9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcXG4gXFx0a3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xcbiBcXG4gZnJlZV9oa2lkOlxcbkBAIC0yOTQ4LDcgKzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcdGludCByZXQsIGk7XFxuIFxcdHU2NCBlcnI7XFxuIFxcbi1cXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRpZiAoIXBhZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UgPSBwYWdlO1xcbkBAIC0yOTY4LDcgKzMwMDcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0XFx0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0XFx0aWYgKCFwYWdlKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV90ZGN4O1xcbkBAIC0yOTkwLDcgKzMwMjksNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcdFxcdFxcdCAqIG1ldGhvZCwgYnV0IHRoZSByZXN0IGFyZSBmcmVlZCBoZXJlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0XFx0XFx0X19mcmVlX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4rXFx0XFx0XFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuIFxcdFxcdFxcdFxcdHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuQEAgLTMwMTgsMTYgKzMwNTcsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXG4gZnJlZV90ZGN4OlxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdGlmICh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXFxuLVxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuK1xcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbiBcXHRcXHR0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xcbiBcXHR9XFxuIFxcdGtmcmVlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlcyk7XFxuIFxcdHRkeC1cXHUwMDNldnAudGRjeF9wYWdlcyA9IE5VTEw7XFxuIFxcbiBmcmVlX3RkdnByOlxcbi1cXHRpZiAodGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlKVxcbi1cXHRcXHRfX2ZyZWVfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlKTtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlID0gTlVMTDtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZHZwcl9wYSA9IDA7XFxuIFxcbkBAIC0zNDg3LDYgKzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFxuIFxcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xcbiBcXHR2dF94ODZfb3BzLmZyZWVfZXh0ZXJuYWxfc3B0ID0gdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdDtcXG4rXFxuK1xcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0dnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlO1xcbitcXG4gXFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG5pbmRleCBhYzgzMjNhNjhiMTYzLi5mZDM2OGUzZWUwNjBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXFxuQEAgLTcyLDYgKzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHtcXG4gXFxuIFxcdHU2NCBtYXBfZ3BhX25leHQ7XFxuIFxcdHU2NCBtYXBfZ3BhX2VuZDtcXG4rXFxuK1xcdHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlO1xcbiB9O1xcbiBcXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xcbmluZGV4IDFiOWZmNzQ5ZGQ4ZTAuLjJhY2FiNmU1ZjVmODcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1c3BlbmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZHIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL21zci1pbmRleC5oXFx1MDAzZVxcbkBAIC00Niw2ICs0NywxMSBAQFxcbiAjaW5jbHVkZSBcXFwic2VhbWNhbGxfaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRkeC5oXFxcIlxcbiBcXG4rLyogTnVtYmVyIG9mIERQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cXG4rI2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMlxcbitcXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XFxuK1xcbiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7XFxuIFxcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdGJvb2wgc3lzaW5pdF9kb25lO1xcbkBAIC02Myw2ICs2OSwxNCBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGR4X2xwX2luaXRpYWxpemVkKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcXG4gXFxuKy8qXFxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIERQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyXFxuKyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXFxuKyAqIHRoZSBEUEFNVCBhdCB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBEUEFNVCByZWZjb3VudHMgYXRcXG4rICogaW5pdGlhbGl6YXRpb24uXFxuKyAqL1xcbitzdGF0aWMgYXRvbWljX3QgKmRwYW10X3JlZmNvdW50cztcXG4rXFxuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXFxuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xcbiBcXG5AQCAtMjUyLDYgKzI2Niw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XFxuIFxcdC5vcHMgPSBcXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogQWxsb2NhdGUgRFBBTVQgcmVmZXJlbmNlIGNvdW50ZXJzIGZvciBhbGwgcGh5c2ljYWwgbWVtb3J5LlxcbisgKlxcbisgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXFxuKyAqL1xcbitzdGF0aWMgX19pbml0IGludCBpbml0X2RwYW10X3JlZmNvdW50cyh2b2lkKVxcbit7XFxuK1xcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKmRwYW10X3JlZmNvdW50cyk7XFxuK1xcbitcXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkcGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xcbitcXHRpZiAoIWRwYW10X3JlZmNvdW50cylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfZHBhbXRfcmVmY291bnRzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZmcmVlKGRwYW10X3JlZmNvdW50cyk7XFxuK1xcdGRwYW10X3JlZmNvdW50cyA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcGFtdF9yZWZjb3VudHNbaW5kZXhdO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBBZGQgYSBtZW1vcnkgcmVnaW9uIGFzIGEgVERYIG1lbW9yeSBibG9jay4gIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmVcXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJ3RcXG5AQCAtNTEwLDM1ICs1NjAsMzcgQEAgc3RhdGljIF9faW5pdCBpbnQgZmlsbF9vdXRfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcXG4rXFx0aW50IGJpdHNfcGVyX2VudHJ5O1xcbitcXG4rXFx0Yml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcXG4rXFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcXG4rXFxuK1xcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDYWxjdWxhdGUgUEFNVCBzaXplIGdpdmVuIGEgVERNUiBhbmQgYSBwYWdlIHNpemUuICBUaGUgcmV0dXJuZWRcXG4gICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuXFxuICAqL1xcbi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgcGFtdF9lbnRyeV9zaXplKVxcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcXG4rXFx0Y29uc3QgaW50IHRkeF9wZ19zaXplX3NoaWZ0W1REWF9QU19OUl0gPSB7IFBBR0VfU0hJRlQsIFBNRF9TSElGVCwgUFVEX1NISUZUIH07XFxuK1xcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcXG4rXFx0XFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXFxuK1xcdFxcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxcbitcXHRcXHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcXG4rXFx0fTtcXG4gXFxuLVxcdHN3aXRjaCAocGdzeikge1xcbi1cXHRjYXNlIFREWF9QU180SzpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBURFhfUFNfMk06XFxuLVxcdFxcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUE1EX1NISUZUO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBURFhfUFNfMUc6XFxuLVxcdFxcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUFVEX1NISUZUO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbitcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdO1xcbitcXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplW3Bnc3pdO1xcbiBcXG4tXFx0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZTtcXG4gXFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cXG4tXFx0cGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7XFxuLVxcbi1cXHRyZXR1cm4gcGFtdF9zejtcXG4rXFx0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTU3NiwxNSArNjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzXFxuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXFxuICAqL1xcbiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxcbi1cXHRcXHRcXHRcXHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGFtdF9zaXplW1REWF9QU19OUl07XFxuLVxcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7XFxuIFxcdHN0cnVjdCBwYWdlICpwYW10O1xcbi1cXHRpbnQgcGdzeiwgbmlkO1xcbitcXHRpbnQgbmlkO1xcbiBcXG4gXFx0bmlkID0gdGRtcl9nZXRfbmlkKHRkbXIsIHRtYl9saXN0KTtcXG4gXFxuQEAgLTU5MiwxMyArNjQwLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcXG4gXFx0ICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuXFxuIFxcdCAqL1xcbi1cXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XFxuLVxcdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcXHUwMDNjIFREWF9QU19OUjsgcGdzeisrKSB7XFxuLVxcdFxcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcXG4tXFx0XFx0XFx0XFx0XFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcXG4tXFx0XFx0dGRtcl9wYW10X3NpemUgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcXG4rXFxuK1xcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcXG4rXFx0XFx0LyogV2l0aCBEUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXFxuK1xcdFxcdHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XFxuIFxcdH1cXG4gXFxuK1xcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplICsgdGRtci1cXHUwMDNlcGFtdF8xZ19zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgb25lIGNodW5rIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZm9yIGFsbFxcbiBcXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcXG5AQCAtNjA2LDI1ICs2NTksMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKi9cXG4gXFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRuaWQsIFxcdTAwMjZub2RlX29ubGluZV9tYXApO1xcbi1cXHRpZiAoIXBhbXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXFxuLVxcdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxcbitcXHQgKiB0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcXG4rXFx0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxcbiBcXHQgKi9cXG4tXFx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xcbi1cXHRcXHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcXG4tXFx0XFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbi1cXHR9XFxuK1xcdGlmICghcGFtdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzRLXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMk1dO1xcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzJtX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzJNXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMUddO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXFx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cXHUwMDNlcGFtdF8ybV9iYXNlICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjU1LDEwICs3MDAsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcl9kb19wYW10X2Z1bmMoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcXHUwMDI2cGFtdF9iYXNlLCBcXHUwMDI2cGFtdF9zaXplKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xcbi1cXHRpZiAoIXBhbXRfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcXG4rXFx0aWYgKCFwYW10X2Jhc2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XFxuQEAgLTY4NCwxNCArNzI2LDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yc19mcmVlX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbiBcXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJzX3NldF91cF9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuIHtcXG4gXFx0aW50IGksIHJldCA9IDA7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGRtcl9saXN0LVxcdTAwM2Vucl9jb25zdW1lZF90ZG1yczsgaSsrKSB7XFxuLVxcdFxcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0cGFtdF9lbnRyeV9zaXplKTtcXG4rXFx0XFx0cmV0ID0gdGRtcl9zZXRfdXBfcGFtdCh0ZG1yX2VudHJ5KHRkbXJfbGlzdCwgaSksIHRtYl9saXN0KTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG5AQCAtOTY4LDE4ICsxMDA4LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcXG4ge1xcbi1cXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF80a19lbnRyeV9zaXplLFxcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfMm1fZW50cnlfc2l6ZSxcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXFxuLVxcdH07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBmaWxsX291dF90ZG1ycyh0bWJfbGlzdCwgdGRtcl9saXN0KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xcbitcXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC05OTgsNiArMTAzMyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rI2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVRcXHRCSVQoMTYpXFxuK1xcbiBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgIHU2NCBnbG9iYWxfa2V5aWQpXFxuIHtcXG5AQCAtMTAyNiw2ICsxMDYzLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxcbiBcXHRhcmdzLnJjeCA9IF9fcGEodGRtcl9wYV9hcnJheSk7XFxuIFxcdGFyZ3MucmR4ID0gdGRtcl9saXN0LVxcdTAwM2Vucl9jb25zdW1lZF90ZG1ycztcXG4gXFx0YXJncy5yOCA9IGdsb2JhbF9rZXlpZDtcXG4rXFxuK1xcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiRW5hYmxlIER5bmFtaWMgUEFNVFxcXFxuXFxcIik7XFxuK1xcdFxcdGFyZ3MucjggfD0gVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UO1xcbitcXHR9XFxuK1xcbiBcXHRyZXQgPSBzZWFtY2FsbF9wcmVycihUREhfU1lTX0NPTkZJRywgXFx1MDAyNmFyZ3MpO1xcbiBcXG4gXFx0LyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovXFxuQEAgLTExNjcsMTAgKzEyMTAsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuIFxcdCAqL1xcbiBcXHRnZXRfb25saW5lX21lbXMoKTtcXG4gXFxuLVxcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFxcdTAwMjZ0ZHhfbWVtbGlzdCk7XFxuK1xcdHJldCA9IGluaXRfZHBhbXRfcmVmY291bnRzKCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuIFxcbitcXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX2RwYW10X3JlZmNvdW50cztcXG4rXFxuIFxcdC8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgY29uc3RydWN0aW5nIFRETVJzICovXFxuIFxcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcXHUwMDI2dGR4X3RkbXJfbGlzdCwgXFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMjIwLDYgKzEyNjcsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcXG4gXFx0ZnJlZV90ZG1yX2xpc3QoXFx1MDAyNnRkeF90ZG1yX2xpc3QpO1xcbiBlcnJfZnJlZV90ZHhtZW06XFxuIFxcdGZyZWVfdGR4X21lbWxpc3QoXFx1MDAyNnRkeF9tZW1saXN0KTtcXG4rZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOlxcbitcXHRmcmVlX2RwYW10X3JlZmNvdW50cygpO1xcbiBcXHRnb3RvIG91dF9wdXRfdGR4bWVtO1xcbiB9XFxuIFxcbkBAIC0yMDA1LDYgKzIwNTQsMjkzIEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XFxuIFxcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4re1xcbitcXHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFxcdTAwMjYgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcbitcXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcXG4rXFx0aWYgKHBhZ2UpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnBhZ2UtXFx1MDAzZWxydSk7XFxuK1xcdFxcdGNhY2hlLVxcdTAwM2VjbnQtLTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHBhZ2U7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdGlmIChjYWNoZSlcXG4rXFx0XFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xcbitcXG4rXFx0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRpbnQgaSwgajtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkrKykge1xcbitcXHRcXHRwYW10X3BhZ2VzW2ldID0gYWxsb2NfZHBhbXRfcGFnZShjYWNoZSk7XFxuK1xcdFxcdGlmICghcGFtdF9wYWdlc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKVxcbitcXHRcXHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xcbitcXHRcXHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIEhlbHBlciBmb3IgYnVpbGRpbmcgRFBBTVQgc2VhbWNhbGwoKSBhcmd1bWVudHMuICovXFxuK3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB0aGUgMk1CLXdpZGUgRFBBTVQgcmVnaW9uIGZvciAncGZuJzogKi9cXG4rXFx0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgUE1EX1NJWkUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVERYIEFCSSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSBwYWdlIGxldmVsIHRoZSBpbnN0YWxsZWQgRFBBTVRcXG4rXFx0ICogYmFja2luZyB3aWxsIGNvdmVyLCBldmVuIHRob3VnaCB0b2RheSBvbmx5IDJNQiBpcyBzdXBwb3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gaHBhXzJtYiB8IFREWF9QU18yTTtcXG4rfVxcbitcXG4rLyogQWRkIERQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXFxuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXFxuK3tcXG4rXFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xcbitcXHRcXHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXFxuK1xcdFxcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXFxuK1xcdFxcdC5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXFx1MDAyNmFyZ3MpO1xcbit9XFxuK1xcbisvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0fTtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBDb3B5IFBBTVQgcGFnZXMgb3V0IG9mIHRoZSBzdHJ1Y3QgcGVyIHRoZSBURFggQUJJICovXFxuK1xcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xcbitcXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIERQQU1UIG1lbW9yeSAqL1xcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRwYW10X2xvY2spO1xcbitcXG4rLyogQnVtcCBEUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXFxuK2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdO1xcbitcXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9kcGFtdF9yZWZjb3VudChwZm4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIERQQU1UIGVudHJ5IGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXFx1MDAzZT0gMSksXFxuK1xcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8oZHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVubGlrZSB0ZHhfcGFtdF9wdXQoKSB3aGljaCB1c2VzIGF0b21pY19kZWNfYW5kX2xvY2soKSB0b1xcbitcXHQgKiBhdG9taWNhbGx5IGhhbmRsZSB0aGUgMS1cXHUwMDNlMCB0cmFuc2l0aW9uLCB0aGUgZ2V0IHNpZGUgaGFzIG5vXFxuK1xcdCAqIGVxdWl2YWxlbnQgY29tYmluZWQgcHJpbWl0aXZlIGZvciAwLVxcdTAwM2UxLiBSZWNoZWNrIHVuZGVyIHRoZVxcbitcXHQgKiBsb2NrIHNpbmNlIGFub3RoZXIgZ2V0IG1heSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgMC1cXHUwMDNlMVxcbitcXHQgKiB0cmFuc2l0aW9uIGFmdGVyIGJvdGggc2F3IGF0b21pY19pbmNfbm90X3plcm8oKSBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8oZHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXFxuK1xcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cXHUwMDNlMS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZHBhbXRfbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0X2ZyZWU6XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcXG4rXFxuKy8qIERyb3AgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXFxuK3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXSA9IHt9O1xcbitcXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgRFBBTVQgZW50cnksIGRvbid0XFxuK1xcdCAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC5cXG4rXFx0ICovXFxuK1xcdGlmICghYXRvbWljX2RlY19hbmRfbG9jayhkcGFtdF9yZWZjb3VudCwgXFx1MDAyNmRwYW10X2xvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXFxuK1xcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xcbitcXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXFxuK1xcdCAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kXFxuK1xcdCAqIHRoZSBkYW5nbGluZyBEUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC5cXG4rXFx0ICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogYXRvbWljX2RlY19hbmRfbG9jaygpIGFscmVhZHkgZGVjcmVtZW50ZWQgaXQgdG8gMCxcXG4rXFx0XFx0ICogYnV0IHRoZSBEUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXHRyZXR1cm47XFxuK291dF91bmxvY2s6XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfcHV0KTtcXG4rXFxuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXG4rXFx0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7XFxuK1xcbitpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuK3tcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRucGFnZXMgKj0gVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UO1xcbitcXG4rXFx0d2hpbGUgKGNhY2hlLVxcdTAwM2VjbnQgXFx1MDAzYyBucGFnZXMpIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcbitcXHRcXHRpZiAoIXBhZ2UpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnBhZ2UtXFx1MDAzZWxydSwgXFx1MDAyNmNhY2hlLVxcdTAwM2VwYWdlX2xpc3QpO1xcbitcXHRcXHRjYWNoZS1cXHUwMDNlY250Kys7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfdG9wdXBfcGFtdF9jYWNoZSk7XFxuK1xcbisvKlxcbisgKiBSZXR1cm4gYSBwYWdlIHRoYXQgY2FuIGJlIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgXFxcImNvbnRyb2xcXFwiXFxuKyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxcbisgKiBndWVzdCwgYW5kIHRodXMgb2J0YWluIFREWCBwcm90ZWN0aW9ucywgaW5jbHVkaW5nIERQQU1UIHRyYWNraW5nLlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcXG4rXFxuKy8qXFxuKyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cXG4rICovXFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4rXFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XFxuK31cXG4rXFxuK19fc2V0dXAoXFxcInRkeF9kcGFtdD1cXFwiLCB0ZHhfZHBhbXRfc2V0dXApO1xcbitcXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG5AQCAtNDgsNiArNDgsOCBAQFxcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXFx0XFx0XFx0NDVcXG4gI2RlZmluZSBUREhfU1lTX1NIVVRET1dOXFx0XFx0NTJcXG4gI2RlZmluZSBUREhfU1lTX1VQREFURVxcdFxcdFxcdDUzXFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERFxcdFxcdDU4XFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVxcdFxcdDU5XFxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXFx0XFx0XFx0NjlcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uOThlYmYxN2FhYjFjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xcbkBAIC0xLDYgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKlxcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbisgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbiAgKlxcbiAgKiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uXFxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cXG5AQCAtMzMsNiArMzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCB2YWw7XFxuK1xcbitcXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuQEAgLTEyOSw1ICsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbiBcXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZF9jdHJsKTtcXG4gXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzb1xcbitcXHQgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQuIERvbid0XFxuK1xcdCAqIHRyeSB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlXFxuK1xcdCAqIERQQU1UIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcXG4rXFx0XFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZG1yKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDU6NTQuMjk5NTEyNDIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2OTkzODAzOTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmYzYTVlYWJhOTAzYzIxMjRkOGZjNmFkNjc1NTI4NWNlOGRmZDVjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDI6MDU6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA2ODY0N2ZmNGJkZDI0Li5lNzU1OGI4MzgyYWNmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtNzU4Miw2ICs3NTgyLDE2IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHR0ZGZ4PVx0XHRbSFcsRFJNXVxuIFxuK1x0dGR4X2RwYW10PVxuK1x0XHRcdFtYODZdIENvbnRyb2xzIHdoZXRoZXIgVERYIHdpbGwgdXNlIER5bmFtaWMgUEFNVFxuK1x0XHRcdHRvIHNhdmUgbWVtb3J5LCB3aGVuIHN1cHBvcnRlZC5cbitcbitcdFx0XHRWYWxpZCBwYXJhbWV0ZXJzOiBcIm9uXCIsIFwib2ZmXCJcbitcdFx0XHREZWZhdWx0OiBcIm9mZlwiXG4rXG4rXHRcdFx0Rm9yIGRldGFpbHMgc2VlOlxuK1x0XHRcdERvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuK1xuIFx0dGVzdF9zdXNwZW5kPVx0W1NVU1BFTkRdXG4gXHRcdFx0Rm9ybWF0OiB7IFwibWVtXCIgfCBcInN0YW5kYnlcIiB8IFwiZnJlZXplXCIgfVssTl1cbiBcdFx0XHRTcGVjaWZ5IFwibWVtXCIgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXCJzdGFuZGJ5XCIgKGZvclxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuaW5kZXggMzMwMzQ5OWFkNGM2Zi4uZGUwOTk2N2NlOGQ4YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5AQCAtMjAwLDYgKzIwMCwzMyBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmVcbiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVERcbiBsYXVuY2ggdGltZSBhbmQgaXMgbm90IGFmZmVjdGVkLlxuIFxuK0R5bmFtaWMgUEFNVFxuKy0tLS0tLS0tLS0tLVxuK1xuK1RoZSBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZXRhZGF0YSBpbiB3aGljaCB0aGUgVERYXG4rbW9kdWxlIGtlZXBzIGRhdGEgYWJvdXQgZWFjaCBwaHlzaWNhbCBwYWdlICh0aGluayBzdHJ1Y3QgcGFnZSkuIFNwYWNlXG4rZm9yIGl0IGlzIGFsbG9jYXRlZCBieSB0aGUgVk1NLCBjb25zdW1lcyB1cCB0byBhYm91dCAwLjQlIG9mIHN5c3RlbVxuK21lbW9yeSBhbmQgbmVlZHMgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIFREWCBtb2R1bGUgd2hlbiB0aGUgVERYIG1vZHVsZSBpc1xuK2ZpcnN0IGxvYWRlZC5cbitcbitEeW5hbWljIFBBTVQgaXMgYW4gYWRkLW9uIGZlYXR1cmUgdGhhdCBhbGxvd3MgYSBWTU0gdG8gZHluYW1pY2FsbHlcbithbGxvY2F0ZSB0aGUgcGFydCBvZiB0aGUgUEFNVCB3aGljaCB0cmFja3MgNEtCIHBhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlXG4rYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCBjb25zdW1lcyB3aGlsZSBURHMgYXJlIG5vdCBpbiB1c2UuXG4rXG4rV2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbitcbisgIFsuLl0gdmlydC90ZHg6IEVuYWJsZSBEeW5hbWljIFBBTVRcbisgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuKyAgWy4uXSB2aXJ0L3RkeDogVERYLU1vZHVsZSBpbml0aWFsaXplZFxuK1xuK0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbitwYXJhbWV0ZXIgaXMgc2V0IHRvIFwib25cIi4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4raW50ZXJuYWwgZGV0YWlscyBwcmV2ZW50IER5bmFtaWMgUEFNVCBmcm9tIHdvcmtpbmcgb24gYWxsIGtleWlkIHBhcnRpdGlvbmluZ1xuK2NvbmZpZ3VyYXRpb25zLiBXaGVuIHRoZSBURFggbW9kdWxlIGlzIGZpeGVkIHRvIGluY2x1ZGUgdGhlc2UgY29uc3RyYWludHMgaW5cbitpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4rZGVmYXVsdCBvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIEludGVsIFREWCBkb2N1bWVudGF0aW9uIGFib3V0XG4rRHluYW1pYyBQQU1ULlxuK1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCBlMjEzYzlhZTNlMzAxLi41YzM1OGM0MGVhZThhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk5LDYgKzk5LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpXG4gS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldClcbiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcilcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uNTdkMzc0OTFjN2MwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNjQ0LDYgKzE2NDQsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xuIFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcbiBcbitcdGludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7XG4gXG4gXHRib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5lMTg2ZGZlNWJmODg1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5AQCAtMzYsNiArMzYsNyBAQFxuIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovXG4gI2RlZmluZSBURFhfRkVBVFVSRVMwX1REX1BSRVNFUlZJTkdcdEJJVF9VTEwoMSlcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRFx0QklUX1VMTCgxOClcbisjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiArMTE5LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfc3VwcG9ydHNfcnVudGltZV91cGRhdGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mXG4gXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX1REX1BSRVNFUlZJTkc7XG4gfVxuIFxuK2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKTtcbitcbisvKiBTaW1wbGUgc3RydWN0dXJlIGZvciBwcmUtYWxsb2NhdGluZyBEUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi9cbitzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XG4rXHRpbnQgY250O1xuK307XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuK1x0Y2FjaGUtXHUwMDNlY250ID0gMDtcbit9XG4rXG4rdm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTtcbitcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuK3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbitcbiBzdHJ1Y3QgdGR4X3RkIHtcbiBcdC8qIFREIHJvb3Qgc3RydWN0dXJlOiAqL1xuIFx0c3RydWN0IHBhZ2UgKnRkcl9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuaW5kZXggNDExNTBkNTQ2NTg5Yy4uOGEzY2MxYTJhNDFlMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5AQCAtMSw3ICsxLDcgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cbi0jaWZuZGVmIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4tI2RlZmluZSBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuKy8qIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cbisjaWZuZGVmIF9YODZfVklSVF9URFhfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4rI2RlZmluZSBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMSw2ICsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XG4gXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xuIFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XG4rXG4rXHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRFBBTVQgaXMgc3VwcG9ydGVkICovXG4rXHR1OCAgcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xuIH07XG4gXG4gc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjgxNjg2MWNhMjc5YyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02MTcsNiArNjE3LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuIFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gXHRcdGlmIChyKVxuIFx0XHRcdHJldHVybiByO1xuK1xuK1x0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0cmV0dXJuIHI7XG4gXHR9XG4gXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcbiBcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uN2M3OWY0ZDRiZjk5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpXG4gXHRpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xuIFxuLVx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcbiB9XG4gXG5AQCAtNjgxLDYgKzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHR0ZHhfaW5pdF9wYW10X2NhY2hlKFx1MDAyNnRkeC1cdTAwM2VwYW10X2NhY2hlKTtcbitcbiBcdGZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1KTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWd1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRkeC1cdTAwM2V2dC5waV93YWtldXBfbGlzdCk7XG5AQCAtODY2LDYgKzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuK1x0dGR4X2ZyZWVfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4rXG4gXHRpZiAodmNwdS1cdTAwM2VjcHUgIT0gLTEpIHtcbiBcdFx0S1ZNX0JVR19PTih0ZHgtXHUwMDNlc3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS1cdTAwM2Vrdm0pO1xuIFx0XHR0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpO1xuQEAgLTE2MTgsNiArMTYyMiwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxuK3tcbitcdC8qXG4rXHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcbitcdCAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuXG4rXHQgKi9cbitcdG1pbl9ucl9zcHRzICs9IC0xICsgMTtcbitcbitcdHJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZShcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSwgbWluX25yX3NwdHMpO1xuK31cbitcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0ICAgIGt2bV9wZm5fdCBwZm4pXG4ge1xuQEAgLTE2NzYsMTYgKzE2OTEsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdFx0XHRcdCAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcbiBcdGlmICghc2VwdF9wdClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbitcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGVyciA9IHRkaF9tZW1fc2VwdF9hZGQoXHUwMDI2dG9fa3ZtX3RkeChrdm0pLVx1MDAzZXRkLCBncGEsIGxldmVsLCBzZXB0X3B0LFxuIFx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuK1x0aWYgKGVycilcbitcdFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcbitcbiBcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuQEAgLTE2OTgsOCArMTcyNSwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xuIFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHQvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovXG4gXHRpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSlcbkBAIC0xNzA3LDYgKzE3MzksMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuK1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuK1x0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LypcbiBcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG4gXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuQEAgLTE3MTksMTAgKzE3NTUsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcdCAqIElmIHRoZSBURCBpc24ndCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRpZiAobGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuK1x0XHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHR0ZHhfcGFtdF9wdXQocGZuKTtcbiBcbi1cdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTgxOSw2ICsxODYwLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuK1x0dGR4X3BhbXRfcHV0KHBmbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTg2Miw2ICsxOTA0LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsXG4gICovXG4gc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIHtcbitcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4rXG4gXHQvKlxuIFx0ICogS1ZNIGRvZXNuJ3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGVcbiBcdCAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZVxuQEAgLTE4NzUsMTUgKzE5MTksMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4rXHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKlxuLVx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3Nhcnlcbi1cdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXG4tXHQgKiByZWFkZXJzLlxuK1x0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2Vzbid0IHN1cHBvcnRcbitcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXG4rXHQgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLlxuIFx0ICovXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU2LDcgKzI1MDAsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXG4gXHRyZXQgPSAtRU5PTUVNO1xuIFxuLVx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHR0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghdGRyX3BhZ2UpXG4gXHRcdGdvdG8gZnJlZV9oa2lkO1xuIFxuQEAgLTI0NjksNyArMjUxMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdHRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTg3LDEwICsyNjMxLDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIHRlYXJkb3duOlxuIFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICdpJyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKSB7XG4tXHRcdFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4tXHRcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4tXHRcdH1cbitcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuK1x0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGlmICgha3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzKVxuIFx0XHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbkBAIC0yNjA1LDE2ICsyNjQ3LDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdGZyZWVfY3B1bWFza192YXIocGFja2FnZXMpO1xuIFxuIGZyZWVfdGRjczpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0fVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspXG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbiBcdGtmcmVlKHRkY3NfcGFnZXMpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3Rkcjpcbi1cdGlmICh0ZHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGRyX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTQ4LDcgKzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGVycjtcbiBcbi1cdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCFwYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlID0gcGFnZTtcbkBAIC0yOTY4LDcgKzMwMDcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTAsNyArMzAyOSw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdFx0XHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbitcdFx0XHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUlPO1xuQEAgLTMwMTgsMTYgKzMwNTcsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFxuIGZyZWVfdGRjeDpcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGtmcmVlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzKTtcbiBcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3RkdnByOlxuLVx0aWYgKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDg3LDYgKzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcbiBcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xuIFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XG4rXG4rXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4rXHRcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcbitcbiBcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbmluZGV4IGFjODMyM2E2OGIxNjMuLmZkMzY4ZTNlZTA2MGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG5AQCAtNzIsNiArNzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHgge1xuIFxuIFx0dTY0IG1hcF9ncGFfbmV4dDtcbiBcdHU2NCBtYXBfZ3BhX2VuZDtcbitcbitcdHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlO1xuIH07XG4gXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5pbmRleCAxYjlmZjc0OWRkOGUwLi4yYWNhYjZlNWY1Zjg3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbkBAIC0zMCw2ICszMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbXNyLWluZGV4LmhcdTAwM2VcbkBAIC00Niw2ICs0NywxMSBAQFxuICNpbmNsdWRlIFwic2VhbWNhbGxfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rLyogTnVtYmVyIG9mIERQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cbisjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyXG4rXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xuIFx0Ym9vbCBpbml0aWFsaXplZDtcbiBcdGJvb2wgc3lzaW5pdF9kb25lO1xuQEAgLTYzLDYgKzY5LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbisvKlxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIERQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyXG4rICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcbisgKiB0aGUgRFBBTVQgYXQgdGhlIDJNQiByYW5nZS4gVGhlIGtlcm5lbCBhbGxvY2F0ZXMgRFBBTVQgcmVmY291bnRzIGF0XG4rICogaW5pdGlhbGl6YXRpb24uXG4rICovXG4rc3RhdGljIGF0b21pY190ICpkcGFtdF9yZWZjb3VudHM7XG4rXG4gLyogQWxsIFREWC11c2FibGUgbWVtb3J5IHJlZ2lvbnMuICBQcm90ZWN0ZWQgYnkgbWVtX2hvdHBsdWdfbG9jay4gKi9cbiBzdGF0aWMgTElTVF9IRUFEKHRkeF9tZW1saXN0KTtcbiBcbkBAIC0yNTIsNiArMjY2LDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHtcbiBcdC5vcHMgPSBcdTAwMjZ0ZHhfc3lzY29yZV9vcHMsXG4gfTtcbiBcbisvKlxuKyAqIEFsbG9jYXRlIERQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS5cbisgKlxuKyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cbisgKi9cbitzdGF0aWMgX19pbml0IGludCBpbml0X2RwYW10X3JlZmNvdW50cyh2b2lkKVxuK3tcbitcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKmRwYW10X3JlZmNvdW50cyk7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XG4rXHRpZiAoIWRwYW10X3JlZmNvdW50cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfZHBhbXRfcmVmY291bnRzKHZvaWQpXG4re1xuK1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dmZyZWUoZHBhbXRfcmVmY291bnRzKTtcbitcdGRwYW10X3JlZmNvdW50cyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXG4rXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcGZuIFx1MDAzZVx1MDAzZSAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7XG4rXG4rXHRyZXR1cm4gXHUwMDI2ZHBhbXRfcmVmY291bnRzW2luZGV4XTtcbit9XG4rXG4gLypcbiAgKiBBZGQgYSBtZW1vcnkgcmVnaW9uIGFzIGEgVERYIG1lbW9yeSBibG9jay4gIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmVcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24ndFxuQEAgLTUxMCwzNSArNTYwLDM3IEBAIHN0YXRpYyBfX2luaXQgaW50IGZpbGxfb3V0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xuK1x0aW50IGJpdHNfcGVyX2VudHJ5O1xuK1xuK1x0Yml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbitcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xuK1xuK1x0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XG4rfVxuK1xuIC8qXG4gICogQ2FsY3VsYXRlIFBBTVQgc2l6ZSBnaXZlbiBhIFRETVIgYW5kIGEgcGFnZSBzaXplLiAgVGhlIHJldHVybmVkXG4gICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuXG4gICovXG4tc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3osXG4tXHRcdFx0XHRcdCAgICAgdTE2IHBhbXRfZW50cnlfc2l6ZSlcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbitcdGNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9O1xuK1x0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xuK1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcbitcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXG4rXHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxuK1x0fTtcbiBcbi1cdHN3aXRjaCAocGdzeikge1xuLVx0Y2FzZSBURFhfUFNfNEs6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFREWF9QU18yTTpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQTURfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMUc6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUFVEX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4rXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdO1xuK1x0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZVtwZ3N6XTtcbiBcbi1cdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemU7XG4gXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xuLVx0cGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7XG4tXG4tXHRyZXR1cm4gcGFtdF9zejtcbitcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuIH1cbiBcbiAvKlxuQEAgLTU3NiwxNSArNjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cbiAgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcbitcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfc2l6ZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFtdDtcbi1cdGludCBwZ3N6LCBuaWQ7XG4rXHRpbnQgbmlkO1xuIFxuIFx0bmlkID0gdGRtcl9nZXRfbmlkKHRkbXIsIHRtYl9saXN0KTtcbiBcbkBAIC01OTIsMTMgKzY0MCwxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxuIFx0ICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9zaXplID0gMDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcbi1cdFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxuLVx0XHRcdFx0XHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xuLVx0XHR0ZG1yX3BhbXRfc2l6ZSArPSBwYW10X3NpemVbcGdzel07XG4rXHR0ZG1yLVx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcbitcdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4rXHRcdC8qIFdpdGggRFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqL1xuK1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xuK1x0fSBlbHNlIHtcbitcdFx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XG4gXHR9XG4gXG4rXHR0ZG1yX3BhbXRfc2l6ZSA9IHRkbXItXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cdTAwM2VwYW10XzJtX3NpemUgKyB0ZG1yLVx1MDAzZXBhbXRfMWdfc2l6ZTtcbitcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsXG4gXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcbkBAIC02MDYsMjUgKzY1OSwxNyBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHQgKi9cbiBcdHBhbXQgPSBhbGxvY19jb250aWdfcGFnZXModGRtcl9wYW10X3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsXG4gXHRcdFx0bmlkLCBcdTAwMjZub2RlX29ubGluZV9tYXApO1xuLVx0aWYgKCFwYW10KVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qXG4tXHQgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGVcbi1cdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxuK1x0ICogdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcbitcdCAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC5cbiBcdCAqL1xuLVx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcbi1cdFx0cGFtdF9iYXNlW3Bnc3pdID0gdGRtcl9wYW10X2Jhc2U7XG4tXHRcdHRkbXJfcGFtdF9iYXNlICs9IHBhbXRfc2l6ZVtwZ3N6XTtcbi1cdH1cbitcdGlmICghcGFtdClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzRLXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMk1dO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzFHXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107XG4rXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTtcbitcdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgKyB0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZTtcbitcdHRkbXItXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgKyB0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02NTUsMTAgKzcwMCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yX2RvX3BhbXRfZnVuYyhzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcdTAwMjZwYW10X2Jhc2UsIFx1MDAyNnBhbXRfc2l6ZSk7XG4gXG4gXHQvKiBEbyBub3RoaW5nIGlmIFBBTVQgaGFzbid0IGJlZW4gYWxsb2NhdGVkIGZvciB0aGlzIFRETVIgKi9cbi1cdGlmICghcGFtdF9zaXplKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKVxuK1x0aWYgKCFwYW10X2Jhc2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XG5AQCAtNjg0LDE0ICs3MjYsMTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJzX2ZyZWVfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4gXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4gXHRpbnQgaSwgcmV0ID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1yczsgaSsrKSB7XG4tXHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCxcbi1cdFx0XHRcdHBhbXRfZW50cnlfc2l6ZSk7XG4rXHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBlcnI7XG4gXHR9XG5AQCAtOTY4LDE4ICsxMDA4LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdFx0XHRcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbi1cdHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMm1fZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QsIHBhbXRfZW50cnlfc2l6ZSk7XG4rXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTk5OCw2ICsxMDMzLDggQEAgc3RhdGljIF9faW5pdCBpbnQgY29uc3RydWN0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rI2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVRcdEJJVCgxNilcbitcbiBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdFx0XHRcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxuIHtcbkBAIC0xMDI2LDYgKzEwNjMsMTIgQEAgc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRhcmdzLnJjeCA9IF9fcGEodGRtcl9wYV9hcnJheSk7XG4gXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1ycztcbiBcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XG4rXG4rXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcbitcdFx0cHJfaW5mbyhcIkVuYWJsZSBEeW5hbWljIFBBTVRcXG5cIik7XG4rXHRcdGFyZ3MucjggfD0gVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UO1xuK1x0fVxuK1xuIFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFx1MDAyNmFyZ3MpO1xuIFxuIFx0LyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovXG5AQCAtMTE2NywxMCArMTIxMCwxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdCAqL1xuIFx0Z2V0X29ubGluZV9tZW1zKCk7XG4gXG4tXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4rXHRyZXQgPSBpbml0X2RwYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbitcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzO1xuK1xuIFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cbiBcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcdTAwMjZ0ZHhfc3lzaW5mby50ZG1yKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIyMCw2ICsxMjY3LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHRmcmVlX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0KTtcbiBlcnJfZnJlZV90ZHhtZW06XG4gXHRmcmVlX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitlcnJfZnJlZV9kcGFtdF9yZWZjb3VudHM6XG4rXHRmcmVlX2RwYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwNSw2ICsyMDU0LDI5MyBAQCB1NjQgdGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKHU2NCBoa2lkLCBrdm1fcGZuX3QgcGZuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTtcbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzeXNpbmZvLVx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBhZ2U7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdGlmIChjYWNoZSlcbitcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuK1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbit9XG4rXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRpbnQgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XG4rXHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbitcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpKyspIHtcbitcdFx0LypcbitcdFx0ICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzXG4rXHRcdCAqIHdoZXJlIHRoZXkgd2VyZSBwYXNzZWQgdG8gdGhlIFREWCBtb2R1bGUuXG4rXHRcdCAqL1xuK1x0XHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpO1xuK1xuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2ldKTtcbitcdH1cbit9XG4rXG4rLyogSGVscGVyIGZvciBidWlsZGluZyBEUEFNVCBzZWFtY2FsbCgpIGFyZ3VtZW50cy4gKi9cbitzdGF0aWMgdTY0IHBhbXRfMm1iX2FyZyhrdm1fcGZuX3QgcGZuKVxuK3tcbitcdC8qIEZpbmQgdGhlIDJNQi13aWRlIERQQU1UIHJlZ2lvbiBmb3IgJ3Bmbic6ICovXG4rXHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgUE1EX1NJWkUpO1xuK1xuK1x0LypcbitcdCAqIFREWCBBQkkgcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgcGFnZSBsZXZlbCB0aGUgaW5zdGFsbGVkIERQQU1UXG4rXHQgKiBiYWNraW5nIHdpbGwgY292ZXIsIGV2ZW4gdGhvdWdoIHRvZGF5IG9ubHkgMk1CIGlzIHN1cHBvcnRlZC5cbitcdCAqL1xuK1x0cmV0dXJuIGhwYV8ybWIgfCBURFhfUFNfMk07XG4rfVxuK1xuKy8qIEFkZCBEUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4rXHRcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXG4rXHRcdC5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFx1MDAyNmFyZ3MpO1xuK31cbitcbisvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cbitzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbitcdFx0LnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLFxuK1x0fTtcbitcdHU2NCByZXQ7XG4rXG4rXHRyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgXHUwMDI2YXJncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogQ29weSBQQU1UIHBhZ2VzIG91dCBvZiB0aGUgc3RydWN0IHBlciB0aGUgVERYIEFCSSAqL1xuK1x0cGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7XG4rXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIERQQU1UIG1lbW9yeSAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHBhbXRfbG9jayk7XG4rXG4rLyogQnVtcCBEUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4rXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XG4rXHR1NjQgdGR4X3N0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgRFBBTVQgZW50cnkgaXMgYWxyZWFkeSBhZGRlZCAoaS5lLiByZWZjb3VudCBcdTAwM2U9IDEpLFxuK1x0ICogdGhlbiBqdXN0IGluY3JlbWVudCB0aGUgcmVmY291bnQuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4rXG4rXHQvKlxuK1x0ICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvXG4rXHQgKiBhdG9taWNhbGx5IGhhbmRsZSB0aGUgMS1cdTAwM2UwIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm9cbitcdCAqIGVxdWl2YWxlbnQgY29tYmluZWQgcHJpbWl0aXZlIGZvciAwLVx1MDAzZTEuIFJlY2hlY2sgdW5kZXIgdGhlXG4rXHQgKiBsb2NrIHNpbmNlIGFub3RoZXIgZ2V0IG1heSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgMC1cdTAwM2UxXG4rXHQgKiB0cmFuc2l0aW9uIGFmdGVyIGJvdGggc2F3IGF0b21pY19pbmNfbm90X3plcm8oKSBmYWlsLlxuK1x0ICovXG4rXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhkcGFtdF9yZWZjb3VudCkpXG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXG4rXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X2FkZChwZm4sIHBhbXRfcGFnZXMpO1xuK1x0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xuK1x0XHRyZXQgPSAtRUlPO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGVcbitcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cdTAwM2UxLlxuK1x0ICovXG4rXHRhdG9taWNfc2V0KGRwYW10X3JlZmNvdW50LCAxKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X2ZyZWU6XG4rXHRzcGluX3VubG9jayhcdTAwMjZkcGFtdF9sb2NrKTtcbitcdGZyZWVfcGFtdF9hcnJheShwYW10X3BhZ2VzKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpO1xuK1xuKy8qIERyb3AgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4rdm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbilcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307XG4rXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XG4rXHR1NjQgdGR4X3N0YXR1cztcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybjtcbitcbitcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIERQQU1UIGVudHJ5LCBkb24ndFxuK1x0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soZHBhbXRfcmVmY291bnQsIFx1MDAyNmRwYW10X2xvY2spKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xuK1xuK1x0LypcbitcdCAqIERvbid0IGZyZWUgcGFtdF9wYWdlcyBhcyBpdCBjb3VsZCBob2xkIGdhcmJhZ2Ugd2hlblxuK1x0ICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJ3QgcGFuaWMvQlVHX09OKCksIGFzXG4rXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXG4rXHQgKiBmYWlsdXJlIGluZGljYXRlcyBhIGtlcm5lbCBidWcsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQsIGFuZFxuK1x0ICogdGhlIGRhbmdsaW5nIERQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsXG4rXHRcdCAqIGJ1dCB0aGUgRFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXG4rXHRcdCAqL1xuK1x0XHRhdG9taWNfc2V0KGRwYW10X3JlZmNvdW50LCAxKTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXHRyZXR1cm47XG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfcHV0KTtcbitcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcbitcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcbitcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9wYW10X2NhY2hlKTtcbitcbitpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4re1xuK1x0aWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5wYWdlcyAqPSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7XG4rXG4rXHR3aGlsZSAoY2FjaGUtXHUwMDNlY250IFx1MDAzYyBucGFnZXMpIHtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXG4rXHRcdGlmICghcGFnZSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdFx0bGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VscnUsIFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfdG9wdXBfcGFtdF9jYWNoZSk7XG4rXG4rLypcbisgKiBSZXR1cm4gYSBwYWdlIHRoYXQgY2FuIGJlIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgXCJjb250cm9sXCJcbisgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcbisgKiBndWVzdCwgYW5kIHRodXMgb2J0YWluIFREWCBwcm90ZWN0aW9ucywgaW5jbHVkaW5nIERQQU1UIHRyYWNraW5nLlxuKyAqL1xuK3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmICh0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4ocGFnZSksIE5VTEwpKSB7XG4rXHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiBwYWdlO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2FsbG9jX2NvbnRyb2xfcGFnZSk7XG4rXG4rLypcbisgKiBGcmVlIGEgcGFnZSB0aGF0IHdhcyBnaWZ0ZWQgdG8gdGhlIFREWCBtb2R1bGUgZm9yIHVzZSBhcyBhIGNvbnRyb2xcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cbisgKi9cbit2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybjtcbitcbitcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7XG4rXHRfX2ZyZWVfcGFnZShwYWdlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XG4rXG4rc3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbit7XG4rXHRyZXR1cm4ga3N0cnRvYm9vbChzdHIsIFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XG4rfVxuK1xuK19fc2V0dXAoXCJ0ZHhfZHBhbXQ9XCIsIHRkeF9kcGFtdF9zZXR1cCk7XG4rXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcbiB7XG4gXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmggYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbmluZGV4IGJkZmQwZTFlMzM3YWMuLmE4ODZjNTRkZWNhYWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuQEAgLTQ4LDYgKzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9BRERcdFx0NThcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkVcdFx0NTlcbiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRVx0XHRcdDY5XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuaW5kZXggZTQ5YzMwMGYyM2Q0My4uOThlYmYxN2FhYjFjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbkBAIC0xLDYgKzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuKyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4gICpcbiAgKiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uXG4gICogb2YgU0VBTUNBTEwgd3JhcHBlciBwcmltaXRpdmUgd2hpY2ggcmVhZHMgZ2xvYmFsIG1ldGFkYXRhLlxuQEAgLTMzLDYgKzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4re1xuK1x0aW50IHJldDtcbitcdHU2NCB2YWw7XG4rXG4rXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFx1MDAyNnZhbCk7XG4rXHRpZiAoIXJldClcbitcdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cyA9IHZhbDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xMjksNSArMTQxLDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jdHJsKTtcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jb25mKTtcbiBcbitcdC8qXG4rXHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzb1xuK1x0ICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQncyBub3Qgc3VwcG9ydGVkLiBEb24ndFxuK1x0ICogdHJ5IHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2VcbitcdCAqIERQQU1UIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxuK1x0ICovXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcbitcdFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA1OjU0LjI5OTUxNDEzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MzI1MjE5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggRFBBTVQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgdGhlIHBhdGNoIGlzIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQncyBkaWcgaW4uIEZpcnN0LCBJIG5lZWQgdG8gKnVuZGVyc3RhbmQqIHdoYXQgdGhpcyBwYXRjaCBpcyBldmVuIGRvaW5nLiBBaCwgaXQncyBhZGRpbmcgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEtWTSBURFggYW5kIHZpcnQvdm14L3RkeCBjb21wb25lbnRzLiBUaGF0J3MgZ29vZCBpbmZvcm1hdGlvbi5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlIGNvZGUncyBtb2RpZmllZC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgYSBkZWNlbnQgY2h1bmsgb2YgdGhlIGNvZGViYXNlOiBkb2N1bWVudGF0aW9uLCBpbmNsdWRlIGZpbGVzIGluIGBhcmNoL3g4NmAsIGFuZCBzb21lIGtleSBga3ZtYCBkaXJlY3RvcmllcywgZXNwZWNpYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggYHZteGAgYW5kIGB0ZHhgIChpbmNsdWRpbmcgYHRkeF9nbG9iYWxfbWV0YWRhdGFgKS4gVGhhdCBicmVhZHRoIG9mIGNoYW5nZXMgaXMgaW50ZXJlc3RpbmcuIFRoZSBkZWVwZXIgaXQgZ29lcyB0aGUgbW9yZSBvcHBvcnR1bml0eSBmb3IgaGlkZGVuIGVkZ2UgY2FzZXMuXG5cbk5leHQsIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZnV6emFiaWxpdHkgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50cy4gQ2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBmdW5jdGlvbmFsaXR5IGluIFFFTVUgb3IgR0NFPyBEb2VzIHRoZSBURFggaG9zdCAodGhhdCBJbnRlbCBURFggbW9kdWxlL1NFQU1DQUxMKSBmdW5jdGlvbiBwcm9wZXJseSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgd2l0aG91dCByZWFsIFREWCBoYXJkd2FyZT8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiBIb3cgZG9lcyB0aGlzIFREWCBob3N0IGdldCBpbml0aWFsaXplZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gTGV0J3MgZG8gYSBxdWljayBkaXZlLiBJIHNob3VsZCBjaGVjayBgZ3JlcHBlcmAgYW5kIGxvb2sgaW50byBgYXJjaC94ODYvdmlydC92bXgvdGR4L2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIFREWCBob3N0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjAwLjIzMjAzOTA1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxOTUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF90ZHhfbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTE2OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkbXJzKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTExODctXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjExODg6c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTExODkte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEyNzU9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMDQtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMDU6XFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMDYtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjowMC40NzEyNDAyMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTA2OTEwMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVERYIEhvc3QgSW5pdGlhbGl6YXRpb24gYW5kIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVERYIGhvc3QgZW52aXJvbm1lbnQuIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGB0ZHhfZW5hYmxlYC4gVGhhdCdzIHRoZSBrZXkgZnVuY3Rpb24sIEknbSBzdXJlLCBhbmQgaXQgc2hvdWxkIHJldmVhbCB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIFREWCBmZWF0dXJlcyBhcmUgYWN0aXZhdGVkLiBLbm93aW5nIHdoZXJlIHRoaXMgaXMgY2FsbGVkIGFuZCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgd2lsbCB0ZWxsIG1lIHF1aXRlIGEgYml0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgd2UncmUgdXNpbmcgZWFybHkgaW5pdGlhbGl6YXRpb24gdGVjaG5pcXVlcyBvciBkZWZlcnJpbmcgaXQuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlc2UgY2FsbCBzaXRlcyB3aXRoIGFueSBURFgtc3BlY2lmaWMgaG9zdCBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGlkZW50aWZ5IGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIG5vdGUgd2hpY2ggbW9kdWxlcyBhcmUgaW5pdGlhbGl6ZWQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MDQuNTc4MTUyNzQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Njc5NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9lbmFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTM6c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0LVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTExODg9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI3NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTI3NTpzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzYte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTctfVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzE4OnN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMxOS1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMDU3PWJvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMDU4LXtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjA1OTpcXHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIwNjAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIzMzc9c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjMzOC17XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIzMzk6XFx0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjM0MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjA0LjY1NDgzNjMxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDEzNTQ2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBURFggRW5hYmxlbWVudCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGB0ZHhfZW5hYmxlKClgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgYXJlIGJyb3VnaHQgb25saW5lIHdpdGhpbiB0aGUgVk1YIGNvbnRleHQuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgVERYIGluaXRpYWxpemF0aW9uLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM6IHdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQsIHdoYXQgcmVnaXN0ZXJzIGFyZSBtYW5pcHVsYXRlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY29udHJvbCBiaXRzIGFyZSBzZXQgdG8gZW5hYmxlIFREWCBmZWF0dXJlcy4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgYW55IGNhbGxzIHRvIGxvd2VyLWxldmVsIGZ1bmN0aW9ucywgc3VjaCBhcyB0aG9zZSByZWxhdGVkIHRvIGhhbmRsaW5nIFREWC1zcGVjaWZpYyBNU1JzIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIFREWCBtb2R1bGUgaXRzZWxmLiBUaGlzIGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVhcmx5IGJvb3Qgc3RhZ2VzIGFuZCB0aGUgc2VjdXJlIHNldHVwIG9mIHRoZSBURFggZW52aXJvbm1lbnQsIHNvIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBsb3ctbGV2ZWwgZGV0YWlscyB0aGF0J2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMzcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjowOC4yOTYxOTQzMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzA6XFx0ZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOlxcbjEyNzE6XFx0XFx0ZnJlZV9kcGFtdF9yZWZjb3VudHMoKTtcXG4xMjcyOlxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuMTI3MzpcXHR9XFxuMTI3NDpcXHRcXG4xMjc1OlxcdHN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcXG4xMjc2OlxcdHtcXG4xMjc3OlxcdFxcdGVudW0gY3B1aHBfc3RhdGUgc3RhdGU7XFxuMTI3ODpcXHRcXHRpbnQgcmV0O1xcbjEyNzk6XFx0XFxuMTI4MDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMTI4MTpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4xMjgyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjEyODM6XFx0XFx0fVxcbjEyODQ6XFx0XFxuMTI4NTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWFNBVkUpKSB7XFxuMTI4NjpcXHRcXHRcXHRwcl9lcnIoXFxcIlhTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjEyODc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI4ODpcXHRcXHR9XFxuMTI4OTpcXHRcXG4xMjkwOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NT1ZESVI2NEIpKSB7XFxuMTI5MTpcXHRcXHRcXHRwcl9lcnIoXFxcIk1PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxcXG5cXFwiKTtcXG4xMjkyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyOTM6XFx0XFx0fVxcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xcbjEyOTY6XFx0XFx0XFx0cHJfZXJyKFxcXCJTZWxmLXNub29wIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjEyOTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHRcXG4xMzAwOlxcdFxcdHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXFxcInZpcnQvdGR4Om9ubGluZVxcXCIsXFxuMTMwMTpcXHRcXHRcXHRcXHRcXHQgIHRkeF9vbmxpbmVfY3B1LCB0ZHhfb2ZmbGluZV9jcHUpO1xcbjEzMDI6XFx0XFx0aWYgKHN0YXRlIFxcdTAwM2MgMClcXG4xMzAzOlxcdFxcdFxcdHJldHVybiBzdGF0ZTtcXG4xMzA0OlxcdFxcbjEzMDU6XFx0XFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XFxuMTMwNjpcXHRcXHRpZiAocmV0KSB7XFxuMTMwNzpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuMTMwODpcXHRcXHRcXHRjcHVocF9yZW1vdmVfc3RhdGUoc3RhdGUpO1xcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzEwOlxcdFxcdH1cXG4xMzExOlxcdFxcbjEzMTI6XFx0XFx0cmVnaXN0ZXJfc3lzY29yZShcXHUwMDI2dGR4X3N5c2NvcmUpO1xcbjEzMTM6XFx0XFxuMTMxNDpcXHRcXHR0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4xMzE1OlxcdFxcdHByX2luZm8oXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbjEzMTY6XFx0XFx0cmV0dXJuIDA7XFxuMTMxNzpcXHR9XFxuMTMxODpcXHRzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuMTMxOTpcXHRcXG4xMzIwOlxcdGludCB0ZHhfbW9kdWxlX3NodXRkb3duKHZvaWQpXFxuMTMyMTpcXHR7XFxuMTMyMjpcXHRcXHRzdHJ1Y3QgdGR4X3N5c19pbmZvX2hhbmRvZmYgaGFuZG9mZiA9IHt9O1xcbjEzMjM6XFx0XFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XFxuMTMyNDpcXHRcXHRpbnQgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjowOC4yOTYzMTczMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTQ4NzIwNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFREWCBIb3N0IFBsYXRmb3JtIEZlYXR1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gLiAgRmlyc3QgdGhpbmdzIGZpcnN0OiB3aGVyZSBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkZWZpbmVkKiBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpkZXRlY3RlZCogaW4gdGhlIGNvZGU/ICBUaW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcC4gIEdvdHRhIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHJldmVhbHMgYWJvdXQgdGhpcyBURFggaG9zdCBwbGF0Zm9ybSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI1MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MTIuMjQ1MDQwMDg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzcxNjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMDAtI2RlZmluZSBYODZfRkVBVFVSRV9DRFBfTDNcXHRcXHQoIDcqMzIrIDYpIC8qIFxcXCJjZHBfbDNcXFwiIENvZGUgYW5kIERhdGEgUHJpb3JpdGl6YXRpb24gTDMgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjIwMTojZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNXFx0KCA3KjMyKyA3KSAvKiBcXFwidGR4X2hvc3RfcGxhdGZvcm1cXFwiIFBsYXRmb3JtIHN1cHBvcnRzIGJlaW5nIGEgVERYIGhvc3QgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIwMi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0hXX1BTVEFURVxcdFxcdCggNyozMisgOCkgLyogXFxcImh3X3BzdGF0ZVxcXCIgQU1EIEhXLVBTdGF0ZSAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDY3PWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTctXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDk4OlxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTktXFx0XFx0cHJfZXJyKFxcXCJURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTI3NT1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI3OS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTI4MDpcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyODEtXFx0XFx0cHJfZXJyKFxcXCJURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQxNz1zdGF0aWMgYm9vbCBwYWRkcl9pc190ZHhfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHBoeXMpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQyMy1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQyNDpcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0MjUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODA9dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNjMxLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjMyOlxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNjMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjoxMi4zMDg3NjAxNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5MjAzMDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFREWCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgVERYIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgYHRkeF9pbml0YCB3aXRoaW4gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIEknbSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGxpbmVzIDE1ODAgdGhyb3VnaCAxNjQwLiBUaGlzIHJhbmdlIHR5cGljYWxseSBob2xkcyBjcml0aWNhbCBzZXR1cCBmdW5jdGlvbnMsIHBvdGVudGlhbCBzZWN1cml0eSBjaGVja3MsIG9yIGNvbmZpZ3VyYXRpb24gc3RlcHMgZGlyZWN0bHkgcmVsYXRlZCB0byBzZXR0aW5nIHVwIHRoZSBUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFREWCBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gcmVsYXRpb24gdG8gSW50ZWwncyBhcmNoaXRlY3R1cmUuIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBjb25jZXJuaW5nIGd1ZXN0IGNvbnRleHQgaW5pdGlhbGl6YXRpb24sIFREWCBtb2R1bGUgcmVnaXN0cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBoYW5kbGluZyBvciB2ZXJpZmljYXRpb24gcHJvY2Vzc2VzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIxMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjE0LjcwMDc5Mzg0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1ODA6XFx0dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcXG4xNTgxOlxcdHtcXG4xNTgyOlxcdFxcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XFxuMTU4MzpcXHRcXHRpbnQgZXJyO1xcbjE1ODQ6XFx0XFxuMTU4NTpcXHRcXHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFxcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFxcdTAwMjZucl90ZHhfa2V5aWRzKTtcXG4xNTg2OlxcdFxcdGlmIChlcnIpXFxuMTU4NzpcXHRcXHRcXHRyZXR1cm47XFxuMTU4ODpcXHRcXG4xNTg5OlxcdFxcdHByX2luZm8oXFxcIkJJT1MgZW5hYmxlZDogcHJpdmF0ZSBLZXlJRCByYW5nZSBbJXUsICV1KVxcXFxuXFxcIixcXG4xNTkwOlxcdFxcdFxcdFxcdHRkeF9rZXlpZF9zdGFydCwgdGR4X2tleWlkX3N0YXJ0ICsgbnJfdGR4X2tleWlkcyk7XFxuMTU5MTpcXHRcXG4xNTkyOlxcdFxcdC8qXFxuMTU5MzpcXHRcXHQgKiBUaGUgVERYIG1vZHVsZSBpdHNlbGYgcmVxdWlyZXMgb25lICdnbG9iYWwgS2V5SUQnIHRvIHByb3RlY3RcXG4xNTk0OlxcdFxcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJ3Mgb25seSBvbmUgVERYIEtleUlELCB0aGVyZSB3b24ndCBiZVxcbjE1OTU6XFx0XFx0ICogYW55IGxlZnQgZm9yIFREWCBndWVzdHMgdGh1cyB0aGVyZSdzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcXG4xNTk2OlxcdFxcdCAqIGF0IGFsbC5cXG4xNTk3OlxcdFxcdCAqL1xcbjE1OTg6XFx0XFx0aWYgKG5yX3RkeF9rZXlpZHMgXFx1MDAzYyAyKSB7XFxuMTU5OTpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxcXG5cXFwiKTtcXG4xNjAwOlxcdFxcdFxcdHJldHVybjtcXG4xNjAxOlxcdFxcdH1cXG4xNjAyOlxcdFxcbjE2MDM6XFx0XFx0LypcXG4xNjA0OlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXFxuMTYwNTpcXHRcXHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cXG4xNjA2OlxcdFxcdCAqL1xcbjE2MDc6XFx0XFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XFxuMTYwODpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogSGliZXJuYXRpb24gc3VwcG9ydCBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4xNjA5OlxcdFxcdFxcdHJldHVybjtcXG4xNjEwOlxcdFxcdH1cXG4xNjExOlxcdFxcbjE2MTI6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKFxcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcXG4xNjEzOlxcdFxcdGlmIChlcnIpIHtcXG4xNjE0OlxcdFxcdFxcdHByX2VycihcXFwiaW5pdGlhbGl6YXRpb24gZmFpbGVkOiByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoKSBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG4xNjE1OlxcdFxcdFxcdFxcdFxcdGVycik7XFxuMTYxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTYxNzpcXHRcXHR9XFxuMTYxODpcXHRcXG4xNjE5OlxcdCNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxcbjE2MjA6XFx0XFx0cHJfaW5mbyhcXFwiRGlzYWJsZSBBQ1BJIFMzLiBUdXJuIG9mZiBURFggaW4gdGhlIEJJT1MgdG8gdXNlIEFDUEkgUzMuXFxcXG5cXFwiKTtcXG4xNjIxOlxcdFxcdGFjcGlfc3VzcGVuZF9sb3dsZXZlbCA9IE5VTEw7XFxuMTYyMjpcXHQjZW5kaWZcXG4xNjIzOlxcdFxcbjE2MjQ6XFx0XFx0LypcXG4xNjI1OlxcdFxcdCAqIEp1c3QgdXNlIHRoZSBmaXJzdCBURFggS2V5SUQgYXMgdGhlICdnbG9iYWwgS2V5SUQnIGFuZFxcbjE2MjY6XFx0XFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXFxuMTYyNzpcXHRcXHQgKi9cXG4xNjI4OlxcdFxcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XFxuMTYyOTpcXHRcXHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgKyAxO1xcbjE2MzA6XFx0XFx0dGR4X25yX2d1ZXN0X2tleWlkcyA9IG5yX3RkeF9rZXlpZHMgLSAxO1xcbjE2MzE6XFx0XFxuMTYzMjpcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtcXG4xNjMzOlxcdFxcbjE2MzQ6XFx0XFx0Y2hlY2tfdGR4X2VycmF0dW0oKTtcXG4xNjM1OlxcdH1cXG4xNjM2OlxcdFxcbjE2Mzc6XFx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X2dldF9zeXNpbmZvKHZvaWQpXFxuMTYzODpcXHR7XFxuMTYzOTpcXHRcXHRpZiAoIXRkeF9tb2R1bGVfc3RhdGUuaW5pdGlhbGl6ZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjE0LjcwMDkzNDE0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU5ODU3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGluIHRoZSBURFggQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgaXMgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbiAoVERYKSBob3N0IGVudmlyb25tZW50IGFjdHVhbGx5IGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0/IFRoYXQncyB0aGUgY3J1Y2lhbCBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBnZXQgYmFjayBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9ucyBmcm9tIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYC4gTGV0IG1lIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjoxNy4zNjA3OTQ1NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzg4NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNDY3PWNvbnN0IGNoYXIgKnRkeF9kdW1wX21jZV9pbmZvKHN0cnVjdCBtY2UgKm0pXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ3Ny1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ3ODpzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDc5LVxcdFxcdFxcdFxcdFxcdCAgICB1MzIgKm5yX3RkeF9rZXlpZHMpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTU4MD12b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODQtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1ODU6XFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcXHUwMDI2dGR4X2tleWlkX3N0YXJ0LCBcXHUwMDI2bnJfdGR4X2tleWlkcyk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MTcuNDI0MTg4MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NDUzNDU2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHRkeC5jYCB0byBVbmRlcnN0YW5kIEtleSBQYXJ0aXRpb25pbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyBURFggaGFuZGxlcyBpdHMgcmVjb3JkIGtleSBJRCBwYXJ0aXRpb25pbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUgYW5kIFZNWCB2aXJ0dWFsaXphdGlvbi4gVGhlIHRhcmdldCBpcyB0aGUgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgVERYIG1vZHVsZSBmaWd1cmVzIG91dCBob3cgdG8gc2xpY2UgYW5kIGRpY2UgdGhlIHJlY29yZCBrZXkgSURzLlwiIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBhbmQgcGFydGl0aW9ucyB0aGVzZSBJRHMsIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2wgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgVERYIGVuc3VyZXMgdGhlIGlzb2xhdGlvbiBhbmQgaW50ZWdyaXR5IG9mIHByb3RlY3RlZCB2aXJ0dWFsIG1hY2hpbmVzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHVzZWQgaGVyZSwgYXMgdGhleSdsbCBsaWtlbHkgcmV2ZWFsIHRoZSBwYXJ0aXRpb25pbmcgc3RyYXRlZ3kgYW5kIGFueSBhc3NvY2lhdGVkIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyNiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjIwLjE2OTUzNjIyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NzU6XFx0XFx0cmV0dXJuIFxcXCJURFggcHJpdmF0ZSBtZW1vcnkgZXJyb3IuIFBvc3NpYmxlIGtlcm5lbCBidWcuXFxcIjtcXG4xNDc2OlxcdH1cXG4xNDc3OlxcdFxcbjE0Nzg6XFx0c3RhdGljIF9faW5pdCBpbnQgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyh1MzIgKnRkeF9rZXlpZF9zdGFydCxcXG4xNDc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgKm5yX3RkeF9rZXlpZHMpXFxuMTQ4MDpcXHR7XFxuMTQ4MTpcXHRcXHR1MzIgX25yX21rdG1lX2tleWlkcywgX3RkeF9rZXlpZF9zdGFydCwgX25yX3RkeF9rZXlpZHM7XFxuMTQ4MjpcXHRcXHRzdHJ1Y3QgbXNyIHZhbDtcXG4xNDgzOlxcdFxcdGludCByZXQ7XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdC8qXFxuMTQ4NjpcXHRcXHQgKiBJQTMyX01LVE1FX0tFWUlEX1BBUlRJT05JTkc6XFxuMTQ4NzpcXHRcXHQgKiAgIEJpdCBbMzE6MF06XFx0TnVtYmVyIG9mIE1LVE1FIEtleUlEcy5cXG4xNDg4OlxcdFxcdCAqICAgQml0IFs2MzozMl06XFx0TnVtYmVyIG9mIFREWCBwcml2YXRlIEtleUlEcy5cXG4xNDg5OlxcdFxcdCAqL1xcbjE0OTA6XFx0XFx0cmV0ID0gcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBcXHUwMDI2dmFsLnEpO1xcbjE0OTE6XFx0XFx0X25yX21rdG1lX2tleWlkcyA9IHZhbC5sO1xcbjE0OTI6XFx0XFx0X25yX3RkeF9rZXlpZHMgPSB2YWwuaDtcXG4xNDkzOlxcdFxcdGlmIChyZXQgfHwgIV9ucl90ZHhfa2V5aWRzKVxcbjE0OTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ5NTpcXHRcXG4xNDk2OlxcdFxcdC8qIFREWCBLZXlJRHMgc3RhcnQgYWZ0ZXIgdGhlIGxhc3QgTUtUTUUgS2V5SUQuICovXFxuMTQ5NzpcXHRcXHRfdGR4X2tleWlkX3N0YXJ0ID0gX25yX21rdG1lX2tleWlkcyArIDE7XFxuMTQ5ODpcXHRcXG4xNDk5OlxcdFxcdCp0ZHhfa2V5aWRfc3RhcnQgPSBfdGR4X2tleWlkX3N0YXJ0O1xcbjE1MDA6XFx0XFx0Km5yX3RkeF9rZXlpZHMgPSBfbnJfdGR4X2tleWlkcztcXG4xNTAxOlxcdFxcbjE1MDI6XFx0XFx0cmV0dXJuIDA7XFxuMTUwMzpcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdHN0YXRpYyBib29sIGlzX3RkeF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4xNTA2OlxcdHtcXG4xNTA3OlxcdFxcdHN0cnVjdCB0ZHhfbWVtYmxvY2sgKnRtYjtcXG4xNTA4OlxcdFxcbjE1MDk6XFx0XFx0LypcXG4xNTEwOlxcdFxcdCAqIFRoaXMgY2hlY2sgYXNzdW1lcyB0aGF0IHRoZSBzdGFydF9wZm5cXHUwMDNjLVxcdTAwM2VlbmRfcGZuIHJhbmdlIGRvZXMgbm90XFxuMTUxMTpcXHRcXHQgKiBjcm9zcyBtdWx0aXBsZSBAdGR4X21lbWxpc3QgZW50cmllcy4gIEEgc2luZ2xlIG1lbW9yeSBvbmxpbmVcXG4xNTEyOlxcdFxcdCAqIGV2ZW50IGFjcm9zcyBtdWx0aXBsZSBtZW1ibG9ja3MgKGZyb20gd2hpY2ggQHRkeF9tZW1saXN0XFxuMTUxMzpcXHRcXHQgKiBlbnRyaWVzIGFyZSBkZXJpdmVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbikgaXNcXG4xNTE0OlxcdFxcdCAqIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgYmVjYXVzZSBtZW1vcnkgb2ZmbGluZS9vbmxpbmUgaXMgZG9uZVxcbjE1MTU6XFx0XFx0ICogb24gZ3JhbnVsYXJpdHkgb2YgJ3N0cnVjdCBtZW1vcnlfYmxvY2snLCBhbmQgdGhlIGhvdHBsdWdnYWJsZVxcbjE1MTY6XFx0XFx0ICogbWVtb3J5IHJlZ2lvbiAob25lIG1lbWJsb2NrKSBtdXN0IGJlIG11bHRpcGxlIG9mIG1lbW9yeV9ibG9jay5cXG4xNTE3OlxcdFxcdCAqL1xcbjE1MTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bWIsIFxcdTAwMjZ0ZHhfbWVtbGlzdCwgbGlzdCkge1xcbjE1MTk6XFx0XFx0XFx0aWYgKHN0YXJ0X3BmbiBcXHUwMDNlPSB0bWItXFx1MDAzZXN0YXJ0X3BmbiBcXHUwMDI2XFx1MDAyNiBlbmRfcGZuIFxcdTAwM2M9IHRtYi1cXHUwMDNlZW5kX3BmbilcXG4xNTIwOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE1MjE6XFx0XFx0fVxcbjE1MjI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MjM6XFx0fVxcbjE1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjIwLjE2OTY3MzA0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTQ4NjAxNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggSG9zdCBTdXBwb3J0IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBcdTAwMjZ2YWwucSlgLiBUaGlzIHBvaW50cyBkaXJlY3RseSB0byBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBrZXkgSUQgcGFydGl0aW9uaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgaG9zdCBlbnZpcm9ubWVudC4gSW50ZWwgVERYIG1hbmRhdGVzIHNwZWNpZmljIGhhcmR3YXJlOiBTYXBwaGlyZSBSYXBpZHMgb3IgbmV3ZXIgWGVvbiwgd2l0aCBTRUFNUlIgYW5kIGEgVERYIG1vZHVsZSBsb2FkZWQgYnkgdGhlIGZpcm13YXJlLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgZW11bGF0ZSBhIFREWCBob3N0IHVzaW5nIFFFTVU/IEFuZCwgYSBmb2xsb3ctdXA6IGNhbiB3ZSBhY2hpZXZlIHRoaXMgd2l0aGluIGEgUUVNVSBpbnN0YW5jZSBvbiBhIEdDRSAoR29vZ2xlIENvbXB1dGUgRW5naW5lKSBWTT8gVGhlIGFuc3dlciBpcyBhIGNsZWFyIG5lZ2F0aXZlLiBTdGFuZGFyZCBRRU1VLCBhbmQgdGhlcmVmb3JlIEdDRSBWTXMsICpkb24ndCogZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIGNvbXBvbmVudHM6IFNFQU1SUiwgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB0aGUgVERYIG1vZHVsZSwgb3IgdGhlIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgIE1TUi5cblxuU28sIHdoZXJlIGlzIHRoZSBmb2N1cyBvZiB0aGlzIGNvZGUgbW9kaWZpY2F0aW9uPyBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgKmhvc3QqIFREWCBzdXBwb3J0LCBhcyBldmlkZW5jZWQgYnkgdGhlIGZpbGUgcGF0aHMgYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlLiBDYW4gdGhpcyBURFggaG9zdCBjb2RlLCBvciBLVk0gVERYIGhvc3QgY29kZSwgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIFREWCBoYXJkd2FyZT9cblxuTGV0J3MgZGVsdmUgZGVlcGVyIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBXaXRoaW4gdGhhdCwgSSBzZWUgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBhbmQgdGhlIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIFdoYXQgaXMgYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgIGV4YWN0bHk/IEV4YW1pbmluZyBgYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaGAsIGl0J3MgZGVmaW5lZCBhcyBgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKWAuIFRoaXMgc2lnbmlmaWVzIGFuIG9wdGlvbmFsIGNhbGwgdGhhdCByZXR1cm5zIDAgaWYgbm90IGltcGxlbWVudGVkLlxuXG5Ob3csIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBJIHNlZSB0aGF0IGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7YCBpcyBhc3NpZ25lZCAqb25seSBpZiogYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pYCBpcyB0cnVlLiBGb3Igbm9uLVREWCBlbnZpcm9ubWVudHMgKHN0YW5kYXJkIFZNWCBvciBTVk0pLCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGBOVUxMYCAoZHVlIHRvIGBPUFRJT05BTF9SRVQwYCksIGVuc3VyaW5nIGEgcmV0dXJuIG9mIDAuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uLlxuXG5TbywgdG8gc3VtbWFyaXplIGFuZCBjb25maXJtIG15IHN1c3BpY2lvbnMsIEkgbmVlZCB0byBrbm93IHdoZW4gYHZ0X3g4Nl9vcHNgIG9yIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGFyZSBjYWxsZWQuIFRoaXMgd291bGQgaWxsdW1pbmF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgVERYLXNwZWNpZmljIGhvc3QgY29kZSBpcyBpbml0aWFsaXplZCBhbmQgZXhlY3V0ZWQuIEkgbmVlZCB0byBzZWFyY2ggZm9yIHRob3NlIGlkZW50aWZpZXJzIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MjkuMzE4Mjc3NTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5OTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfaGFyZHdhcmVfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcXHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMzODg9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMzkyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzM5MzpzdGF0aWMgaW50IF9faW5pdCBfX3RkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM5NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NjYtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDY3OmludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUwMi1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MDM6XFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTA0LVxcdGlmIChyKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTktXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxMDppbnQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTEtdm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MjkuMzgyMDg0OTUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTY3MzY5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIFREWCBTZXR1cCBpbiBLVk0veDg2KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBhcmUgYmVpbmcgc2V0IHVwIGluIHRoZSBLVk0veDg2IGVudmlyb25tZW50LiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGNvcmUgVk1YIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIEkgcmVjYWxsIHRoYXQgdGhlIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGhlcmUuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbnMgZm9yIFREWCBhcmUgbGlrZWx5IG9jY3VycmluZy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbjsgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwcm9jZXNzb3IncyBURFgtcmVsYXRlZCBmZWF0dXJlcywgYW5kIGFueSBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcuIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBvbiBlbmFibGluZyBURFgsIGNvbmZpZ3VyaW5nIHRoZSBURFggbW9kdWxlLCBhbmQgbWF5YmUgZXZlbiBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGd1ZXN0IGVudmlyb25tZW50IHdpdGhpbiBhIFREWCBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTY3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MzEuOTk4ODI1MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ5MDpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzQ5MTpcXHRcXHR9XFxuMzQ5MjpcXHRcXG4zNDkzOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9PU1hTQVZFKSkge1xcbjM0OTQ6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0ZHg6IE9TWFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMzQ5NTpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzQ5NjpcXHRcXHR9XFxuMzQ5NzpcXHRcXG4zNDk4OlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcXG4zNDk5OlxcdFxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbjM1MDA6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM1MDE6XFx0XFx0fVxcbjM1MDI6XFx0XFxuMzUwMzpcXHRcXHRyID0gX190ZHhfaGFyZHdhcmVfc2V0dXAoKTtcXG4zNTA0OlxcdFxcdGlmIChyKSB7XFxuMzUwNTpcXHRcXHRcXHQvKlxcbjM1MDY6XFx0XFx0XFx0ICogRGlzYWJsZSBURFggb25seSBidXQgZG9uJ3QgZmFpbCB0byBsb2FkIG1vZHVsZSBpZiB0aGUgVERYXFxuMzUwNzpcXHRcXHRcXHQgKiBtb2R1bGUgY291bGQgbm90IGJlIGxvYWRlZC4gIE5vIG5lZWQgdG8gcHJpbnQgbWVzc2FnZSBzYXlpbmdcXG4zNTA4OlxcdFxcdFxcdCAqIFxcXCJtb2R1bGUgaXMgbm90IGxvYWRlZFxcXCIgYmVjYXVzZSBpdCB3YXMgcHJpbnRlZCB3aGVuIHRoZSBmaXJzdFxcbjM1MDk6XFx0XFx0XFx0ICogU0VBTUNBTEwgZmFpbGVkLiAgRG9uJ3QgYm90aGVyIHVud2luZGluZyB0aGUgUy1FUFQgaG9va3Mgb3JcXG4zNTEwOlxcdFxcdFxcdCAqIHZtX3NpemUsIGFzIGt2bV94ODZfb3BzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCAoYW5kIGFyZVxcbjM1MTE6XFx0XFx0XFx0ICogaW50ZW50aW9uYWxseSBub3QgZXhwb3J0ZWQpLiAgVGhlIFMtRVBUIGNvZGUgaXMgdW5yZWFjaGFibGUsXFxuMzUxMjpcXHRcXHRcXHQgKiBhbmQgYWxsb2NhdGluZyBhIGZldyBtb3JlIGJ5dGVzIHBlciBWTSBpbiBhIHNob3VsZC1iZS1yYXJlXFxuMzUxMzpcXHRcXHRcXHQgKiBmYWlsdXJlIHNjZW5hcmlvIGlzIGEgbm9uLWlzc3VlLlxcbjM1MTQ6XFx0XFx0XFx0ICovXFxuMzUxNTpcXHRcXHRcXHRpZiAociA9PSAtRU5PREVWKVxcbjM1MTY6XFx0XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM1MTc6XFx0XFxuMzUxODpcXHRcXHRcXHRyZXR1cm4gcjtcXG4zNTE5OlxcdFxcdH1cXG4zNTIwOlxcdFxcbjM1MjE6XFx0XFx0S1ZNX1NBTklUWV9DSEVDS19WTV9TVFJVQ1RfU0laRShrdm1fdGR4KTtcXG4zNTIyOlxcdFxcbjM1MjM6XFx0XFx0dnRfeDg2X29wcy52bV9zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCB2dF94ODZfb3BzLnZtX3NpemUsIHNpemVvZihzdHJ1Y3Qga3ZtX3RkeCkpO1xcbjM1MjQ6XFx0XFxuMzUyNTpcXHRcXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcXG4zNTI2OlxcdFxcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xcbjM1Mjc6XFx0XFxuMzUyODpcXHRcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXFxuMzUyOTpcXHRcXHRcXHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XFxuMzUzMDpcXHRcXG4zNTMxOlxcdFxcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xcbjM1MzI6XFx0XFx0cmV0dXJuIDA7XFxuMzUzMzpcXHRcXG4zNTM0OlxcdHN1Y2Nlc3NfZGlzYWJsZV90ZHg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjMxLjk5OTA0MzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgzMjk4ODEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVERYIFN1cHBvcnQgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkeW5hbWljIFBBTVQgKFBhZ2UgQXR0cmlidXRlIFRhYmxlKSBzdXBwb3J0IGluIFREWCBpcyBlbmFibGVkLiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQgaGluZ2VzIG9uIGB0ZHhfZW5hYmxlX2RwYW10YCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRgIGZlYXR1cmUgZmxhZyByZXBvcnRlZCBieSB0aGUgVERYIG1vZHVsZSBpdHNlbGYgdmlhIFNFQU1DQUxMcy4gIEFuZCwgb2YgY291cnNlLCBgdGR4X2VuYWJsZV9kcGFtdGAgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gY29uc2lkZXIuXG5cblRoZSBURFggaG9zdCBwbGF0Zm9ybSBhbHNvIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllczogcGh5c2ljYWwgQ1BVIHN1cHBvcnQgKGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWApLCB0aGUgTVNSIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgLCBwcm9wZXIgU0VBTVJSIHJhbmdlIHJlZ2lzdGVycyBjb25maWd1cmVkIGluIHRoZSBCSU9TLCBhbmQgZnVuY3Rpb25pbmcgU0VBTUNBTExzIHRvIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBpZGVudGlmaWVkIGluIHNlY3Rpb24gMiBvZiB0aGUgb3JpZ2luYWwgcHJvbXB0IGluY2x1ZGUgdGhlIEludGVsIFREWCBob3N0PyAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgKnllcyouXG5cbkxldCdzIHZlcmlmeSB0aGF0LiBDYW4gc3RhbmRhcmQgUUVNVSBlbXVsYXRlIGEgVERYIGhvc3Q/IE5vLiBRRU1VIGNhbiBvbmx5IGZ1bmN0aW9uIGFzIGEgVERYIGd1ZXN0IHVzaW5nIEtWTSBURFggcnVubmluZyBvbiBhIHJlYWwgVERYIGhvc3QuICBRRU1VIFRDRyBzaW1wbHkgbGFja3MgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0IOKAkyBubyBTRUFNUlIsIG5vIFNFQU1DQUxMIGZ1bmN0aW9uYWxpdHksIGFuZCBubyBNS1RNRSBwYXJ0aXRpb25pbmcgTVNSIGVtdWxhdGlvbi4gIEluIGFueSBzdGFuZGFyZCBRRU1VL0tWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW8gb3IgUUVNVSBUQ0csIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgd2lsbCBub3QgYmUgcHJlc2VudC4gVGhlIGByZG1zcnFfc2FmZShNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcpYCB3aWxsIGluZXZpdGFibHkgZmFpbCwgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuXG5cblRoZXJlZm9yZSwgdGhlIGB0ZHhfaW5pdCgpYCBmdW5jdGlvbiB3b3VsZCBmYWlsIGVhcmx5IG9uIHdpdGggYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGUga2V5IGJpdCBoZXJlIGlzIHRoZSBmb2xsb3dpbmcgY29kZSBibG9jazpcblxuYGBgY1xucmV0ID0gcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBcdTAwMjZ2YWwucSk7XG5pZiAocmV0IHx8ICFfbnJfdGR4X2tleWlkcylcbiAgICByZXR1cm4gLUVJTlZBTDtcbmBgYFxuXG5Db25zZXF1ZW50bHksIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGZsYWcgd2lsbCBuZXZlciBiZSBzZXQuIFRoZSBgdGR4X2VuYWJsZSgpYCBmdW5jdGlvbiB3aWxsIGZhaWwgaW1tZWRpYXRlbHksIGFuZCBgdGR4X2hhcmR3YXJlX3NldHVwKClgIHdpbGwgZmFpbCBhcyB3ZWxsLiBUaGlzIGxlYWRzIHRvIGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlYCByZW1haW5pbmcgTlVMTC4gQXMgYSByZXN1bHQsIGFsbCB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZHluYW1pYyBQQU1UIOKAkyBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAsIGV0Yy4g4oCTIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBFdmVuIGlmIHRoZXkgKndlcmUqIGNhbGxlZCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIHdvdWxkIHJldHVybiBgZmFsc2VgIGltbWVkaWF0ZWx5IGFueXdheSAocmV0dXJuaW5nIDAgaW1tZWRpYXRlbHkpLiBUaGUgVERYIEtWTSBtb2R1bGUsIHdpbGwgbmV2ZXIgZXZlbiBiZSBhYmxlIHRvIGNyZWF0ZSBhIFREWCBWTSB3aXRob3V0IGBlbmFibGVfdGR4YC5cblxuTm93LCBsZXQncyBpbnZlc3RpZ2F0ZSB0aGUgcmVjZW50IGNoYW5nZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIE15IHRoaW5raW5nIG5vdyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBwb2ludGVyLCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIHdoaWNoIGNhbiBwb2ludCB0byBhIGZ1bmN0aW9uIHRvIGhhbmRsZSBleHRlcm5hbCBjYWNoaW5nIG9wZXJhdGlvbnMuXG5cbmBgYGNcblx0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcblx0XHRpZiAocilcblx0XHRcdHJldHVybiByO1xuYGBgXG5cbkkgd2lsbCBuZWVkIHRvIGludmVzdGlnYXRlIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGNhbiBiZSBzZXQgYXMgYHRvcHVwX2V4dGVybmFsX2NhY2hlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwNjMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MzkuODMyMDMzMTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwNTpcXHRcXG4gNjA2OlxcdHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbiA2MDc6XFx0e1xcbiA2MDg6XFx0XFx0aW50IHI7XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdC8qIDEgcm1hcCwgMSBwYXJlbnQgUFRFIHBlciBsZXZlbCwgYW5kIHRoZSBwcmVmZXRjaGVkIHJtYXBzLiAqL1xcbiA2MTE6XFx0XFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9wdGVfbGlzdF9kZXNjX2NhY2hlLFxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIDEgKyBQVDY0X1JPT1RfTUFYX0xFVkVMICsgUFRFX1BSRUZFVENIX05VTSk7XFxuIDYxMzpcXHRcXHRpZiAocilcXG4gNjE0OlxcdFxcdFxcdHJldHVybiByO1xcbiA2MTU6XFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4gNjE2OlxcdFxcdFxcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tbXVfZXh0ZXJuYWxfc3B0X2NhY2hlLFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xcbiA2MTg6XFx0XFx0XFx0aWYgKHIpXFxuIDYxOTpcXHRcXHRcXHRcXHRyZXR1cm4gcjtcXG4gNjIwOlxcdFxcbiA2MjE6XFx0XFx0XFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuIDYyMjpcXHRcXHRcXHRpZiAocilcXG4gNjIzOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbiA2MjQ6XFx0XFx0fVxcbiA2MjU6XFx0XFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcXG4gNjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gNjI3OlxcdFxcdGlmIChyKVxcbiA2Mjg6XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDYyOTpcXHRcXHRpZiAobWF5YmVfaW5kaXJlY3QpIHtcXG4gNjMwOlxcdFxcdFxcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tbXVfc2hhZG93ZWRfaW5mb19jYWNoZSxcXG4gNjMxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gNjMyOlxcdFxcdFxcdGlmIChyKVxcbiA2MzM6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDYzNDpcXHRcXHR9XFxuIDYzNTpcXHRcXHRyZXR1cm4ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X3BhZ2VfaGVhZGVyX2NhY2hlLFxcbiA2MzY6XFx0XFx0XFx0XFx0XFx0XFx0ICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gNjM3OlxcdH1cXG4gNjM4OlxcdFxcbiA2Mzk6XFx0c3RhdGljIHZvaWQgbW11X2ZyZWVfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjM5LjgzMjQ3MTg1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTM0MDUyMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0ncyBNaXJyb3JlZCBURFAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIEtWTSBjb2RlLCBhbmQgdGhlIGZpcnN0IGxpbmUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsICprdm1faGFzX21pcnJvcmVkX3RkcCouLi4gd2hhdCdzIHRoYXQgYWN0dWFsbHkgKmRvKj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoZWNrIGJlZm9yZSBJIGNhbiB0cnVseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgbG9naWMuXG5cblRpbWUgdG8gcmVhY2ggZm9yIHRoZSB0cnVzdHkgZ3JlcCBjb21tYW5kLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgd2l0aGluIHRoZSBLVk0gc291cmNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVudCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgdG8gZGlzc2VjdCBob3cgdGhlIG1pcnJvcmVkIFREUCBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB3ZSBtaWdodCBiZSBjaGVja2luZyBmb3IgaXQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4NzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjQxLjk2NjUyNzAzNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NjMyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhc19taXJyb3JlZF90ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkxLVxcbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTQtXFx0XFx0cmV0dXJuIHI7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTU6XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNi1cXHRcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzk5MD1zdGF0aWMgaW50IG1tdV9hbGxvY19kaXJlY3Rfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk4LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTk6XFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQwMDAtXFx0XFx0ICAgICFWQUxJRF9QQUdFKG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTMwPXN0YXRpYyBpbmxpbmUgZW51bSBrdm1fdGRwX21tdV9yb290X3R5cGVzIGt2bV9nZm5fcmFuZ2VfZmlsdGVyX3RvX3Jvb3RfdHlwZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzQtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6MzU6XFx0aWYgKCFrdm1faGFzX21pcnJvcmVkX3RkcChrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTM2LVxcdFxcdHJldHVybiBLVk1fRElSRUNUX1JPT1RTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjo0Mi4wMTIyOTc3ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMDU3ODY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNaXJyb3JlZCBURFAgSXNzdWVzIGluIEtWTSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IFRyYW5zcGFyZW50IFBhZ2UgU2hhcmluZyAoVFBTKSBhbmQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBtYW5hZ2VtZW50IGFyZSBpbnRlcmFjdGluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbWlycm9yZWQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBlbnRyaWVzIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBleGlzdGVuY2UgYW5kIGRlZmluaXRpb24gb2YgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCBpbiBgYXJjaC94ODYva3ZtL21tdS5oYC4gVGhpcyBsaWtlbHkgZmxhZ3Mgd2hldGhlciB0aGUgY3VycmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbiBlbmFibGVzIG9yIHN1cHBvcnRzIG1pcnJvcmVkIHBhZ2UgdGFibGVzLCBwb3RlbnRpYWxseSBpbmZsdWVuY2luZyB0aGUgTU1VJ3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLCBhbmQgaW1wb3J0YW50bHksIHdoaWNoIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZWx5IGV4ZWN1dGVkIGluIHRoZSBzeXN0ZW0uIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNoZWNrIHdpbGwgYmUga2V5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlbiB0cmFjZSBkb3duIGFueSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NDQuMjEyODc5MjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbiAzOTM6XFx0e1xcbiAzOTQ6XFx0XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbiAzOTU6XFx0fVxcbiAzOTY6XFx0XFxuIDM5NzpcXHRzdGF0aWMgaW5saW5lIGdmbl90IGt2bV9nZm5fZGlyZWN0X2JpdHMoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbiAzOTg6XFx0e1xcbiAzOTk6XFx0XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHM7XFxuIDQwMDpcXHR9XFxuIDQwMTpcXHRcXG4gNDAyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faXNfYWRkcl9kaXJlY3Qoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpXFxuIDQwMzpcXHR7XFxuIDQwNDpcXHRcXHRncGFfdCBncGFfZGlyZWN0X2JpdHMgPSBnZm5fdG9fZ3BhKGt2bV9nZm5fZGlyZWN0X2JpdHMoa3ZtKSk7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdHJldHVybiAhZ3BhX2RpcmVjdF9iaXRzIHx8IChncGEgXFx1MDAyNiBncGFfZGlyZWN0X2JpdHMpO1xcbiA0MDc6XFx0fVxcbiA0MDg6XFx0XFxuIDQwOTpcXHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX2dmbl9hbGlhcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NDQuMjEyOTYzMzU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODk2NDM1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktWTSBURFggVk0gQ3JlYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKWAgZnVuY3Rpb24gaXMgYSBzaW1wbGUgY2hlY2s7IGl0IGVzc2VudGlhbGx5IHRlbGxzIHVzIGlmIGEgS1ZNIGluc3RhbmNlIGlzIGEgVERYIFZNIGJ5IGNvbXBhcmluZyBpdHMgYXJjaGl0ZWN0dXJlJ3MgVk0gdHlwZSB3aXRoIGBLVk1fWDg2X1REWF9WTWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqaG93KiBhIFZNIGlzIGFjdHVhbGx5IGFzc2lnbmVkIHRoZSBgS1ZNX1g4Nl9URFhfVk1gIHR5cGUgZHVyaW5nIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBUaGUga2V5IGlzIHRvIHRyYWNlIHdoZXJlIGBLVk1fWDg2X1REWF9WTWAgaXMgYmVpbmcgdXRpbGl6ZWQgZHVyaW5nIHRoZSBWTSdzIGluc3RhbnRpYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgS1ZNIFZNIGNyZWF0aW9uIGZsb3cgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byB0aGlzIHNwZWNpZmljIHR5cGUgYmVpbmcgYXNzaWduZWQuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBkZXRlcm1pbmUgdGhlIGV4YWN0IHBhdGggYnkgdHJhY2luZyB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjQ2LjUwMjYxMDE4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg3MTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1REWF9WTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xcbmFyY2gveDg2L2t2bS9tbXUuaDozOTQ6XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTU4PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTYyOlxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjMtXFx0XFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xODk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5NC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxOTU6XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02MS17XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MjpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzgtXFx0XFx0XFx0XFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3OTpcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDgwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NDYuNTUxNDg1Mzg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMjEwMDAwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gS1ZNL1ZNWCBDb3JlIExvZ2ljKipcblxuT2theSwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIHg4NiBLVk0vVk1YIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDcwLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoLi4uIHdlbGwsIGl0IGRlcGVuZHMgb24gdGhlIGNvbnRleHQsIGJ1dCBpdCBjb3VsZCByZWxhdGUgdG8gVk0gZW50cnkvZXhpdCBoYW5kbGluZywgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gc2V0dXAsIG9yIHBvdGVudGlhbGx5IGZhdWx0IG1hbmFnZW1lbnQgc3BlY2lmaWMgdG8gSW50ZWwncyBWVC14IGV4dGVuc2lvbnMuIEtub3dpbmcgaG93IGRlZXBseSBpbnRlZ3JhdGVkIGFuZCBhcmNoaXRlY3R1cmFsbHkgaW1wb3J0YW50IFZNWCBpcywgSSBiZXQgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGNydWNpYWwuIEZyb20gdGhlcmUgSSBjYW4gZm9sbG93IHRoZSBjYWxsIHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG15IHNwZWNpZmljIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NTEuODcyNDg3NjUxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0dW5zaWduZWQgdmNwdV9zaXplLCB2Y3B1X2FsaWduO1xcbjEwNjE6XFx0XFx0aW50IHI7XFxuMTA2MjpcXHRcXG4xMDYzOlxcdFxcdHIgPSB2bXhfaW5pdCgpO1xcbjEwNjQ6XFx0XFx0aWYgKHIpXFxuMTA2NTpcXHRcXHRcXHRyZXR1cm4gcjtcXG4xMDY2OlxcdFxcbjEwNjc6XFx0XFx0LypcXG4xMDY4OlxcdFxcdCAqIFREWCBhbmQgVk1YIGhhdmUgZGlmZmVyZW50IHZDUFUgc3RydWN0dXJlcy4gIENhbGN1bGF0ZSB0aGVcXG4xMDY5OlxcdFxcdCAqIG1heGltdW0gc2l6ZS9hbGlnbiBzbyB0aGF0IGt2bV9pbml0KCkgY2FuIHVzZSB0aGUgbGFyZ2VyXFxuMTA3MDpcXHRcXHQgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBrbWVtX3ZjcHVfY2FjaGUuXFxuMTA3MTpcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdHZjcHVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmNwdV92bXgpO1xcbjEwNzM6XFx0XFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuMTA3NDpcXHRcXHRpZiAoZW5hYmxlX3RkeCkge1xcbjEwNzU6XFx0XFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4xMDc2OlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgdmNwdV90ZHgpKTtcXG4xMDc3OlxcdFxcdFxcdHZjcHVfYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9hbGlnbixcXG4xMDc4OlxcdFxcdFxcdFxcdFxcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xcbjEwNzk6XFx0XFx0XFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XFxuMTA4MDpcXHRcXHR9XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdC8qXFxuMTA4MzpcXHRcXHQgKiBDb21tb24gS1ZNIGluaXRpYWxpemF0aW9uIF9tdXN0XyBjb21lIGxhc3QsIGFmdGVyIHRoaXMsIC9kZXYva3ZtIGlzXFxuMTA4NDpcXHRcXHQgKiBleHBvc2VkIHRvIHVzZXJzcGFjZSFcXG4xMDg1OlxcdFxcdCAqL1xcbjEwODY6XFx0XFx0ciA9IGt2bV9pbml0KHZjcHVfc2l6ZSwgdmNwdV9hbGlnbiwgVEhJU19NT0RVTEUpO1xcbjEwODc6XFx0XFx0aWYgKHIpXFxuMTA4ODpcXHRcXHRcXHRnb3RvIGVycl9rdm1faW5pdDtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0cmV0dXJuIDA7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdGVycl9rdm1faW5pdDpcXG4xMDkzOlxcdFxcdHZteF9leGl0KCk7XFxuMTA5NDpcXHRcXHRyZXR1cm4gcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NTEuODcyNTY5NDcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzI2NDAzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBURFggSW1wbGVtZW50YXRpb24gaW4gS1ZNKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBURFggaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gS1ZNJ3MgVk1YIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoZW5hYmxlX3RkeClgIGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIENsZWFybHksIHRoaXMgaXMgYSBwaXZvdGFsIGRlY2lzaW9uIHBvaW50IHJlbGF0ZWQgdG8gd2hldGhlciBvciBub3QgVERYIGZlYXR1cmVzIGFyZSBhY3RpdmF0ZWQgZHVyaW5nIFZNIGV4ZWN1dGlvbi5cblxuTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYGVuYWJsZV90ZHhgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGJlaW5nIHNldC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFREWCBpcyBlbmFibGVkIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBpZGVhbGx5IHN0YXJ0aW5nIGZyb20gdGhpcyBjaGVjaywgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBob3cgdGhlIFREWCBlbmFibGluZyBkZWNpc2lvbiBpcyB1bHRpbWF0ZWx5IG1hZGUuIEtub3dpbmcgdGhlIHNvdXJjZSBvZiBgZW5hYmxlX3RkeGAgd2lsbCBwcm92aWRlIGluc2lnaHRzIGludG8gY29uZmlndXJhdGlvbiBvcHRpb25zLCBoYXJkd2FyZSBjaGVja3MsIG9yIG90aGVyIHJ1bnRpbWUgY29uZGl0aW9ucyB0aGF0IGluZmx1ZW5jZSBURFjigJlzIG9wZXJhdGlvbmFsIHN0YXRlLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGVpdGhlciBhIGNvbmZpZ3VyYXRpb24gZmxhZyBvciBhIGRldGVybWluYXRpb24gbWFkZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZCBzZWN1cml0eSBwb2xpY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjU0LjcwNTIxMjYyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVfdGR4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNj1zdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTgtXFx0LyogTm90ZSwgVERYICphbmQqIFZNWCBuZWVkIHRvIGJlIGRpc2FibGVkIGlmIFREWCBpcyBlbmFibGVkLiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE5OlxcdGlmIChlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIwLVxcdFxcdHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQ9c3RhdGljIF9faW5pdCBpbnQgdnRfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyOlxcdHJldHVybiBlbmFibGVfdGR4ID8gdGR4X2hhcmR3YXJlX3NldHVwKCkgOiAwO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1PXN0YXRpYyB2b2lkIHZ0X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Mzc6XFx0aWYgKGVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzgtXFx0XFx0dGR4X2hhcmR3YXJlX3Vuc2V0dXAoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNTg9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3My1cXHR2Y3B1X2FsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHZjcHVfdm14KTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc0OlxcdGlmIChlbmFibGVfdGR4KSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3NS1cXHRcXHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01NS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU2OmJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo1Nzptb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDY3PWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NzQtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDc1OlxcdGlmICghZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NzYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1MzQtc3VjY2Vzc19kaXNhYmxlX3RkeDpcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MzU6XFx0ZW5hYmxlX3RkeCA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM2LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaD0xMT12b2lkIHRkeF9oYXJkd2FyZV91bnNldHVwKHZvaWQpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTItXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxMzpleHRlcm4gYm9vbCBlbmFibGVfdGR4O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTE4Nz1URFhfQlVJTERfVERWUFNfQUNDRVNTT1JTKDY0LCBTVEFURV9OT05fQVJDSCwgc3RhdGVfbm9uX2FyY2gpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODktI2Vsc2VcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE5MDojZGVmaW5lIGVuYWJsZV90ZHhcXHQwXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xOTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjU0Ljc1MDQxMTkzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDg3MTEwNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIENvZGUgUmVhY2hhYmlsaXR5IGZvciBURFggRHluYW1pYyBQQU1UIFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgRHluYW1pYyBQQU1UIHN1cHBvcnQgZm9yIEludGVsIFREWCwgZm9jdXNpbmcgb24gaXRzIHJlYWNoYWJpbGl0eSBpbiBhIGZ1enppbmcgY29udGV4dC4gRnJvbSBleGFtaW5pbmcgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgIGFuZCByZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSBsaW5lcyAzNTM1LCBhIGNsZWFyIHBpY3R1cmUgZW1lcmdlcy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGlzOiB3aXRob3V0IHNwZWNpZmljIEludGVsIGhhcmR3YXJlIOKAkyBhIHBoeXNpY2FsIFREWC1lbmFibGVkIGhvc3Qg4oCTIHRoaXMgY29kZSBwYXRoICpuZXZlciogZ2V0cyBoaXQuXG5cblRoZSBgdGR4X2hhcmR3YXJlX3NldHVwKClgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCBjaGVja3MgZm9yIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAuIElmIHRoYXQgZmxhZyBpc24ndCBzZXQsIHdoaWNoIGl0IHdvbid0IGJlIG9uIHN0YW5kYXJkIGhhcmR3YXJlIG9yIFFFTVUsIHRoZSBzZXR1cCBmYWlscyBhbmQgYGVuYWJsZV90ZHhgIGlzIHNldCB0byAwLiBUaGlzLCBpbiB0dXJuLCBwcmV2ZW50cyBgS1ZNX1g4Nl9URFhfVk1gIGZyb20gYmVpbmcgc3VwcG9ydGVkLiBDb25zZXF1ZW50bHksIGNyZWF0aW5nIGEgVERYIFZNIHRocm91Z2ggYGlvY3RsKEtWTV9DUkVBVEVfVk1fVFlQRSlgIHdpbGwgZmFpbCB3aXRoIGAtRUlOVkFMYCwgbWFraW5nIGBrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSlgIGFsd2F5cyBmYWxzZS5cblxuVGhpcyBjcnVjaWFsIGBrdm1faGFzX21pcnJvcmVkX3RkcCgpYCBjaGVjayBpcyB0aGUgZ2F0ZWtlZXBlci4gVGhlIE1NVSBicmFuY2ggY29udGFpbmluZyB0aGUgY2FsbHMgdG8gYGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlYCBhbmQgYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgIGluIGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlc2AgaXMgY29tcGxldGVseSBieXBhc3NlZC4gIEZ1cnRoZXJtb3JlLCBhbGwgdGhlIG5ldyBmdW5jdGlvbnMgdGllZCB0byBkeW5hbWljIFBBTVQgKGUuZy4sIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgdGhlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgZnVuY3Rpb25zLCBldGMuKSBhcmUgdW5yZWFjaGFibGUuIFRoZSBrZXJuZWwgcGFyYW1ldGVycyBmb3IgZHluYW1pYyBQQU1UIGFyZSBvbmx5IHBhcnNlZCBpZiBURFggaXMgZW5hYmxlZCBvbiB0aGUgaG9zdCBwbGF0Zm9ybS5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgYm9vdC10aW1lIGZ1bmN0aW9ucyBtb2RpZmllZCwgYW5kIHRoZXkgYWxsIGZhbGwgaW50byB0aGUgc2FtZSB0cmFwLiBGdW5jdGlvbnMgbGlrZSBgdGRtcl9nZXRfcGFtdF9zemAgYW5kIGBpbml0X3RkeF9tb2R1bGUoKWAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmbGFnLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRob3NlIEtWTSBmdW5jdGlvbnMgbGlrZSBgdGR4X3ZjcHVfY3JlYXRlYCBhbmQgYHRkeF9oYXJkd2FyZV9zZXR1cGAuICBUaGVzZSBhbGwgb3BlcmF0ZSB3aXRoaW4gdGhlIFREWCBob3N0IGNvbnRleHQgYW5kIEtWTSBURFggVk0gc2V0dXAuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgZ3VpZGVsaW5lcy4gVGhpcyBjb2RlIHVuZXF1aXZvY2FsbHkgZml0cy4gSXQgcmVxdWlyZXMgc3BlY2lmaWMsIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSDigJMgYW4gSW50ZWwgVERYIGhvc3QgcGxhdGZvcm0gd2l0aCB0aGUgcHJvcGVyIEJJT1Mgc3VwcG9ydCBhbmQgZmlybXdhcmUgbW9kdWxlLiBUaGlzIGdvZXMgYmV5b25kIHRoZSBjYXBhYmlsaXRpZXMgb2Ygc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIEl0J3Mgbm90IGp1c3QgdGhhdCBhIGZlYXR1cmUgaXNuJ3QgKmVuYWJsZWQqLCBidXQgdGhhdCB0aGUgZm91bmRhdGlvbmFsICpoYXJkd2FyZSogaXNuJ3QgcHJlc2VudC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYSBoYXJkd2FyZSBlbnZpcm9ubWVudCB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgaW4gdGhlIHR5cGljYWwgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2NDEsIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzowNC4yMzc1MjY0NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgKERQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IGluIHRoZSBrZXJuZWwgYW5kIEtWTS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZW50aXJlbHkgY29uZmluZWQgdG8gSW50ZWwgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gYW5kIEtWTSBURFggZ3Vlc3QgbWFuYWdlbWVudCAodW5kZXIgYXJjaC94ODYvdmlydC92bXgvdGR4IGFuZCBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jLCBwbHVzIG1pcnJvcmVkIFREUCBoYW5kbGluZyBndWFyZGVkIGJ5IEtWTV9YODZfVERYX1ZNKS4gVGhlc2UgcGF0aHMgc3RyaWN0bHkgcmVxdWlyZSBwaHlzaWNhbCBJbnRlbCBDUFVzIHdpdGggVERYIGhvc3QgcGxhdGZvcm0gc3VwcG9ydCAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0sIE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgU0VBTVJSLCBhbmQgdGhlIEludGVsIFREWCBmaXJtd2FyZSBtb2R1bGUpLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjA0LjIzNzU1Mzc2MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowbf72d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 01:49:14 +0000 UTC FinishedAt: 2026-09-04 02:07:06 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjNhNWVhYmE5MDNjMjEyNGQ4ZmM2YWQ2NzU1Mjg1Y2U4ZGZkNWNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNTo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA2ODY0N2ZmNGJkZDI0Li5lNzU1OGI4MzgyYWNmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtNzU4Miw2ICYjNDM7NzU4MiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFxuIFx0dGRmeD1cdFx0W0hXLERSTV1cbiBcbiYjNDM7XHR0ZHhfZHBhbXQ9XG4mIzQzO1x0XHRcdFtYODZdIENvbnRyb2xzIHdoZXRoZXIgVERYIHdpbGwgdXNlIER5bmFtaWMgUEFNVFxuJiM0MztcdFx0XHR0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuXG4mIzQzO1xuJiM0MztcdFx0XHRWYWxpZCBwYXJhbWV0ZXJzOiBcJiMzNDtvblwmIzM0OywgXCYjMzQ7b2ZmXCYjMzQ7XG4mIzQzO1x0XHRcdERlZmF1bHQ6IFwmIzM0O29mZlwmIzM0O1xuJiM0MztcbiYjNDM7XHRcdFx0Rm9yIGRldGFpbHMgc2VlOlxuJiM0MztcdFx0XHREb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbiYjNDM7XG4gXHR0ZXN0X3N1c3BlbmQ9XHRbU1VTUEVORF1cbiBcdFx0XHRGb3JtYXQ6IHsgXCYjMzQ7bWVtXCYjMzQ7IHwgXCYjMzQ7c3RhbmRieVwmIzM0OyB8IFwmIzM0O2ZyZWV6ZVwmIzM0OyB9WyxOXVxuIFx0XHRcdFNwZWNpZnkgXCYjMzQ7bWVtXCYjMzQ7IChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFwmIzM0O3N0YW5kYnlcJiMzNDsgKGZvclxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuaW5kZXggMzMwMzQ5OWFkNGM2Zi4uZGUwOTk2N2NlOGQ4YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5AQCAtMjAwLDYgJiM0MzsyMDAsMzMgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlXG4gY2hhbmdlcyBhZnRlciBhbiB1cGRhdGUuIEJ5IGNvbnRyYXN0LCBURUVfVENCX1NWTiByZWZsZWN0cyB0aGUgVENCIGF0IFREXG4gbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC5cbiBcbiYjNDM7RHluYW1pYyBQQU1UXG4mIzQzOy0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7VGhlIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1ldGFkYXRhIGluIHdoaWNoIHRoZSBURFhcbiYjNDM7bW9kdWxlIGtlZXBzIGRhdGEgYWJvdXQgZWFjaCBwaHlzaWNhbCBwYWdlICh0aGluayBzdHJ1Y3QgcGFnZSkuIFNwYWNlXG4mIzQzO2ZvciBpdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIFZNTSwgY29uc3VtZXMgdXAgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW1cbiYjNDM7bWVtb3J5IGFuZCBuZWVkcyB0byBiZSBzdXBwbGllZCB0byB0aGUgVERYIG1vZHVsZSB3aGVuIHRoZSBURFggbW9kdWxlIGlzXG4mIzQzO2ZpcnN0IGxvYWRlZC5cbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBhbiBhZGQtb24gZmVhdHVyZSB0aGF0IGFsbG93cyBhIFZNTSB0byBkeW5hbWljYWxseVxuJiM0MzthbGxvY2F0ZSB0aGUgcGFydCBvZiB0aGUgUEFNVCB3aGljaCB0cmFja3MgNEtCIHBhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlXG4mIzQzO2Ftb3VudCBvZiBtZW1vcnkgdGhhdCBURFggY29uc3VtZXMgd2hpbGUgVERzIGFyZSBub3QgaW4gdXNlLlxuJiM0MztcbiYjNDM7V2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbiYjNDM7XG4mIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byBcJiMzNDtvblwmIzM0Oy4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4mIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuJiM0MztpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4mIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuJiM0MztEeW5hbWljIFBBTVQuXG4mIzQzO1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCBlMjEzYzlhZTNlMzAxLi41YzM1OGM0MGVhZThhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk5LDYgJiM0Mzs5OSw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApXG4gS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA2ODNiYjhiZjQzYTk0Li41N2QzNzQ5MWM3YzA5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE2NDQsNiAmIzQzOzE2NDQsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xuIFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcbiBcbiYjNDM7XHRpbnQgKCp0b3B1cF9leHRlcm5hbF9jYWNoZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpO1xuIFxuIFx0Ym9vbCAoKmhhc193YmludmRfZXhpdCkodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uZTE4NmRmZTViZjg4NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuJiM0MzsjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiAmIzQzOzExOSwzNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuJiM0MztcbiYjNDM7LyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRFBBTVQgcGFnZXMgb3V0c2lkZSBvZiBzcGlubG9ja3MuICovXG4mIzQzO3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XG4mIzQzO1x0aW50IGNudDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW5pdF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuJiM0MztcdGNhY2hlLVx1MDAzZWNudCA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbik7XG4mIzQzO1xuIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7XG4gdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpO1xuIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTtcbiBcbiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gXG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljLi44YTNjYzFhMmE0MWUyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbkBAIC0xLDcgJiM0MzsxLDcgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cbi0jaWZuZGVmIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4tI2RlZmluZSBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuJiM0MzsvKiBURFggZ2xvYmFsIG1ldGFkYXRhIHN0cnVjdHVyZXMuICovXG4mIzQzOyNpZm5kZWYgX1g4Nl9WSVJUX1REWF9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiYjNDM7I2RlZmluZSBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xuIFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XG4gXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRFBBTVQgaXMgc3VwcG9ydGVkICovXG4mIzQzO1x0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiB9O1xuIFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjI4MTY4NjFjYTI3OWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjE3LDYgJiM0Mzs2MTcsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpXG4gXHRcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiBcdFx0aWYgKHIpXG4gXHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4gXHR9XG4gXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcbiBcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uN2M3OWY0ZDRiZjk5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zNjIsNyAmIzQzOzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKVxuIFx0aWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19mcmVlX3BhZ2UoY3RybF9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UoY3RybF9wYWdlKTtcbiB9XG4gXG4gc3RydWN0IHRkeF9mbHVzaF92cF9hcmcge1xuQEAgLTU4OSw3ICYjNDM7NTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xuIFxuLVx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XG4gfVxuIFxuQEAgLTY4MSw2ICYjNDM7NjgxLDggQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWlycWNoaXBfc3BsaXQodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHR0ZHhfaW5pdF9wYW10X2NhY2hlKFx1MDAyNnRkeC1cdTAwM2VwYW10X2NhY2hlKTtcbiYjNDM7XG4gXHRmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0ZHgtXHUwMDNldnQucGlfd2FrZXVwX2xpc3QpO1xuQEAgLTg2Niw2ICYjNDM7ODY4LDggQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0dGR4X2ZyZWVfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ICE9IC0xKSB7XG4gXHRcdEtWTV9CVUdfT04odGR4LVx1MDAzZXN0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtXHUwMDNla3ZtKTtcbiBcdFx0dGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTtcbkBAIC0xNjE4LDYgJiM0MzsxNjIyLDE3IEBAIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxuIFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcbiYjNDM7XHQgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdG1pbl9ucl9zcHRzICYjNDM7PSAtMSAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0ICAgIGt2bV9wZm5fdCBwZm4pXG4ge1xuQEAgLTE2NzYsMTYgJiM0MzsxNjkxLDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRcdFx0XHQgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdGdwYV90IGdwYSA9IGdmbl90b19ncGEoZ2ZuKTtcbiBcdHU2NCBlcnIsIGVudHJ5LCBsZXZlbF9zdGF0ZTtcbiBcdHN0cnVjdCBwYWdlICpzZXB0X3B0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcbiBcdGlmICghc2VwdF9wdClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCBcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRlcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKFx1MDAyNnRvX2t2bV90ZHgoa3ZtKS1cdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCxcbiBcdFx0XHQgICAgICAgXHUwMDI2ZW50cnksIFx1MDAyNmxldmVsX3N0YXRlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcbiYjNDM7XG4gXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbkBAIC0xNjk4LDggJiM0MzsxNzI1LDEzIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0XHQgIHU2NCBuZXdfc3B0ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xuIFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0LyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqL1xuIFx0aWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpXG5AQCAtMTcwNyw2ICYjNDM7MTczOSwxMCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxuIFxuIFx0V0FSTl9PTl9PTkNFKChuZXdfc3B0ZSBcdTAwMjYgVk1YX0VQVF9SV1hfTUFTSykgIT0gVk1YX0VQVF9SV1hfTUFTSyk7XG4gXG4mIzQzO1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG4gXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuQEAgLTE3MTksMTAgJiM0MzsxNzU1LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXG4gXHQgKiBJZiB0aGUgVEQgaXNuJiMzOTt0IGZpbmFsaXplZC9ydW5uYWJsZSwgdGhlbiB1c2Vyc3BhY2UgaXMgaW5pdGlhbGl6aW5nXG4gXHQgKiB0aGUgVk0gaW1hZ2UgdmlhIEtWTV9URFhfSU5JVF9NRU1fUkVHSU9OOyBBREQgdGhlIHBhZ2UgdG8gdGhlIFRELlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoa3ZtX3RkeC1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbiYjNDM7XHRpZiAobGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuJiM0MztcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHR0ZHhfcGFtdF9wdXQocGZuKTtcbiBcbi1cdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTE4MTksNiAmIzQzOzE4NjAsNyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3JlbW92ZV9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKFBGTl9QSFlTKHBmbiksIFBBR0VfU0laRSk7XG4mIzQzO1x0dGR4X3BhbXRfcHV0KHBmbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTg2Miw2ICYjNDM7MTkwNCw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLFxuICAqL1xuIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbiB7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnNlcHRfcHQgPSB2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogS1ZNIGRvZXNuJiMzOTt0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlXG4gXHQgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmVcbkBAIC0xODc1LDE1ICYjNDM7MTkxOSwxNSBAQCBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4gXHQgKiB0aGUgcGFnZSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlIGVuY3J5cHRlZCBwYWdlLlxuIFx0ICovXG4gXHRpZiAoS1ZNX0JVR19PTihpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgoa3ZtKSksIGt2bSkgfHxcbi1cdCAgICB0ZHhfcmVjbGFpbV9wYWdlKHZpcnRfdG9fcGFnZShzcC1cdTAwM2VleHRlcm5hbF9zcHQpKSlcbiYjNDM7XHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKlxuLVx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3Nhcnlcbi1cdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXG4tXHQgKiByZWFkZXJzLlxuJiM0MztcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24mIzM5O3Qgc3VwcG9ydFxuJiM0MztcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXG4mIzQzO1x0ICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy5cbiBcdCAqL1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHNlcHRfcHQpO1xuIG91dDpcbiBcdHNwLVx1MDAzZWV4dGVybmFsX3NwdCA9IE5VTEw7XG4gfVxuQEAgLTI0NTYsNyAmIzQzOzI1MDAsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXG4gXHRyZXQgPSAtRU5PTUVNO1xuIFxuLVx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0dGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXRkcl9wYWdlKVxuIFx0XHRnb3RvIGZyZWVfaGtpZDtcbiBcbkBAIC0yNDY5LDcgJiM0MzsyNTEzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFx0XHRnb3RvIGZyZWVfdGRyO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdFx0dGRjc19wYWdlc1tpXSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdFx0aWYgKCF0ZGNzX3BhZ2VzW2ldKVxuIFx0XHRcdGdvdG8gZnJlZV90ZGNzO1xuIFx0fVxuQEAgLTI1ODcsMTAgJiM0MzsyNjMxLDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIHRlYXJkb3duOlxuIFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICYjMzk7aSYjMzk7ICovXG4gXHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSkge1xuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0XHRcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xuLVx0XHR9XG4mIzQzO1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4mIzQzO1x0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGlmICgha3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzKVxuIFx0XHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbkBAIC0yNjA1LDE2ICYjNDM7MjY0NywxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXHRmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTtcbiBcbiBmcmVlX3RkY3M6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0fVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4gXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHI6XG4tXHRpZiAodGRyX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkcl9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRyX3BhZ2UpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XG4gXG4gZnJlZV9oa2lkOlxuQEAgLTI5NDgsNyAmIzQzOzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGVycjtcbiBcbi1cdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSA9IHBhZ2U7XG5AQCAtMjk2OCw3ICYjNDM7MzAwNyw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghcGFnZSkge1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBmcmVlX3RkY3g7XG5AQCAtMjk5MCw3ICYjNDM7MzAyOSw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdFx0XHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuJiM0MztcdFx0XHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUlPO1xuQEAgLTMwMTgsMTYgJiM0MzszMDU3LDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcbiBmcmVlX3RkY3g6XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4mIzQzO1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRrZnJlZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyk7XG4gXHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHZwcjpcbi1cdGlmICh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSk7XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSA9IE5VTEw7XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGEgPSAwO1xuIFxuQEAgLTM0ODcsNiAmIzQzOzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcbiBcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xuIFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XG4mIzQzO1xuJiM0MztcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcbiYjNDM7XG4gXHR2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG5pbmRleCBhYzgzMjNhNjhiMTYzLi5mZDM2OGUzZWUwNjBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIHN0cnVjdCB2Y3B1X3RkeCB7XG4gXG4gXHR1NjQgbWFwX2dwYV9uZXh0O1xuIFx0dTY0IG1hcF9ncGFfZW5kO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTtcbiB9O1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggMWI5ZmY3NDlkZDhlMC4uMmFjYWI2ZTVmNWY4NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjb3JlX29wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbXNyLWluZGV4LmhcdTAwM2VcbkBAIC00Niw2ICYjNDM7NDcsMTEgQEBcbiAjaW5jbHVkZSBcJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiBcbiYjNDM7LyogTnVtYmVyIG9mIERQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cbiYjNDM7I2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMlxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfbW9kdWxlX3N0YXRlIHtcbiBcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRib29sIHN5c2luaXRfZG9uZTtcbkBAIC02Myw2ICYjNDM7NjksMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XG4gXG4gc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEUEFNVCwgdGhlIGtlcm5lbCBtYWludGFpbnMgYSByZWZlcmVuY2UgY291bnRlclxuJiM0MzsgKiBmb3IgZXZlcnkgMk1CIHJhbmdlLiBUaGUgY291bnRlciBpbmRpY2F0ZXMgaG93IG1hbnkgdXNlcnMgdGhlcmUgYXJlIGZvclxuJiM0MzsgKiB0aGUgRFBBTVQgYXQgdGhlIDJNQiByYW5nZS4gVGhlIGtlcm5lbCBhbGxvY2F0ZXMgRFBBTVQgcmVmY291bnRzIGF0XG4mIzQzOyAqIGluaXRpYWxpemF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGF0b21pY190ICpkcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXG4gc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7XG4gXG5AQCAtMjUyLDYgJiM0MzsyNjYsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBEUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4mIzQzOyAqXG4mIzQzOyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX2luaXQgaW50IGluaXRfZHBhbXRfcmVmY291bnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpkcGFtdF9yZWZjb3VudHMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XG4mIzQzO1x0aWYgKCFkcGFtdF9yZWZjb3VudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX2RwYW10X3JlZmNvdW50cyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dmZyZWUoZHBhbXRfcmVmY291bnRzKTtcbiYjNDM7XHRkcGFtdF9yZWZjb3VudHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX2RwYW10X3JlZmNvdW50KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiBcdTAwM2VcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2ZHBhbXRfcmVmY291bnRzW2luZGV4XTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZVxuICAqIGFsbCBtZW1vcnkgcmVnaW9ucyBhcmUgYWRkZWQgaW4gYWRkcmVzcyBhc2NlbmRpbmcgb3JkZXIgYW5kIGRvbiYjMzk7dFxuQEAgLTUxMCwzNSAmIzQzOzU2MCwzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbiYjNDM7XHRpbnQgYml0c19wZXJfZW50cnk7XG4mIzQzO1xuJiM0MztcdGJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4mIzQzO1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxuICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LlxuICAqL1xuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxuLVx0XHRcdFx0XHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXG4mIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xuJiM0MztcdGNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9O1xuJiM0MztcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbiYjNDM7XHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF80a19lbnRyeV9zaXplLFxuJiM0MztcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXG4mIzQzO1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcbiYjNDM7XHR9O1xuIFxuLVx0c3dpdGNoIChwZ3N6KSB7XG4tXHRjYXNlIFREWF9QU180Szpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzJNOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBNRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFREWF9QU18xRzpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQVURfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbiYjNDM7XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdO1xuJiM0MztcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XG4gXG4tXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xuIFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cbi1cdHBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpO1xuLVxuLVx0cmV0dXJuIHBhbXRfc3o7XG4mIzQzO1x0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XG4gfVxuIFxuIC8qXG5AQCAtNTc2LDE1ICYjNDM7NjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cbiAgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplO1xuIFx0c3RydWN0IHBhZ2UgKnBhbXQ7XG4tXHRpbnQgcGdzeiwgbmlkO1xuJiM0MztcdGludCBuaWQ7XG4gXG4gXHRuaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpO1xuIFxuQEAgLTU5MiwxMyAmIzQzOzY0MCwxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxuIFx0ICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9zaXplID0gMDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykge1xuLVx0XHRwYW10X3NpemVbcGdzel0gPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIHBnc3osXG4tXHRcdFx0XHRcdHBhbXRfZW50cnlfc2l6ZVtwZ3N6XSk7XG4tXHRcdHRkbXJfcGFtdF9zaXplICYjNDM7PSBwYW10X3NpemVbcGdzel07XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzJtX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18yTSk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuJiM0MztcdFx0LyogV2l0aCBEUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbiYjNDM7XHR0ZG1yX3BhbXRfc2l6ZSA9IHRkbXItXHUwMDNlcGFtdF80a19zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsXG4gXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQmIzM5O3MgdXNlIG9mIHJlc2VydmVkIGFyZWFzXG5AQCAtNjA2LDI1ICYjNDM7NjU5LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4mIzQzO1x0ICogdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcbiYjNDM7XHQgKiBwYXRoIG9mIHRoZSBjYWxsZXIgd2lsbCBza2lwIGZyZWVpbmcgdGhlIFBBTVQuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9iYXNlID0gcGFnZV90b19wZm4ocGFtdCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHtcbi1cdFx0cGFtdF9iYXNlW3Bnc3pdID0gdGRtcl9wYW10X2Jhc2U7XG4tXHRcdHRkbXJfcGFtdF9iYXNlICYjNDM7PSBwYW10X3NpemVbcGdzel07XG4tXHR9XG4mIzQzO1x0aWYgKCFwYW10KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzRLXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMk1dO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzFHXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSAmIzQzOyB0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCAmIzQzOzcwMCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yX2RvX3BhbXRfZnVuYyhzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcdTAwMjZwYW10X2Jhc2UsIFx1MDAyNnBhbXRfc2l6ZSk7XG4gXG4gXHQvKiBEbyBub3RoaW5nIGlmIFBBTVQgaGFzbiYjMzk7dCBiZWVuIGFsbG9jYXRlZCBmb3IgdGhpcyBURE1SICovXG4tXHRpZiAoIXBhbXRfc2l6ZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcbiYjNDM7XHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgJiM0Mzs3MjYsMTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJzX2ZyZWVfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4gXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuIFx0aW50IGksIHJldCA9IDA7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCxcbi1cdFx0XHRcdHBhbXRfZW50cnlfc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0fVxuQEAgLTk2OCwxOCAmIzQzOzEwMDgsMTMgQEAgc3RhdGljIF9faW5pdCBpbnQgY29uc3RydWN0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdFx0XHRcdCAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4ge1xuLVx0dTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF80a19lbnRyeV9zaXplLFxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8ybV9lbnRyeV9zaXplLFxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplLFxuLVx0fTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBmaWxsX291dF90ZG1ycyh0bWJfbGlzdCwgdGRtcl9saXN0KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTtcbiYjNDM7XHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTk5OCw2ICYjNDM7MTAzMyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVFx0QklUKDE2KVxuJiM0MztcbiBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdFx0XHRcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxuIHtcbkBAIC0xMDI2LDYgJiM0MzsxMDYzLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xuIFx0YXJncy5yZHggPSB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XG4gXHRhcmdzLnI4ID0gZ2xvYmFsX2tleWlkO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7RW5hYmxlIER5bmFtaWMgUEFNVFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFx1MDAyNmFyZ3MpO1xuIFxuIFx0LyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovXG5AQCAtMTE2NywxMCAmIzQzOzEyMTAsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHQgKi9cbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFxuLVx0cmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuJiM0MztcdHJldCA9IGluaXRfZHBhbXRfcmVmY291bnRzKCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXRfdGR4bWVtO1xuIFxuJiM0MztcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9kcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cbiBcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcdTAwMjZ0ZHhfc3lzaW5mby50ZG1yKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIyMCw2ICYjNDM7MTI2Nyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuIFx0ZnJlZV90ZG1yX2xpc3QoXHUwMDI2dGR4X3RkbXJfbGlzdCk7XG4gZXJyX2ZyZWVfdGR4bWVtOlxuIFx0ZnJlZV90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO2Vycl9mcmVlX2RwYW10X3JlZmNvdW50czpcbiYjNDM7XHRmcmVlX2RwYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwNSw2ICYjNDM7MjA1NCwyOTMgQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XG4gXG4mIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZHhfZW5hYmxlX2RwYW10KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4mIzQzO1x0aWYgKHBhZ2UpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNnBhZ2UtXHUwMDNlbHJ1KTtcbiYjNDM7XHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBhZ2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGNhY2hlKVxuJiM0MztcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFsbG9jX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIGo7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbiYjNDM7XHRcdGlmICghcGFtdF9wYWdlc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbal0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzXG4mIzQzO1x0XHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSGVscGVyIGZvciBidWlsZGluZyBEUEFNVCBzZWFtY2FsbCgpIGFyZ3VtZW50cy4gKi9cbiYjNDM7c3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbiYjNDM7e1xuJiM0MztcdC8qIEZpbmQgdGhlIDJNQi13aWRlIERQQU1UIHJlZ2lvbiBmb3IgJiMzOTtwZm4mIzM5OzogKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgUE1EX1NJWkUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFREWCBBQkkgcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgcGFnZSBsZXZlbCB0aGUgaW5zdGFsbGVkIERQQU1UXG4mIzQzO1x0ICogYmFja2luZyB3aWxsIGNvdmVyLCBldmVuIHRob3VnaCB0b2RheSBvbmx5IDJNQiBpcyBzdXBwb3J0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIGhwYV8ybWIgfCBURFhfUFNfMk07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFkZCBEUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9hZGQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuJiM0MztcdFx0LnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLFxuJiM0MztcdFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcbiYjNDM7XHRcdC5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFx1MDAyNmFyZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cbiYjNDM7c3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbiYjNDM7XHR9O1xuJiM0MztcdHU2NCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcdTAwMjZhcmdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBQQU1UIHBhZ2VzIG91dCBvZiB0aGUgc3RydWN0IHBlciB0aGUgVERYIEFCSSAqL1xuJiM0MztcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuJiM0MztcdHBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBEUEFNVCBtZW1vcnkgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhkcGFtdF9sb2NrKTtcbiYjNDM7XG4mIzQzOy8qIEJ1bXAgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIERQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xuJiM0MztpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdO1xuJiM0MztcdGF0b21pY190ICpkcGFtdF9yZWZjb3VudDtcbiYjNDM7XHR1NjQgdGR4X3N0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgRFBBTVQgZW50cnkgaXMgYWxyZWFkeSBhZGRlZCAoaS5lLiByZWZjb3VudCBcdTAwM2U9IDEpLFxuJiM0MztcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVubGlrZSB0ZHhfcGFtdF9wdXQoKSB3aGljaCB1c2VzIGF0b21pY19kZWNfYW5kX2xvY2soKSB0b1xuJiM0MztcdCAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLVx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xuJiM0MztcdCAqIGVxdWl2YWxlbnQgY29tYmluZWQgcHJpbWl0aXZlIGZvciAwLVx1MDAzZTEuIFJlY2hlY2sgdW5kZXIgdGhlXG4mIzQzO1x0ICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtXHUwMDNlMVxuJiM0MztcdCAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGF0b21pY19pbmNfbm90X3plcm8oZHBhbXRfcmVmY291bnQpKVxuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJlZmNvdW50IGlzIHplcm8sIGFuZCB0aGlzIGxvY2tlZCBwYXRoIGlzIHRoZVxuJiM0MztcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cdTAwM2UxLlxuJiM0MztcdCAqL1xuJiM0MztcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpO1xuJiM0MztcbiYjNDM7LyogRHJvcCBEUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBEUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cbiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcbiYjNDM7XHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XG4mIzQzO1x0dTY0IHRkeF9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIERQQU1UIGVudHJ5LCBkb24mIzM5O3RcbiYjNDM7XHQgKiByZW1vdmUgaXQgeWV0LiBKdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKGRwYW10X3JlZmNvdW50LCBcdTAwMjZkcGFtdF9sb2NrKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXG4mIzQzO1x0ICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhc1xuJiM0MztcdCAqIHRoZXJlIGlzIG5vIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBidXQgZG8geWVsbCBsb3VkbHkgYXNcbiYjNDM7XHQgKiBmYWlsdXJlIGluZGljYXRlcyBhIGtlcm5lbCBidWcsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQsIGFuZFxuJiM0MztcdCAqIHRoZSBkYW5nbGluZyBEUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogYXRvbWljX2RlY19hbmRfbG9jaygpIGFscmVhZHkgZGVjcmVtZW50ZWQgaXQgdG8gMCxcbiYjNDM7XHRcdCAqIGJ1dCB0aGUgRFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkcGFtdF9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfcHV0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9wYW10X2NhY2hlKTtcbiYjNDM7XG4mIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbiYjNDM7e1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRucGFnZXMgKj0gVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY2FjaGUtXHUwMDNlY250IFx1MDAzYyBucGFnZXMpIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcGFnZSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VscnUsIFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCk7XG4mIzQzO1x0XHRjYWNoZS1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFggbW9kdWxlIGZvciB1c2UgYXMgYSBcJiMzNDtjb250cm9sXCYjMzQ7XG4mIzQzOyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxuJiM0MzsgKiBndWVzdCwgYW5kIHRodXMgb2J0YWluIFREWCBwcm90ZWN0aW9ucywgaW5jbHVkaW5nIERQQU1UIHRyYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxuJiM0MzsgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwYWdlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuJiM0MztcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19zZXR1cChcJiMzNDt0ZHhfZHBhbXQ9XCYjMzQ7LCB0ZHhfZHBhbXRfc2V0dXApO1xuJiM0MztcbiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNDgsNiAmIzQzOzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4mIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVx0XHQ1OVxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXHRcdFx0NjlcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5pbmRleCBlNDljMzAwZjIzZDQzLi45OGViZjE3YWFiMWNlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuJiM0MzsgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuICAqXG4gICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb25cbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXG5AQCAtMzMsNiAmIzQzOzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzb1xuJiM0MztcdCAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0JiMzOTtzIG5vdCBzdXBwb3J0ZWQuIERvbiYjMzk7dFxuJiM0MztcdCAqIHRyeSB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlXG4mIzQzO1x0ICogRFBBTVQgYnV0IGRvbiYjMzk7dCBleHBvc2UgdGhlIG1ldGFkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKVxuJiM0MztcdFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZjNhNWVhYmE5MDNjMjEyNGQ4ZmM2YWQ2NzU1Mjg1Y2U4ZGZkNWNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMjowNTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNjg2NDdmZjRiZGQyNC4uZTc1NThiODM4MmFjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTc1ODIsNiAmIzQzOzc1ODIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAogCXRkZng9CQlbSFcsRFJNXQogCiYjNDM7CXRkeF9kcGFtdD0KJiM0MzsJCQlbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVQKJiM0MzsJCQl0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuCiYjNDM7CiYjNDM7CQkJVmFsaWQgcGFyYW1ldGVyczogJiMzNDtvbiYjMzQ7LCAmIzM0O29mZiYjMzQ7CiYjNDM7CQkJRGVmYXVsdDogJiMzNDtvZmYmIzM0OwomIzQzOwomIzQzOwkJCUZvciBkZXRhaWxzIHNlZToKJiM0MzsJCQlEb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsKIAl0ZXN0X3N1c3BlbmQ9CVtTVVNQRU5EXQogCQkJRm9ybWF0OiB7ICYjMzQ7bWVtJiMzNDsgfCAmIzM0O3N0YW5kYnkmIzM0OyB8ICYjMzQ7ZnJlZXplJiMzNDsgfVssTl0KIAkJCVNwZWNpZnkgJiMzNDttZW0mIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciAmIzM0O3N0YW5kYnkmIzM0OyAoZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKaW5kZXggMzMwMzQ5OWFkNGM2Zi4uZGUwOTk2N2NlOGQ4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdApAQCAtMjAwLDYgJiM0MzsyMDAsMzMgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlCiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVEQKIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuCiAKJiM0MztEeW5hbWljIFBBTVQKJiM0MzstLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztUaGUgUGh5c2ljYWwgQWRkcmVzcyBNZXRhZGF0YSBUYWJsZSAoUEFNVCkgaXMgbWV0YWRhdGEgaW4gd2hpY2ggdGhlIFREWAomIzQzO21vZHVsZSBrZWVwcyBkYXRhIGFib3V0IGVhY2ggcGh5c2ljYWwgcGFnZSAodGhpbmsgc3RydWN0IHBhZ2UpLiBTcGFjZQomIzQzO2ZvciBpdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIFZNTSwgY29uc3VtZXMgdXAgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0KJiM0MzttZW1vcnkgYW5kIG5lZWRzIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSBURFggbW9kdWxlIHdoZW4gdGhlIFREWCBtb2R1bGUgaXMKJiM0MztmaXJzdCBsb2FkZWQuCiYjNDM7CiYjNDM7RHluYW1pYyBQQU1UIGlzIGFuIGFkZC1vbiBmZWF0dXJlIHRoYXQgYWxsb3dzIGEgVk1NIHRvIGR5bmFtaWNhbGx5CiYjNDM7YWxsb2NhdGUgdGhlIHBhcnQgb2YgdGhlIFBBTVQgd2hpY2ggdHJhY2tzIDRLQiBwYWdlcy4gVGhpcyByZWR1Y2VzIHRoZQomIzQzO2Ftb3VudCBvZiBtZW1vcnkgdGhhdCBURFggY29uc3VtZXMgd2hpbGUgVERzIGFyZSBub3QgaW4gdXNlLgomIzQzOwomIzQzO1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6CiYjNDM7CiYjNDM7ICBbLi5dIHZpcnQvdGR4OiBFbmFibGUgRHluYW1pYyBQQU1UCiYjNDM7ICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVQKJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWQKJiM0MzsKJiM0MztEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsCiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byAmIzM0O29uJiMzNDsuIFRoZSBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgVERYIG1vZHVsZQomIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmcKJiM0Mztjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluCiYjNDM7aXRzIGVudW1lcmF0aW9uIG9mIER5bmFtaWMgUEFNVCBzdXBwb3J0LCBrZXJuZWwgc3VwcG9ydCBjYW4gYmUgY2hhbmdlZCB0bwomIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dAomIzQzO0R5bmFtaWMgUEFNVC4KJiM0MzsKIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IGUyMTNjOWFlM2UzMDEuLjVjMzU4YzQwZWFlOGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaApAQCAtOTksNiAmIzQzOzk5LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcCkKIEtWTV9YODZfT1AobG9hZF9tbXVfcGdkKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKQogS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdCkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpCiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdCkKIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19vZmZzZXQpCiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDY4M2JiOGJmNDNhOTQuLjU3ZDM3NDkxYzdjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTY0NCw2ICYjNDM7MTY0NCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJLyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqLwogCXZvaWQgKCpmcmVlX2V4dGVybmFsX3NwdCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CiAKJiM0MzsJaW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTsKIAogCWJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCmluZGV4IDg5ZTk3ZDU3NjFkODkuLmUxODZkZmU1YmY4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQAogLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi8KICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HCUJJVF9VTEwoMSkKICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9ECUJJVF9VTEwoMTgpCiYjNDM7I2RlZmluZSBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVAlCSVRfVUxMKDM2KQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApAQCAtMTE4LDEyICYjNDM7MTE5LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfc3VwcG9ydHNfcnVudGltZV91cGRhdGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mCiAJcmV0dXJuIHN5c2luZm8tJmd0O2ZlYXR1cmVzLnRkeF9mZWF0dXJlczAgJmFtcDsgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HOwogfQogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pOwomIzQzOwomIzQzOy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIERQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqLwomIzQzO3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0OwomIzQzOwlpbnQgY250OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7Y2FjaGUtJmd0O3BhZ2VfbGlzdCk7CiYjNDM7CWNhY2hlLSZndDtjbnQgPSAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7CiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKJiM0MztpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpOwomIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pOwomIzQzOwogaW50IHRkeF9ndWVzdF9rZXlpZF9hbGxvYyh2b2lkKTsKIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTsKIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTsKIAogdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7CiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogc3RydWN0IHRkeF90ZCB7CiAJLyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovCiAJc3RydWN0IHBhZ2UgKnRkcl9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCmluZGV4IDQxMTUwZDU0NjU4OWMuLjhhM2NjMWEyYTQxZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmgKQEAgLTEsNyAmIzQzOzEsNyBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi8KLSNpZm5kZWYgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKLSNkZWZpbmUgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKJiM0MzsvKiBURFggZ2xvYmFsIG1ldGFkYXRhIHN0cnVjdHVyZXMuICovCiYjNDM7I2lmbmRlZiBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSAomIzQzOyNkZWZpbmUgX1g4Nl9WSVJUX1REWF9URFhfR0xPQkFMX01FVEFEQVRBX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTIxLDYgJiM0MzsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7CiAJdTE2IHBhbXRfNGtfZW50cnlfc2l6ZTsKIAl1MTYgcGFtdF8ybV9lbnRyeV9zaXplOwogCXUxNiBwYW10XzFnX2VudHJ5X3NpemU7CiYjNDM7CiYjNDM7CS8qIE9wdGlvbmFsIG1ldGFkYXRhLCBpZiBEUEFNVCBpcyBzdXBwb3J0ZWQgKi8KJiM0MzsJdTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKIH07CiAKIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li4yODE2ODYxY2EyNzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTYxNyw2ICYjNDM7NjE3LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KQogCQkJCQkgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiYjNDM7CiYjNDM7CQlyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwogCX0KIAlyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoJmFtcDt2Y3B1LSZndDthcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSwKIAkJCQkgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBiMjcyYzIwNTg2YTc0Li43Yzc5ZjRkNGJmOTlhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTM2Miw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpCiAJaWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSkKIAkJcmV0dXJuOwogCi0JX19mcmVlX3BhZ2UoY3RybF9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7CiB9CiAKIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHsKQEAgLTU4OSw3ICYjNDM7NTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pCiAKIAl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTsKIAotCV9fZnJlZV9wYWdlKGt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlKTsKIAlrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSA9IE5VTEw7CiB9CiAKQEAgLTY4MSw2ICYjNDM7NjgxLDggQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXRkeF9pbml0X3BhbXRfY2FjaGUoJmFtcDt0ZHgtJmd0O3BhbXRfY2FjaGUpOwomIzQzOwogCWZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbCgmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1KTsKIAl2Y3B1LSZndDthcmNoLmFwaWMtJmd0O2d1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3RkeC0mZ3Q7dnQucGlfd2FrZXVwX2xpc3QpOwpAQCAtODY2LDYgJiM0Mzs4NjgsOCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCWludCBpOwogCiYjNDM7CXRkeF9mcmVlX3BhbXRfY2FjaGUoJmFtcDt0ZHgtJmd0O3BhbXRfY2FjaGUpOwomIzQzOwogCWlmICh2Y3B1LSZndDtjcHUgIT0gLTEpIHsKIAkJS1ZNX0JVR19PTih0ZHgtJmd0O3N0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtJmd0O2t2bSk7CiAJCXRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7CkBAIC0xNjE4LDYgJiM0MzsxNjIyLDE3IEBAIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKQogCXRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpOwogfQogCiYjNDM7c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE1pbnVzIG9uZSBwYWdlIHRvIGV4Y2x1ZGUgdGhlIHJvb3QgU1BULCBidXQgcGx1cyBvbmUgcGFnZSBmb3IgYQomIzQzOwkgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLgomIzQzOwkgKi8KJiM0MzsJbWluX25yX3NwdHMgJiM0Mzs9IC0xICYjNDM7IDE7CiYjNDM7CiYjNDM7CXJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZSgmYW1wO3RvX3RkeCh2Y3B1KS0mZ3Q7cGFtdF9jYWNoZSwgbWluX25yX3NwdHMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2FkZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCwKIAkJCSAgICBrdm1fcGZuX3QgcGZuKQogewpAQCAtMTY3NiwxNiAmIzQzOzE2OTEsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCQkJCSAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpOwogCWdwYV90IGdwYSA9IGdmbl90b19ncGEoZ2ZuKTsKIAl1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7CiAJc3RydWN0IHBhZ2UgKnNlcHRfcHQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKQomIzQzOwkJcmV0dXJuIC1FSU87CiAKIAlzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTsKIAlpZiAoIXNlcHRfcHQpCiAJCXJldHVybiAtRUlPOwogCiYjNDM7CXJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgJmFtcDt0b190ZHgodmNwdSktJmd0O3BhbXRfY2FjaGUpOwomIzQzOwlpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCWVyciA9IHRkaF9tZW1fc2VwdF9hZGQoJmFtcDt0b19rdm1fdGR4KGt2bSktJmd0O3RkLCBncGEsIGxldmVsLCBzZXB0X3B0LAogCQkJICAgICAgICZhbXA7ZW50cnksICZhbXA7bGV2ZWxfc3RhdGUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJdGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTsKJiM0MzsKIAlpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTY5OCw4ICYjNDM7MTcyNSwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsCiAJCQkJICB1NjQgbmV3X3NwdGUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7CiAJc3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7CiAJa3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAogCS8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi8KIAlpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSkKQEAgLTE3MDcsNiAmIzQzOzE3MzksMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmUKIAogCVdBUk5fT05fT05DRSgobmV3X3NwdGUgJmFtcDsgVk1YX0VQVF9SV1hfTUFTSykgIT0gVk1YX0VQVF9SV1hfTUFTSyk7CiAKJiM0MzsJcmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgJmFtcDt0b190ZHgodmNwdSktJmd0O3BhbXRfY2FjaGUpOwomIzQzOwlpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCS8qCiAJICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KCkKIAkgKiBiZWZvcmUga3ZtX3RkeC0mZ3Q7c3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHQKQEAgLTE3MTksMTAgJiM0MzsxNzU1LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlCiAJICogSWYgdGhlIFREIGlzbiYjMzk7dCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZwogCSAqIHRoZSBWTSBpbWFnZSB2aWEgS1ZNX1REWF9JTklUX01FTV9SRUdJT047IEFERCB0aGUgcGFnZSB0byB0aGUgVEQuCiAJICovCi0JaWYgKHVubGlrZWx5KGt2bV90ZHgtJmd0O3N0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSkKLQkJcmV0dXJuIHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwlpZiAobGlrZWx5KGt2bV90ZHgtJmd0O3N0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSkKJiM0MzsJCXJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXRkeF9wYW10X3B1dChwZm4pOwogCi0JcmV0dXJuIHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTgxOSw2ICYjNDM7MTg2MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfcmVtb3ZlX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIAkJcmV0dXJuIC1FSU87CiAKIAl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIoUEZOX1BIWVMocGZuKSwgUEFHRV9TSVpFKTsKJiM0MzsJdGR4X3BhbXRfcHV0KHBmbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NjIsNiAmIzQzOzE5MDQsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSwKICAqLwogc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewomIzQzOwlzdHJ1Y3QgcGFnZSAqc2VwdF9wdCA9IHZpcnRfdG9fcGFnZShzcC0mZ3Q7ZXh0ZXJuYWxfc3B0KTsKJiM0MzsKIAkvKgogCSAqIEtWTSBkb2VzbiYjMzk7dCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZQogCSAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZQpAQCAtMTg3NSwxNSAmIzQzOzE5MTksMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogCSAqIHRoZSBwYWdlIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGUgZW5jcnlwdGVkIHBhZ2UuCiAJICovCiAJaWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8Ci0JICAgIHRkeF9yZWNsYWltX3BhZ2UodmlydF90b19wYWdlKHNwLSZndDtleHRlcm5hbF9zcHQpKSkKJiM0MzsJICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpCiAJCWdvdG8gb3V0OwogCiAJLyoKLQkgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGJlY2F1c2UgUkNVLXRpbWUgZnJlZSBpcyB1bm5lY2Vzc2FyeQotCSAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nCi0JICogcmVhZGVycy4KJiM0MzsJICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2VzbiYjMzk7dCBzdXBwb3J0CiYjNDM7CSAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlCiYjNDM7CSAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuCiAJICovCi0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLSZndDtleHRlcm5hbF9zcHQpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc2VwdF9wdCk7CiBvdXQ6CiAJc3AtJmd0O2V4dGVybmFsX3NwdCA9IE5VTEw7CiB9CkBAIC0yNDU2LDcgJiM0MzsyNTAwLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogCiAJcmV0ID0gLUVOT01FTTsKIAotCXRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwl0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAlpZiAoIXRkcl9wYWdlKQogCQlnb3RvIGZyZWVfaGtpZDsKIApAQCAtMjQ2OSw3ICYjNDM7MjUxMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIAkJZ290byBmcmVlX3RkcjsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQl0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJdGRjc19wYWdlc1tpXSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAkJaWYgKCF0ZGNzX3BhZ2VzW2ldKQogCQkJZ290byBmcmVlX3RkY3M7CiAJfQpAQCAtMjU4NywxMCAmIzQzOzI2MzEsOCBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiB0ZWFyZG93bjoKIAkvKiBPbmx5IGZyZWUgcGFnZXMgbm90IHlldCBhZGRlZCwgc28gc3RhcnQgYXQgJiMzOTtpJiMzOTsgKi8KIAlmb3IgKDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmICh0ZGNzX3BhZ2VzW2ldKSB7Ci0JCQlfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKLQkJCXRkY3NfcGFnZXNbaV0gPSBOVUxMOwotCQl9CiYjNDM7CQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7CiYjNDM7CQl0ZGNzX3BhZ2VzW2ldID0gTlVMTDsKIAl9CiAJaWYgKCFrdm1fdGR4LSZndDt0ZC50ZGNzX3BhZ2VzKQogCQlrZnJlZSh0ZGNzX3BhZ2VzKTsKQEAgLTI2MDUsMTYgJiM0MzsyNjQ3LDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIAlmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTsKIAogZnJlZV90ZGNzOgotCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlpZiAodGRjc19wYWdlc1tpXSkKLQkJCV9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pOwotCX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pOwogCWtmcmVlKHRkY3NfcGFnZXMpOwogCWt2bV90ZHgtJmd0O3RkLnRkY3NfcGFnZXMgPSBOVUxMOwogCiBmcmVlX3RkcjoKLQlpZiAodGRyX3BhZ2UpCi0JCV9fZnJlZV9wYWdlKHRkcl9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTsKIAlrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSA9IE5VTEw7CiAKIGZyZWVfaGtpZDoKQEAgLTI5NDgsNyAmIzQzOzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAJaW50IHJldCwgaTsKIAl1NjQgZXJyOwogCi0JcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCXRkeC0mZ3Q7dnAudGR2cHJfcGFnZSA9IHBhZ2U7CkBAIC0yOTY4LDcgJiM0MzszMDA3LDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTsKIAkJaWYgKCFwYWdlKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlX3RkY3g7CkBAIC0yOTkwLDcgJiM0MzszMDI5LDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCQkJICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuCiAJCQkgKi8KIAkJCWZvciAoOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJCQlfX2ZyZWVfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwomIzQzOwkJCQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKIAkJCQl0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMOwogCQkJfQogCQkJcmV0dXJuIC1FSU87CkBAIC0zMDE4LDE2ICYjNDM7MzA1NywxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAKIGZyZWVfdGRjeDoKIAlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSkKLQkJCV9fZnJlZV9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiYjNDM7CQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKIAkJdGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDsKIAl9CiAJa2ZyZWUodGR4LSZndDt2cC50ZGN4X3BhZ2VzKTsKIAl0ZHgtJmd0O3ZwLnRkY3hfcGFnZXMgPSBOVUxMOwogCiBmcmVlX3RkdnByOgotCWlmICh0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UpCi0JCV9fZnJlZV9wYWdlKHRkeC0mZ3Q7dnAudGR2cHJfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UpOwogCXRkeC0mZ3Q7dnAudGR2cHJfcGFnZSA9IE5VTEw7CiAJdGR4LSZndDt2cC50ZHZwcl9wYSA9IDA7CiAKQEAgLTM0ODcsNiAmIzQzOzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAogCXZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlOwogCXZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0OwomIzQzOwomIzQzOwlpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpCiYjNDM7CQl2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7CiYjNDM7CiAJdnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oCmluZGV4IGFjODMyM2E2OGIxNjMuLmZkMzY4ZTNlZTA2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaApAQCAtNzIsNiAmIzQzOzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHsKIAogCXU2NCBtYXBfZ3BhX25leHQ7CiAJdTY0IG1hcF9ncGFfZW5kOwomIzQzOwomIzQzOwlzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTsKIH07CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCmluZGV4IDFiOWZmNzQ5ZGQ4ZTAuLjJhY2FiNmU1ZjVmODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMKQEAgLTMwLDYgJiM0MzszMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3VzcGVuZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2NvcmVfb3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zcGVjaWFsX2luc25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL21zci1pbmRleC5oJmd0OwpAQCAtNDYsNiAmIzQzOzQ3LDExIEBACiAjaW5jbHVkZSAmIzM0O3NlYW1jYWxsX2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHguaCYjMzQ7CiAKJiM0MzsvKiBOdW1iZXIgb2YgRFBBTVQgcGFnZXMgdG8gYmUgcHJvdmlkZWQgdG8gVERYIG1vZHVsZSBwZXIgMk1CIHJlZ2lvbiBvZiBQQSAqLwomIzQzOyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDIKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB0ZHhfZW5hYmxlX2RwYW10IF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKIHN0cnVjdCB0ZHhfbW9kdWxlX3N0YXRlIHsKIAlib29sIGluaXRpYWxpemVkOwogCWJvb2wgc3lzaW5pdF9kb25lOwpAQCAtNjMsNiAmIzQzOzY5LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpOwogCiBzdGF0aWMgc3RydWN0IHRkbXJfaW5mb19saXN0IHRkeF90ZG1yX2xpc3Q7CiAKJiM0MzsvKgomIzQzOyAqIE9uIGEgbWFjaGluZSB3aXRoIERQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyCiYjNDM7ICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3IKJiM0MzsgKiB0aGUgRFBBTVQgYXQgdGhlIDJNQiByYW5nZS4gVGhlIGtlcm5lbCBhbGxvY2F0ZXMgRFBBTVQgcmVmY291bnRzIGF0CiYjNDM7ICogaW5pdGlhbGl6YXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGF0b21pY190ICpkcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqLwogc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7CiAKQEAgLTI1Miw2ICYjNDM7MjY2LDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHsKIAkub3BzID0gJmFtcDt0ZHhfc3lzY29yZV9vcHMsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBEUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7ICoKJiM0MzsgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9faW5pdCBpbnQgaW5pdF9kcGFtdF9yZWZjb3VudHModm9pZCkKJiM0Mzt7CiYjNDM7CXNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKmRwYW10X3JlZmNvdW50cyk7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkcGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpOwomIzQzOwlpZiAoIWRwYW10X3JlZmNvdW50cykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCB2b2lkIGZyZWVfZHBhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZmcmVlKGRwYW10X3JlZmNvdW50cyk7CiYjNDM7CWRwYW10X3JlZmNvdW50cyA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwkvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiAmZ3Q7Jmd0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO2RwYW10X3JlZmNvdW50c1tpbmRleF07CiYjNDM7fQomIzQzOwogLyoKICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZQogICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJiMzOTt0CkBAIC01MTAsMzUgJiM0Mzs1NjAsMzcgQEAgc3RhdGljIF9faW5pdCBpbnQgZmlsbF9vdXRfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzOwomIzQzOwlpbnQgYml0c19wZXJfZW50cnk7CiYjNDM7CiYjNDM7CWJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7CiYjNDM7CW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJcGFtdF9zeiA9IERJVl9ST1VORF9VUChucl9wYW10X2VudHJpZXMgKiBiaXRzX3Blcl9lbnRyeSwgQklUU19QRVJfQllURSk7CiYjNDM7CiYjNDM7CXJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDYWxjdWxhdGUgUEFNVCBzaXplIGdpdmVuIGEgVERNUiBhbmQgYSBwYWdlIHNpemUuICBUaGUgcmV0dXJuZWQKICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LgogICovCi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeiwKLQkJCQkJICAgICB1MTYgcGFtdF9lbnRyeV9zaXplKQomIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KQogewogCXVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzOwomIzQzOwljb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTsKJiM0MzsJY29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewomIzQzOwkJdGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsCiYjNDM7CQl0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMm1fZW50cnlfc2l6ZSwKJiM0MzsJCXRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLAomIzQzOwl9OwogCi0Jc3dpdGNoIChwZ3N6KSB7Ci0JY2FzZSBURFhfUFNfNEs6Ci0JCW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJYnJlYWs7Ci0JY2FzZSBURFhfUFNfMk06Ci0JCW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgUE1EX1NISUZUOwotCQlicmVhazsKLQljYXNlIFREWF9QU18xRzoKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQVURfU0hJRlQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJcmV0dXJuIDA7Ci0JfQomIzQzOwlucl9wYW10X2VudHJpZXMgPSB0ZG1yLSZndDtzaXplICZndDsmZ3Q7IHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdOwomIzQzOwlwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplW3Bnc3pdOwogCi0JcGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZTsKIAkvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqLwotCXBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpOwotCi0JcmV0dXJuIHBhbXRfc3o7CiYjNDM7CXJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opOwogfQogCiAvKgpAQCAtNTc2LDE1ICYjNDM7NjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzCiAgKiB3aXRoaW4gQHRkbXIsIGFuZCBzZXQgdXAgUEFNVHMgZm9yIEB0ZG1yLgogICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCi0JCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsCi0JCQkJICAgdTE2IHBhbXRfZW50cnlfc2l6ZVtdKQomIzQzOwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKLQl1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdOwotCXVuc2lnbmVkIGxvbmcgcGFtdF9zaXplW1REWF9QU19OUl07Ci0JdW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTsKIAl1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplOwogCXN0cnVjdCBwYWdlICpwYW10OwotCWludCBwZ3N6LCBuaWQ7CiYjNDM7CWludCBuaWQ7CiAKIAluaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpOwogCkBAIC01OTIsMTMgJiM0Mzs2NDAsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLAogCSAqIENhbGN1bGF0ZSB0aGUgUEFNVCBzaXplIGZvciBlYWNoIFREWCBzdXBwb3J0ZWQgcGFnZSBzaXplCiAJICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuCiAJICovCi0JdGRtcl9wYW10X3NpemUgPSAwOwotCWZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiAmbHQ7IFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHsKLQkJcGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LAotCQkJCQlwYW10X2VudHJ5X3NpemVbcGdzel0pOwotCQl0ZG1yX3BhbXRfc2l6ZSAmIzQzOz0gcGFtdF9zaXplW3Bnc3pdOwomIzQzOwl0ZG1yLSZndDtwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7CiYjNDM7CXRkbXItJmd0O3BhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCS8qIFdpdGggRFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqLwomIzQzOwkJdGRtci0mZ3Q7cGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0ZG1yLSZndDtwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7CiAJfQogCiYjNDM7CXRkbXJfcGFtdF9zaXplID0gdGRtci0mZ3Q7cGFtdF80a19zaXplICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZSAmIzQzOyB0ZG1yLSZndDtwYW10XzFnX3NpemU7CiYjNDM7CiAJLyoKIAkgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsCiAJICogUEFNVHMuICBUaGlzIGhlbHBzIG1pbmltaXplIHRoZSBQQU1UJiMzOTtzIHVzZSBvZiByZXNlcnZlZCBhcmVhcwpAQCAtNjA2LDI1ICYjNDM7NjU5LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKIAkgKi8KIAlwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsCiAJCQluaWQsICZhbXA7bm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAoIXBhbXQpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJLyoKLQkgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGUKLQkgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS4KJiM0MzsJICogdGRtci0mZ3Q7cGFtdF80a19iYXNlIGlzIHN0aWxsIHplcm8gc28gdGhlIGVycm9yCiYjNDM7CSAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC4KIAkgKi8KLQl0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTsKLQkJdGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTsKLQl9CiYjNDM7CWlmICghcGFtdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JdGRtci0mZ3Q7cGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107Ci0JdGRtci0mZ3Q7cGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107CiYjNDM7CXRkbXItJmd0O3BhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gdGRtci0mZ3Q7cGFtdF80a19iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfNGtfc2l6ZTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gdGRtci0mZ3Q7cGFtdF8ybV9iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU1LDEwICYjNDM7NzAwLDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJdGRtcl9nZXRfcGFtdCh0ZG1yLCAmYW1wO3BhbXRfYmFzZSwgJmFtcDtwYW10X3NpemUpOwogCiAJLyogRG8gbm90aGluZyBpZiBQQU1UIGhhc24mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqLwotCWlmICghcGFtdF9zaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKQomIzQzOwlpZiAoIXBhbXRfYmFzZSkKIAkJcmV0dXJuOwogCiAJcGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTsKQEAgLTY4NCwxNCAmIzQzOzcyNiwxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCkKIAogLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCi0JCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LAotCQkJCQl1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZG1yX2xpc3QtJmd0O25yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsCi0JCQkJcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJCXJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC05NjgsMTggJiM0MzsxMDA4LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAkJCQkgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCQkJCSAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7Ci0JdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewotCQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfNGtfZW50cnlfc2l6ZSwKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUsCi0JCXN5c2luZm9fdGRtci0mZ3Q7cGFtdF8xZ19lbnRyeV9zaXplLAotCX07CiAJaW50IHJldDsKIAogCXJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJcmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5OCw2ICYjNDM7MTAzMyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQJQklUKDE2KQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCiAJCQkJICAgIHU2NCBnbG9iYWxfa2V5aWQpCiB7CkBAIC0xMDI2LDYgJiM0MzsxMDYzLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCWFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTsKIAlhcmdzLnJkeCA9IHRkbXJfbGlzdC0mZ3Q7bnJfY29uc3VtZWRfdGRtcnM7CiAJYXJncy5yOCA9IGdsb2JhbF9rZXlpZDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXG4mIzM0Oyk7CiYjNDM7CQlhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCAmYW1wO2FyZ3MpOwogCiAJLyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovCkBAIC0xMTY3LDEwICYjNDM7MTIxMCwxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAkgKi8KIAlnZXRfb25saW5lX21lbXMoKTsKIAotCXJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzOwlyZXQgPSBpbml0X2RwYW10X3JlZmNvdW50cygpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3B1dF90ZHhtZW07CiAKJiM0MzsJcmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoJmFtcDt0ZHhfbWVtbGlzdCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9mcmVlX2RwYW10X3JlZmNvdW50czsKJiM0MzsKIAkvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqLwogCXJldCA9IGFsbG9jX3RkbXJfbGlzdCgmYW1wO3RkeF90ZG1yX2xpc3QsICZhbXA7dGR4X3N5c2luZm8udGRtcik7CiAJaWYgKHJldCkKQEAgLTEyMjAsNiAmIzQzOzEyNjcsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAlmcmVlX3RkbXJfbGlzdCgmYW1wO3RkeF90ZG1yX2xpc3QpOwogZXJyX2ZyZWVfdGR4bWVtOgogCWZyZWVfdGR4X21lbWxpc3QoJmFtcDt0ZHhfbWVtbGlzdCk7CiYjNDM7ZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOgomIzQzOwlmcmVlX2RwYW10X3JlZmNvdW50cygpOwogCWdvdG8gb3V0X3B1dF90ZHhtZW07CiB9CiAKQEAgLTIwMDUsNiAmIzQzOzIwNTQsMjkzIEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTsKIAomIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKQomIzQzO3sKJiM0MzsJaWYgKCF0ZHhfZW5hYmxlX2RwYW10KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gc3lzaW5mby0mZ3Q7ZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCAmYW1wOyBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmFtcDtjYWNoZS0mZ3Q7cGFnZV9saXN0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKJiM0MzsJaWYgKHBhZ2UpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7cGFnZS0mZ3Q7bHJ1KTsKJiM0MzsJCWNhY2hlLSZndDtjbnQtLTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19kcGFtdF9wYWdlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlpZiAoY2FjaGUpCiYjNDM7CQlyZXR1cm4gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSk7CiYjNDM7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTsKJiM0MzsJCWlmICghcGFtdF9wYWdlc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBpOyBqJiM0MzsmIzQzOykKJiM0MzsJCV9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbal0pOwomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlcwomIzQzOwkJICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS4KJiM0MzsJCSAqLwomIzQzOwkJdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJCV9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIEhlbHBlciBmb3IgYnVpbGRpbmcgRFBBTVQgc2VhbWNhbGwoKSBhcmd1bWVudHMuICovCiYjNDM7c3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbikKJiM0Mzt7CiYjNDM7CS8qIEZpbmQgdGhlIDJNQi13aWRlIERQQU1UIHJlZ2lvbiBmb3IgJiMzOTtwZm4mIzM5OzogKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCwgUE1EX1NJWkUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBURFggQUJJIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHBhZ2UgbGV2ZWwgdGhlIGluc3RhbGxlZCBEUEFNVAomIzQzOwkgKiBiYWNraW5nIHdpbGwgY292ZXIsIGV2ZW4gdGhvdWdoIHRvZGF5IG9ubHkgMk1CIGlzIHN1cHBvcnRlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBZGQgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9hZGQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwkJLnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSwKJiM0MzsJCS5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBzZWFtY2FsbChUREhfUEhZTUVNX1BBTVRfQURELCAmYW1wO2FyZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwl9OwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgJmFtcDthcmdzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi8KJiM0MzsJcGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7CiYjNDM7CXBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBEUEFNVCBtZW1vcnkgKi8KJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRwYW10X2xvY2spOwomIzQzOwomIzQzOy8qIEJ1bXAgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIERQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqLwomIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07CiYjNDM7CWF0b21pY190ICpkcGFtdF9yZWZjb3VudDsKJiM0MzsJdTY0IHRkeF9zdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX2RwYW10X3JlZmNvdW50KHBmbik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBEUEFNVCBlbnRyeSBpcyBhbHJlYWR5IGFkZGVkIChpLmUuIHJlZmNvdW50ICZndDs9IDEpLAomIzQzOwkgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2RwYW10X2xvY2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG8KJiM0MzsJICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtJmd0OzAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBubwomIzQzOwkgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC0mZ3Q7MS4gUmVjaGVjayB1bmRlciB0aGUKJiM0MzsJICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtJmd0OzEKJiM0MzsJICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSkKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCXJldCA9IC1FSU87CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGUKJiM0MzsJICogb25seSB3YXkgdG8gaW5jcmVhc2UgaXQgZnJvbSAwLSZndDsxLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3NldChkcGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7ZHBhbXRfbG9jayk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9mcmVlOgomIzQzOwlzcGluX3VubG9jaygmYW1wO2RwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpOwomIzQzOwomIzQzOy8qIERyb3AgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovCiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTsKJiM0MzsJYXRvbWljX3QgKmRwYW10X3JlZmNvdW50OwomIzQzOwl1NjQgdGR4X3N0YXR1czsKJiM0MzsKJiM0MzsJaWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX2RwYW10X3JlZmNvdW50KHBmbik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgRFBBTVQgZW50cnksIGRvbiYjMzk7dAomIzQzOwkgKiByZW1vdmUgaXQgeWV0LiBKdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soZHBhbXRfcmVmY291bnQsICZhbXA7ZHBhbXRfbG9jaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW4KJiM0MzsJICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhcwomIzQzOwkgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzCiYjNDM7CSAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kCiYjNDM7CSAqIHRoZSBkYW5nbGluZyBEUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC4KJiM0MzsJICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLAomIzQzOwkJICogYnV0IHRoZSBEUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC4KJiM0MzsJCSAqLwomIzQzOwkJYXRvbWljX3NldChkcGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkcGFtdF9sb2NrKTsKJiM0MzsJZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpOwomIzQzOwlyZXR1cm47CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkcGFtdF9sb2NrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7CiYjNDM7CiYjNDM7dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJd2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKQomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9wYW10X2NhY2hlKTsKJiM0MzsKJiM0MztpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlucGFnZXMgKj0gVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOwomIzQzOwomIzQzOwl3aGlsZSAoY2FjaGUtJmd0O2NudCAmbHQ7IG5wYWdlcykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBhZ2UpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQlsaXN0X2FkZCgmYW1wO3BhZ2UtJmd0O2xydSwgJmFtcDtjYWNoZS0mZ3Q7cGFnZV9saXN0KTsKJiM0MzsJCWNhY2hlLSZndDtjbnQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWCBtb2R1bGUgZm9yIHVzZSBhcyBhICYjMzQ7Y29udHJvbCYjMzQ7CiYjNDM7ICogcGFnZSwgaS5lLiBwYWdlcyB0aGF0IGFyZSB1c2VkIGZvciBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGEgZ2l2ZW4gVERYCiYjNDM7ICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBEUEFNVCB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkgewomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFggbW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sCiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguCiYjNDM7ICovCiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7CiYjNDM7CV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCAmYW1wO3RkeF9lbmFibGVfZHBhbXQpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO19fc2V0dXAoJiMzNDt0ZHhfZHBhbXQ9JiMzNDssIHRkeF9kcGFtdF9zZXR1cCk7CiYjNDM7CiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKQogewogCXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCmluZGV4IGJkZmQwZTFlMzM3YWMuLmE4ODZjNTRkZWNhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmgKQEAgLTQ4LDYgJiM0Mzs0OCw4IEBACiAjZGVmaW5lIFRESF9TWVNfQ09ORklHCQkJNDUKICNkZWZpbmUgVERIX1NZU19TSFVURE9XTgkJNTIKICNkZWZpbmUgVERIX1NZU19VUERBVEUJCQk1MwomIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERAkJNTgKJiM0MzsjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkUJCTU5CiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRQkJCTY5CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYwppbmRleCBlNDljMzAwZjIzZDQzLi45OGViZjE3YWFiMWNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLgomIzQzOyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuCiAgKgogICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb24KICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS4KQEAgLTMzLDYgJiM0MzszMywxOCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZgogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwl1NjQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsICZhbXA7dmFsKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cyA9IHZhbDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiAJcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwogCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoJmFtcDtzeXNpbmZvLSZndDt0ZF9jb25mKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzbwomIzQzOwkgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCYjMzk7cyBub3Qgc3VwcG9ydGVkLiBEb24mIzM5O3QKJiM0MzsJICogdHJ5IHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2UKJiM0MzsJICogRFBBTVQgYnV0IGRvbiYjMzk7dCBleHBvc2UgdGhlIG1ldGFkYXRhLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKQomIzQzOwkJcmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KCZhbXA7c3lzaW5mby0mZ3Q7dGRtcik7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxOTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBURFggRFBBTVQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHRoZSBwYXRjaCBpcyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIExldCYjMzk7cyBkaWcgaW4uIEZpcnN0LCBJIG5lZWQgdG8gKnVuZGVyc3RhbmQqIHdoYXQgdGhpcyBwYXRjaCBpcyBldmVuIGRvaW5nLiBBaCwgaXQmIzM5O3MgYWRkaW5nIER5bmFtaWMgUEFNVCAoRFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGluIHRoZSBLVk0gVERYIGFuZCB2aXJ0L3ZteC90ZHggY29tcG9uZW50cy4gVGhhdCYjMzk7cyBnb29kIGluZm9ybWF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBjb2RlJiMzOTtzIG1vZGlmaWVkLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGRlY2VudCBjaHVuayBvZiB0aGUgY29kZWJhc2U6IGRvY3VtZW50YXRpb24sIGluY2x1ZGUgZmlsZXMgaW4gYGFyY2gveDg2YCwgYW5kIHNvbWUga2V5IGBrdm1gIGRpcmVjdG9yaWVzLCBlc3BlY2lhbGx5IHRob3NlIGRlYWxpbmcgd2l0aCBgdm14YCBhbmQgYHRkeGAgKGluY2x1ZGluZyBgdGR4X2dsb2JhbF9tZXRhZGF0YWApLiBUaGF0IGJyZWFkdGggb2YgY2hhbmdlcyBpcyBpbnRlcmVzdGluZy4gVGhlIGRlZXBlciBpdCBnb2VzIHRoZSBtb3JlIG9wcG9ydHVuaXR5IGZvciBoaWRkZW4gZWRnZSBjYXNlcy4KCk5leHQsIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZnV6emFiaWxpdHkgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50cy4gQ2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBmdW5jdGlvbmFsaXR5IGluIFFFTVUgb3IgR0NFPyBEb2VzIHRoZSBURFggaG9zdCAodGhhdCBJbnRlbCBURFggbW9kdWxlL1NFQU1DQUxMKSBmdW5jdGlvbiBwcm9wZXJseSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgd2l0aG91dCByZWFsIFREWCBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24uCgpXYWl0IGEgc2Vjb25k4oCmIEhvdyBkb2VzIHRoaXMgVERYIGhvc3QgZ2V0IGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBMZXQmIzM5O3MgZG8gYSBxdWljayBkaXZlLiBJIHNob3VsZCBjaGVjayBgZ3JlcHBlcmAgYW5kIGxvb2sgaW50byBgYXJjaC94ODYvdmlydC92bXgvdGR4L2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIFREWCBob3N0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfdGR4X21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTE2OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkbXJzKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMTg3LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjExODg6c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4OS17XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEyNzU9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzA0LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMDU6XHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzA2LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFREWCBIb3N0IEluaXRpYWxpemF0aW9uIGFuZCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBURFggaG9zdCBlbnZpcm9ubWVudC4gRmlyc3QsIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHRkeF9lbmFibGVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24sIEkmIzM5O20gc3VyZSwgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBURFggZmVhdHVyZXMgYXJlIGFjdGl2YXRlZC4gS25vd2luZyB3aGVyZSB0aGlzIGlzIGNhbGxlZCBhbmQgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHdpbGwgdGVsbCBtZSBxdWl0ZSBhIGJpdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB3ZSYjMzk7cmUgdXNpbmcgZWFybHkgaW5pdGlhbGl6YXRpb24gdGVjaG5pcXVlcyBvciBkZWZlcnJpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZXNlIGNhbGwgc2l0ZXMgd2l0aCBhbnkgVERYLXNwZWNpZmljIGhvc3QgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzIGNydWNpYWwgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGUgVERYIGVudmlyb25tZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBpZGVudGlmeSBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBub3RlIHdoaWNoIG1vZHVsZXMgYXJlIGluaXRpYWxpemVkIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9lbmFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTUyLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjUzOnN0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0LVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMTg4PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMjc0LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEyNzU6c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzYte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzE3LX1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzE4OnN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzE5LVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMDU3PWJvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIwNTgte1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIwNTk6XHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjA2MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMzM3PXN0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjMzOC17XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjMzOTpcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzQwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEzNwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBURFggRW5hYmxlbWVudCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRkeF9lbmFibGUoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBhcmUgYnJvdWdodCBvbmxpbmUgd2l0aGluIHRoZSBWTVggY29udGV4dC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBjb3JlIG9mIHRoZSBURFggaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM6IHdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQsIHdoYXQgcmVnaXN0ZXJzIGFyZSBtYW5pcHVsYXRlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY29udHJvbCBiaXRzIGFyZSBzZXQgdG8gZW5hYmxlIFREWCBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGFueSBjYWxscyB0byBsb3dlci1sZXZlbCBmdW5jdGlvbnMsIHN1Y2ggYXMgdGhvc2UgcmVsYXRlZCB0byBoYW5kbGluZyBURFgtc3BlY2lmaWMgTVNScyBvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBURFggbW9kdWxlIGl0c2VsZi4gVGhpcyBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBlYXJseSBib290IHN0YWdlcyBhbmQgdGhlIHNlY3VyZSBzZXR1cCBvZiB0aGUgVERYIGVudmlyb25tZW50LCBzbyBJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWxldmVsIGRldGFpbHMgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0ZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOlxuMTI3MTpcdFx0ZnJlZV9kcGFtdF9yZWZjb3VudHMoKTtcbjEyNzI6XHRcdGdvdG8gb3V0X3B1dF90ZHhtZW07XG4xMjczOlx0fVxuMTI3NDpcdFxuMTI3NTpcdHN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbjEyNzY6XHR7XG4xMjc3Olx0XHRlbnVtIGNwdWhwX3N0YXRlIHN0YXRlO1xuMTI3ODpcdFx0aW50IHJldDtcbjEyNzk6XHRcbjEyODA6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcbjEyODE6XHRcdFx0cHJfZXJyKFwmIzM0O1REWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxuXCYjMzQ7KTtcbjEyODI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMjgzOlx0XHR9XG4xMjg0Olx0XG4xMjg1Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWFNBVkUpKSB7XG4xMjg2Olx0XHRcdHByX2VycihcJiMzNDtYU0FWRSBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjEyODc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjg4Olx0XHR9XG4xMjg5Olx0XG4xMjkwOlx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTU9WRElSNjRCKSkge1xuMTI5MTpcdFx0XHRwcl9lcnIoXCYjMzQ7TU9WRElSNjRCIGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMTI5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyOTM6XHRcdH1cbjEyOTQ6XHRcbjEyOTU6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUxGU05PT1ApKSB7XG4xMjk2Olx0XHRcdHByX2VycihcJiMzNDtTZWxmLXNub29wIGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMTI5NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEyOTg6XHRcdH1cbjEyOTk6XHRcbjEzMDA6XHRcdHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7dmlydC90ZHg6b25saW5lXCYjMzQ7LFxuMTMwMTpcdFx0XHRcdFx0ICB0ZHhfb25saW5lX2NwdSwgdGR4X29mZmxpbmVfY3B1KTtcbjEzMDI6XHRcdGlmIChzdGF0ZSBcdTAwM2MgMClcbjEzMDM6XHRcdFx0cmV0dXJuIHN0YXRlO1xuMTMwNDpcdFxuMTMwNTpcdFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XG4xMzA2Olx0XHRpZiAocmV0KSB7XG4xMzA3Olx0XHRcdHByX2VycihcJiMzNDtURFgtTW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxlZCAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuMTMwODpcdFx0XHRjcHVocF9yZW1vdmVfc3RhdGUoc3RhdGUpO1xuMTMwOTpcdFx0XHRyZXR1cm4gcmV0O1xuMTMxMDpcdFx0fVxuMTMxMTpcdFxuMTMxMjpcdFx0cmVnaXN0ZXJfc3lzY29yZShcdTAwMjZ0ZHhfc3lzY29yZSk7XG4xMzEzOlx0XG4xMzE0Olx0XHR0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcbjEzMTU6XHRcdHByX2luZm8oXCYjMzQ7VERYLU1vZHVsZSBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG4xMzE2Olx0XHRyZXR1cm4gMDtcbjEzMTc6XHR9XG4xMzE4Olx0c3Vic3lzX2luaXRjYWxsKHRkeF9lbmFibGUpO1xuMTMxOTpcdFxuMTMyMDpcdGludCB0ZHhfbW9kdWxlX3NodXRkb3duKHZvaWQpXG4xMzIxOlx0e1xuMTMyMjpcdFx0c3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmIGhhbmRvZmYgPSB7fTtcbjEzMjM6XHRcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuMTMyNDpcdFx0aW50IHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI1MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFREWCBIb3N0IFBsYXRmb3JtIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAuICBGaXJzdCB0aGluZ3MgZmlyc3Q6IHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgKmRlZmluZWQqIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmRldGVjdGVkKiBpbiB0aGUgY29kZT8gIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwLiAgR290dGEgdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIHJldmVhbHMgYWJvdXQgdGhpcyBURFggaG9zdCBwbGF0Zm9ybSBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIwMC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NEUF9MM1x0XHQoIDcqMzImIzQzOyA2KSAvKiBcJiMzNDtjZHBfbDNcJiMzNDsgQ29kZSBhbmQgRGF0YSBQcmlvcml0aXphdGlvbiBMMyAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMDE6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STVx0KCA3KjMyJiM0MzsgNykgLyogXCYjMzQ7dGR4X2hvc3RfcGxhdGZvcm1cJiMzNDsgUGxhdGZvcm0gc3VwcG9ydHMgYmVpbmcgYSBURFggaG9zdCAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMDItI2RlZmluZSBYODZfRkVBVFVSRV9IV19QU1RBVEVcdFx0KCA3KjMyJiM0MzsgOCkgLyogXCYjMzQ7aHdfcHN0YXRlXCYjMzQ7IEFNRCBIVy1QU3RhdGUgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTM0Njc9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM0OTg6XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTktXHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEyNzU9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMjc5LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEyODA6XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI4MS1cdFx0cHJfZXJyKFwmIzM0O1REWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQxNz1zdGF0aWMgYm9vbCBwYWRkcl9pc190ZHhfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHBoeXMpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0MjMtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQyNDpcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSlcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDI1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODA9dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTYzMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjMyOlx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTYzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMTEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVERYIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIFREWCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIGB0ZHhfaW5pdGAgd2l0aGluIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLCBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgMTU4MCB0aHJvdWdoIDE2NDAuIFRoaXMgcmFuZ2UgdHlwaWNhbGx5IGhvbGRzIGNyaXRpY2FsIHNldHVwIGZ1bmN0aW9ucywgcG90ZW50aWFsIHNlY3VyaXR5IGNoZWNrcywgb3IgY29uZmlndXJhdGlvbiBzdGVwcyBkaXJlY3RseSByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgVERYIGFyZSBiZWluZyBpbml0aWFsaXplZCBpbiByZWxhdGlvbiB0byBJbnRlbCYjMzk7cyBhcmNoaXRlY3R1cmUuIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBjb25jZXJuaW5nIGd1ZXN0IGNvbnRleHQgaW5pdGlhbGl6YXRpb24sIFREWCBtb2R1bGUgcmVnaXN0cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBoYW5kbGluZyBvciB2ZXJpZmljYXRpb24gcHJvY2Vzc2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1ODA6XHR2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuMTU4MTpcdHtcbjE1ODI6XHRcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XG4xNTgzOlx0XHRpbnQgZXJyO1xuMTU4NDpcdFxuMTU4NTpcdFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFx1MDAyNm5yX3RkeF9rZXlpZHMpO1xuMTU4NjpcdFx0aWYgKGVycilcbjE1ODc6XHRcdFx0cmV0dXJuO1xuMTU4ODpcdFxuMTU4OTpcdFx0cHJfaW5mbyhcJiMzNDtCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXG5cJiMzNDssXG4xNTkwOlx0XHRcdFx0dGR4X2tleWlkX3N0YXJ0LCB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgbnJfdGR4X2tleWlkcyk7XG4xNTkxOlx0XG4xNTkyOlx0XHQvKlxuMTU5MzpcdFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IHRvIHByb3RlY3RcbjE1OTQ6XHRcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJiMzOTtzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJiMzOTt0IGJlXG4xNTk1Olx0XHQgKiBhbnkgbGVmdCBmb3IgVERYIGd1ZXN0cyB0aHVzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcbjE1OTY6XHRcdCAqIGF0IGFsbC5cbjE1OTc6XHRcdCAqL1xuMTU5ODpcdFx0aWYgKG5yX3RkeF9rZXlpZHMgXHUwMDNjIDIpIHtcbjE1OTk6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxuXCYjMzQ7KTtcbjE2MDA6XHRcdFx0cmV0dXJuO1xuMTYwMTpcdFx0fVxuMTYwMjpcdFxuMTYwMzpcdFx0LypcbjE2MDQ6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXG4xNjA1Olx0XHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbjE2MDY6XHRcdCAqL1xuMTYwNzpcdFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XG4xNjA4Olx0XHRcdHByX2VycihcJiMzNDtpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcblwmIzM0Oyk7XG4xNjA5Olx0XHRcdHJldHVybjtcbjE2MTA6XHRcdH1cbjE2MTE6XHRcbjE2MTI6XHRcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcbjE2MTM6XHRcdGlmIChlcnIpIHtcbjE2MTQ6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXG5cJiMzNDssXG4xNjE1Olx0XHRcdFx0XHRlcnIpO1xuMTYxNjpcdFx0XHRyZXR1cm47XG4xNjE3Olx0XHR9XG4xNjE4Olx0XG4xNjE5Olx0I2lmIGRlZmluZWQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxuMTYyMDpcdFx0cHJfaW5mbyhcJiMzNDtEaXNhYmxlIEFDUEkgUzMuIFR1cm4gb2ZmIFREWCBpbiB0aGUgQklPUyB0byB1c2UgQUNQSSBTMy5cXG5cJiMzNDspO1xuMTYyMTpcdFx0YWNwaV9zdXNwZW5kX2xvd2xldmVsID0gTlVMTDtcbjE2MjI6XHQjZW5kaWZcbjE2MjM6XHRcbjE2MjQ6XHRcdC8qXG4xNjI1Olx0XHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IGFuZFxuMTYyNjpcdFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXG4xNjI3Olx0XHQgKi9cbjE2Mjg6XHRcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XG4xNjI5Olx0XHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgMTtcbjE2MzA6XHRcdHRkeF9ucl9ndWVzdF9rZXlpZHMgPSBucl90ZHhfa2V5aWRzIC0gMTtcbjE2MzE6XHRcbjE2MzI6XHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xuMTYzMzpcdFxuMTYzNDpcdFx0Y2hlY2tfdGR4X2VycmF0dW0oKTtcbjE2MzU6XHR9XG4xNjM2Olx0XG4xNjM3Olx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X2dldF9zeXNpbmZvKHZvaWQpXG4xNjM4Olx0e1xuMTYzOTpcdFx0aWYgKCF0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgaW4gdGhlIFREWCBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGlzIHRoZSBUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24gKFREWCkgaG9zdCBlbnZpcm9ubWVudCBhY3R1YWxseSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGNvbnRleHQgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IG15IGludmVzdGlnYXRpb25zIGZyb20gYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBMZXQgbWUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQ2Nz1jb25zdCBjaGFyICp0ZHhfZHVtcF9tY2VfaW5mbyhzdHJ1Y3QgbWNlICptKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDc3LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE0Nzg6c3RhdGljIF9faW5pdCBpbnQgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyh1MzIgKnRkeF9rZXlpZF9zdGFydCxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDc5LVx0XHRcdFx0XHQgICAgdTMyICpucl90ZHhfa2V5aWRzKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNTgwPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODQtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTU4NTpcdGVyciA9IHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcoXHUwMDI2dGR4X2tleWlkX3N0YXJ0LCBcdTAwMjZucl90ZHhfa2V5aWRzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTg2LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MjYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgdGR4LmNgIHRvIFVuZGVyc3RhbmQgS2V5IFBhcnRpdGlvbmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgVERYIGhhbmRsZXMgaXRzIHJlY29yZCBrZXkgSUQgcGFydGl0aW9uaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCBWTVggdmlydHVhbGl6YXRpb24uIFRoZSB0YXJnZXQgaXMgdGhlIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIFREWCBtb2R1bGUgZmlndXJlcyBvdXQgaG93IHRvIHNsaWNlIGFuZCBkaWNlIHRoZSByZWNvcmQga2V5IElEcy4mIzM0OyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIGFuZCBwYXJ0aXRpb25zIHRoZXNlIElEcywgbGlrZWx5IHJlbGF0ZWQgdG8gc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MgY29udHJvbCB3aXRoaW4gdGhlIFREWCBlbnZpcm9ubWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBURFggZW5zdXJlcyB0aGUgaXNvbGF0aW9uIGFuZCBpbnRlZ3JpdHkgb2YgcHJvdGVjdGVkIHZpcnR1YWwgbWFjaGluZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHVzZWQgaGVyZSwgYXMgdGhleSYjMzk7bGwgbGlrZWx5IHJldmVhbCB0aGUgcGFydGl0aW9uaW5nIHN0cmF0ZWd5IGFuZCBhbnkgYXNzb2NpYXRlZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NzU6XHRcdHJldHVybiBcJiMzNDtURFggcHJpdmF0ZSBtZW1vcnkgZXJyb3IuIFBvc3NpYmxlIGtlcm5lbCBidWcuXCYjMzQ7O1xuMTQ3NjpcdH1cbjE0Nzc6XHRcbjE0Nzg6XHRzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxuMTQ3OTpcdFx0XHRcdFx0XHQgICAgdTMyICpucl90ZHhfa2V5aWRzKVxuMTQ4MDpcdHtcbjE0ODE6XHRcdHUzMiBfbnJfbWt0bWVfa2V5aWRzLCBfdGR4X2tleWlkX3N0YXJ0LCBfbnJfdGR4X2tleWlkcztcbjE0ODI6XHRcdHN0cnVjdCBtc3IgdmFsO1xuMTQ4MzpcdFx0aW50IHJldDtcbjE0ODQ6XHRcbjE0ODU6XHRcdC8qXG4xNDg2Olx0XHQgKiBJQTMyX01LVE1FX0tFWUlEX1BBUlRJT05JTkc6XG4xNDg3Olx0XHQgKiAgIEJpdCBbMzE6MF06XHROdW1iZXIgb2YgTUtUTUUgS2V5SURzLlxuMTQ4ODpcdFx0ICogICBCaXQgWzYzOjMyXTpcdE51bWJlciBvZiBURFggcHJpdmF0ZSBLZXlJRHMuXG4xNDg5Olx0XHQgKi9cbjE0OTA6XHRcdHJldCA9IHJkbXNycV9zYWZlKE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgXHUwMDI2dmFsLnEpO1xuMTQ5MTpcdFx0X25yX21rdG1lX2tleWlkcyA9IHZhbC5sO1xuMTQ5MjpcdFx0X25yX3RkeF9rZXlpZHMgPSB2YWwuaDtcbjE0OTM6XHRcdGlmIChyZXQgfHwgIV9ucl90ZHhfa2V5aWRzKVxuMTQ5NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0OTU6XHRcbjE0OTY6XHRcdC8qIFREWCBLZXlJRHMgc3RhcnQgYWZ0ZXIgdGhlIGxhc3QgTUtUTUUgS2V5SUQuICovXG4xNDk3Olx0XHRfdGR4X2tleWlkX3N0YXJ0ID0gX25yX21rdG1lX2tleWlkcyAmIzQzOyAxO1xuMTQ5ODpcdFxuMTQ5OTpcdFx0KnRkeF9rZXlpZF9zdGFydCA9IF90ZHhfa2V5aWRfc3RhcnQ7XG4xNTAwOlx0XHQqbnJfdGR4X2tleWlkcyA9IF9ucl90ZHhfa2V5aWRzO1xuMTUwMTpcdFxuMTUwMjpcdFx0cmV0dXJuIDA7XG4xNTAzOlx0fVxuMTUwNDpcdFxuMTUwNTpcdHN0YXRpYyBib29sIGlzX3RkeF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbjE1MDY6XHR7XG4xNTA3Olx0XHRzdHJ1Y3QgdGR4X21lbWJsb2NrICp0bWI7XG4xNTA4Olx0XG4xNTA5Olx0XHQvKlxuMTUxMDpcdFx0ICogVGhpcyBjaGVjayBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0X3Bmblx1MDAzYy1cdTAwM2VlbmRfcGZuIHJhbmdlIGRvZXMgbm90XG4xNTExOlx0XHQgKiBjcm9zcyBtdWx0aXBsZSBAdGR4X21lbWxpc3QgZW50cmllcy4gIEEgc2luZ2xlIG1lbW9yeSBvbmxpbmVcbjE1MTI6XHRcdCAqIGV2ZW50IGFjcm9zcyBtdWx0aXBsZSBtZW1ibG9ja3MgKGZyb20gd2hpY2ggQHRkeF9tZW1saXN0XG4xNTEzOlx0XHQgKiBlbnRyaWVzIGFyZSBkZXJpdmVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbikgaXNcbjE1MTQ6XHRcdCAqIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgYmVjYXVzZSBtZW1vcnkgb2ZmbGluZS9vbmxpbmUgaXMgZG9uZVxuMTUxNTpcdFx0ICogb24gZ3JhbnVsYXJpdHkgb2YgJiMzOTtzdHJ1Y3QgbWVtb3J5X2Jsb2NrJiMzOTssIGFuZCB0aGUgaG90cGx1Z2dhYmxlXG4xNTE2Olx0XHQgKiBtZW1vcnkgcmVnaW9uIChvbmUgbWVtYmxvY2spIG11c3QgYmUgbXVsdGlwbGUgb2YgbWVtb3J5X2Jsb2NrLlxuMTUxNzpcdFx0ICovXG4xNTE4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtYiwgXHUwMDI2dGR4X21lbWxpc3QsIGxpc3QpIHtcbjE1MTk6XHRcdFx0aWYgKHN0YXJ0X3BmbiBcdTAwM2U9IHRtYi1cdTAwM2VzdGFydF9wZm4gXHUwMDI2XHUwMDI2IGVuZF9wZm4gXHUwMDNjPSB0bWItXHUwMDNlZW5kX3BmbilcbjE1MjA6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjE1MjE6XHRcdH1cbjE1MjI6XHRcdHJldHVybiBmYWxzZTtcbjE1MjM6XHR9XG4xNTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBURFggSG9zdCBTdXBwb3J0IGluIHRoZSBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGByZG1zcnFfc2FmZShNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsICZhbXA7dmFsLnEpYC4gVGhpcyBwb2ludHMgZGlyZWN0bHkgdG8gVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykga2V5IElEIHBhcnRpdGlvbmluZywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIGhvc3QgZW52aXJvbm1lbnQuIEludGVsIFREWCBtYW5kYXRlcyBzcGVjaWZpYyBoYXJkd2FyZTogU2FwcGhpcmUgUmFwaWRzIG9yIG5ld2VyIFhlb24sIHdpdGggU0VBTVJSIGFuZCBhIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBmaXJtd2FyZS4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBlbXVsYXRlIGEgVERYIGhvc3QgdXNpbmcgUUVNVT8gQW5kLCBhIGZvbGxvdy11cDogY2FuIHdlIGFjaGlldmUgdGhpcyB3aXRoaW4gYSBRRU1VIGluc3RhbmNlIG9uIGEgR0NFIChHb29nbGUgQ29tcHV0ZSBFbmdpbmUpIFZNPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgbmVnYXRpdmUuIFN0YW5kYXJkIFFFTVUsIGFuZCB0aGVyZWZvcmUgR0NFIFZNcywgKmRvbiYjMzk7dCogZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIGNvbXBvbmVudHM6IFNFQU1SUiwgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB0aGUgVERYIG1vZHVsZSwgb3IgdGhlIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgIE1TUi4KClNvLCB3aGVyZSBpcyB0aGUgZm9jdXMgb2YgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbj8gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzICpob3N0KiBURFggc3VwcG9ydCwgYXMgZXZpZGVuY2VkIGJ5IHRoZSBmaWxlIHBhdGhzIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gQ2FuIHRoaXMgVERYIGhvc3QgY29kZSwgb3IgS1ZNIFREWCBob3N0IGNvZGUsIGJlIHRyaWdnZXJlZCB3aXRob3V0IHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBURFggaGFyZHdhcmU/CgpMZXQmIzM5O3MgZGVsdmUgZGVlcGVyIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBXaXRoaW4gdGhhdCwgSSBzZWUgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBhbmQgdGhlIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBXaGF0IGlzIGBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpYCBleGFjdGx5PyBFeGFtaW5pbmcgYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhgLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpYC4gVGhpcyBzaWduaWZpZXMgYW4gb3B0aW9uYWwgY2FsbCB0aGF0IHJldHVybnMgMCBpZiBub3QgaW1wbGVtZW50ZWQuCgpOb3csIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBJIHNlZSB0aGF0IGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7YCBpcyBhc3NpZ25lZCAqb25seSBpZiogYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pYCBpcyB0cnVlLiBGb3Igbm9uLVREWCBlbnZpcm9ubWVudHMgKHN0YW5kYXJkIFZNWCBvciBTVk0pLCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGBOVUxMYCAoZHVlIHRvIGBPUFRJT05BTF9SRVQwYCksIGVuc3VyaW5nIGEgcmV0dXJuIG9mIDAuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uLgoKU28sIHRvIHN1bW1hcml6ZSBhbmQgY29uZmlybSBteSBzdXNwaWNpb25zLCBJIG5lZWQgdG8ga25vdyB3aGVuIGB2dF94ODZfb3BzYCBvciBgdGR4X2hhcmR3YXJlX3NldHVwYCBhcmUgY2FsbGVkLiBUaGlzIHdvdWxkIGlsbHVtaW5hdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFREWC1zcGVjaWZpYyBob3N0IGNvZGUgaXMgaW5pdGlhbGl6ZWQgYW5kIGV4ZWN1dGVkLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aG9zZSBpZGVudGlmaWVycyB3aXRoaW4gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfaGFyZHdhcmVfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQ9c3RhdGljIF9faW5pdCBpbnQgdnRfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyOlx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMzg4PXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzOTItXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzOTM6c3RhdGljIGludCBfX2luaXQgX190ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM5NC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY2LVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDY3OmludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0Njgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUwMi1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzUwMzpcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTA0LVx0aWYgKHIpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTktXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEwOmludCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTExLXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTY3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gVERYIFNldHVwIGluIEtWTS94ODYqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBhcmUgYmVpbmcgc2V0IHVwIGluIHRoZSBLVk0veDg2IGVudmlyb25tZW50LiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGNvcmUgVk1YIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIEkgcmVjYWxsIHRoYXQgdGhlIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGhlcmUuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25zIGZvciBURFggYXJlIGxpa2VseSBvY2N1cnJpbmcuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbjsgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwcm9jZXNzb3ImIzM5O3MgVERYLXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nLiBJIGV4cGVjdCB0byBmaW5kIGRldGFpbHMgb24gZW5hYmxpbmcgVERYLCBjb25maWd1cmluZyB0aGUgVERYIG1vZHVsZSwgYW5kIG1heWJlIGV2ZW4gc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBndWVzdCBlbnZpcm9ubWVudCB3aXRoaW4gYSBURFggY29udGV4dC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDkwOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM0OTE6XHRcdH1cbjM0OTI6XHRcbjM0OTM6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9PU1hTQVZFKSkge1xuMzQ5NDpcdFx0XHRwcl9lcnIoXCYjMzQ7dGR4OiBPU1hTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXG5cJiMzNDspO1xuMzQ5NTpcdFx0XHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XG4zNDk2Olx0XHR9XG4zNDk3Olx0XG4zNDk4Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG4zNDk5Olx0XHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4zNTAwOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM1MDE6XHRcdH1cbjM1MDI6XHRcbjM1MDM6XHRcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xuMzUwNDpcdFx0aWYgKHIpIHtcbjM1MDU6XHRcdFx0LypcbjM1MDY6XHRcdFx0ICogRGlzYWJsZSBURFggb25seSBidXQgZG9uJiMzOTt0IGZhaWwgdG8gbG9hZCBtb2R1bGUgaWYgdGhlIFREWFxuMzUwNzpcdFx0XHQgKiBtb2R1bGUgY291bGQgbm90IGJlIGxvYWRlZC4gIE5vIG5lZWQgdG8gcHJpbnQgbWVzc2FnZSBzYXlpbmdcbjM1MDg6XHRcdFx0ICogXCYjMzQ7bW9kdWxlIGlzIG5vdCBsb2FkZWRcJiMzNDsgYmVjYXVzZSBpdCB3YXMgcHJpbnRlZCB3aGVuIHRoZSBmaXJzdFxuMzUwOTpcdFx0XHQgKiBTRUFNQ0FMTCBmYWlsZWQuICBEb24mIzM5O3QgYm90aGVyIHVud2luZGluZyB0aGUgUy1FUFQgaG9va3Mgb3JcbjM1MTA6XHRcdFx0ICogdm1fc2l6ZSwgYXMga3ZtX3g4Nl9vcHMgaGF2ZSBhbHJlYWR5IGJlZW4gZmluYWxpemVkIChhbmQgYXJlXG4zNTExOlx0XHRcdCAqIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkKS4gIFRoZSBTLUVQVCBjb2RlIGlzIHVucmVhY2hhYmxlLFxuMzUxMjpcdFx0XHQgKiBhbmQgYWxsb2NhdGluZyBhIGZldyBtb3JlIGJ5dGVzIHBlciBWTSBpbiBhIHNob3VsZC1iZS1yYXJlXG4zNTEzOlx0XHRcdCAqIGZhaWx1cmUgc2NlbmFyaW8gaXMgYSBub24taXNzdWUuXG4zNTE0Olx0XHRcdCAqL1xuMzUxNTpcdFx0XHRpZiAociA9PSAtRU5PREVWKVxuMzUxNjpcdFx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM1MTc6XHRcbjM1MTg6XHRcdFx0cmV0dXJuIHI7XG4zNTE5Olx0XHR9XG4zNTIwOlx0XG4zNTIxOlx0XHRLVk1fU0FOSVRZX0NIRUNLX1ZNX1NUUlVDVF9TSVpFKGt2bV90ZHgpO1xuMzUyMjpcdFxuMzUyMzpcdFx0dnRfeDg2X29wcy52bV9zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCB2dF94ODZfb3BzLnZtX3NpemUsIHNpemVvZihzdHJ1Y3Qga3ZtX3RkeCkpO1xuMzUyNDpcdFxuMzUyNTpcdFx0dnRfeDg2X29wcy5zZXRfZXh0ZXJuYWxfc3B0ZSA9IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGU7XG4zNTI2Olx0XHR2dF94ODZfb3BzLmZyZWVfZXh0ZXJuYWxfc3B0ID0gdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdDtcbjM1Mjc6XHRcbjM1Mjg6XHRcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcbjM1Mjk6XHRcdFx0dnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlO1xuMzUzMDpcdFxuMzUzMTpcdFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XG4zNTMyOlx0XHRyZXR1cm4gMDtcbjM1MzM6XHRcbjM1MzQ6XHRzdWNjZXNzX2Rpc2FibGVfdGR4OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA2MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEzMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFREWCBTdXBwb3J0IGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkeW5hbWljIFBBTVQgKFBhZ2UgQXR0cmlidXRlIFRhYmxlKSBzdXBwb3J0IGluIFREWCBpcyBlbmFibGVkLiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQgaGluZ2VzIG9uIGB0ZHhfZW5hYmxlX2RwYW10YCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRgIGZlYXR1cmUgZmxhZyByZXBvcnRlZCBieSB0aGUgVERYIG1vZHVsZSBpdHNlbGYgdmlhIFNFQU1DQUxMcy4gIEFuZCwgb2YgY291cnNlLCBgdGR4X2VuYWJsZV9kcGFtdGAgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNvIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnNpZGVyLgoKVGhlIFREWCBob3N0IHBsYXRmb3JtIGFsc28gcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzOiBwaHlzaWNhbCBDUFUgc3VwcG9ydCAoYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCksIHRoZSBNU1IgYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AsIHByb3BlciBTRUFNUlIgcmFuZ2UgcmVnaXN0ZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIEJJT1MsIGFuZCBmdW5jdGlvbmluZyBTRUFNQ0FMTHMgdG8gdGhlIEludGVsIFREWCBmaXJtd2FyZSBtb2R1bGUuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBpZGVudGlmaWVkIGluIHNlY3Rpb24gMiBvZiB0aGUgb3JpZ2luYWwgcHJvbXB0IGluY2x1ZGUgdGhlIEludGVsIFREWCBob3N0PyAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgKnllcyouCgpMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIENhbiBzdGFuZGFyZCBRRU1VIGVtdWxhdGUgYSBURFggaG9zdD8gTm8uIFFFTVUgY2FuIG9ubHkgZnVuY3Rpb24gYXMgYSBURFggZ3Vlc3QgdXNpbmcgS1ZNIFREWCBydW5uaW5nIG9uIGEgcmVhbCBURFggaG9zdC4gIFFFTVUgVENHIHNpbXBseSBsYWNrcyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQg4oCTIG5vIFNFQU1SUiwgbm8gU0VBTUNBTEwgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIE1LVE1FIHBhcnRpdGlvbmluZyBNU1IgZW11bGF0aW9uLiAgSW4gYW55IHN0YW5kYXJkIFFFTVUvS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpbyBvciBRRU1VIFRDRywgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCB3aWxsIG5vdCBiZSBwcmVzZW50LiBUaGUgYHJkbXNycV9zYWZlKE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORylgIHdpbGwgaW5ldml0YWJseSBmYWlsLCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC4KClRoZXJlZm9yZSwgdGhlIGB0ZHhfaW5pdCgpYCBmdW5jdGlvbiB3b3VsZCBmYWlsIGVhcmx5IG9uIHdpdGggYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGUga2V5IGJpdCBoZXJlIGlzIHRoZSBmb2xsb3dpbmcgY29kZSBibG9jazoKCmBgYGMKcmV0ID0gcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCAmYW1wO3ZhbC5xKTsKaWYgKHJldCB8fCAhX25yX3RkeF9rZXlpZHMpCiAgICByZXR1cm4gLUVJTlZBTDsKYGBgCgpDb25zZXF1ZW50bHksIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGZsYWcgd2lsbCBuZXZlciBiZSBzZXQuIFRoZSBgdGR4X2VuYWJsZSgpYCBmdW5jdGlvbiB3aWxsIGZhaWwgaW1tZWRpYXRlbHksIGFuZCBgdGR4X2hhcmR3YXJlX3NldHVwKClgIHdpbGwgZmFpbCBhcyB3ZWxsLiBUaGlzIGxlYWRzIHRvIGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlYCByZW1haW5pbmcgTlVMTC4gQXMgYSByZXN1bHQsIGFsbCB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZHluYW1pYyBQQU1UIOKAkyBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAsIGV0Yy4g4oCTIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBFdmVuIGlmIHRoZXkgKndlcmUqIGNhbGxlZCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIHdvdWxkIHJldHVybiBgZmFsc2VgIGltbWVkaWF0ZWx5IGFueXdheSAocmV0dXJuaW5nIDAgaW1tZWRpYXRlbHkpLiBUaGUgVERYIEtWTSBtb2R1bGUsIHdpbGwgbmV2ZXIgZXZlbiBiZSBhYmxlIHRvIGNyZWF0ZSBhIFREWCBWTSB3aXRob3V0IGBlbmFibGVfdGR4YC4KCk5vdywgbGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSByZWNlbnQgY2hhbmdlIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gTXkgdGhpbmtpbmcgbm93IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHBvaW50ZXIsIGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgd2hpY2ggY2FuIHBvaW50IHRvIGEgZnVuY3Rpb24gdG8gaGFuZGxlIGV4dGVybmFsIGNhY2hpbmcgb3BlcmF0aW9ucy4KCmBgYGMKCQlyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKCQlpZiAocikKCQkJcmV0dXJuIHI7CmBgYAoKSSB3aWxsIG5lZWQgdG8gaW52ZXN0aWdhdGUgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgY2FuIGJlIHNldCBhcyBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNTpcdFxuIDYwNjpcdHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuIDYwNzpcdHtcbiA2MDg6XHRcdGludCByO1xuIDYwOTpcdFxuIDYxMDpcdFx0LyogMSBybWFwLCAxIHBhcmVudCBQVEUgcGVyIGxldmVsLCBhbmQgdGhlIHByZWZldGNoZWQgcm1hcHMuICovXG4gNjExOlx0XHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9wdGVfbGlzdF9kZXNjX2NhY2hlLFxuIDYxMjpcdFx0XHRcdFx0ICAgICAgIDEgJiM0MzsgUFQ2NF9ST09UX01BWF9MRVZFTCAmIzQzOyBQVEVfUFJFRkVUQ0hfTlVNKTtcbiA2MTM6XHRcdGlmIChyKVxuIDYxNDpcdFx0XHRyZXR1cm4gcjtcbiA2MTU6XHRcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiA2MTY6XHRcdFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfZXh0ZXJuYWxfc3B0X2NhY2hlLFxuIDYxNzpcdFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gNjE4Olx0XHRcdGlmIChyKVxuIDYxOTpcdFx0XHRcdHJldHVybiByO1xuIDYyMDpcdFxuIDYyMTpcdFx0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiA2MjI6XHRcdFx0aWYgKHIpXG4gNjIzOlx0XHRcdFx0cmV0dXJuIHI7XG4gNjI0Olx0XHR9XG4gNjI1Olx0XHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcbiA2MjY6XHRcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiA2Mjc6XHRcdGlmIChyKVxuIDYyODpcdFx0XHRyZXR1cm4gcjtcbiA2Mjk6XHRcdGlmIChtYXliZV9pbmRpcmVjdCkge1xuIDYzMDpcdFx0XHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dlZF9pbmZvX2NhY2hlLFxuIDYzMTpcdFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gNjMyOlx0XHRcdGlmIChyKVxuIDYzMzpcdFx0XHRcdHJldHVybiByO1xuIDYzNDpcdFx0fVxuIDYzNTpcdFx0cmV0dXJuIGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfcGFnZV9oZWFkZXJfY2FjaGUsXG4gNjM2Olx0XHRcdFx0XHRcdCAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gNjM3Olx0fVxuIDYzODpcdFxuIDYzOTpcdHN0YXRpYyB2b2lkIG1tdV9mcmVlX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0mIzM5O3MgTWlycm9yZWQgVERQIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIEtWTSBjb2RlLCBhbmQgdGhlIGZpcnN0IGxpbmUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LSZndDtrdm0pKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCAqa3ZtX2hhc19taXJyb3JlZF90ZHAqLi4uIHdoYXQmIzM5O3MgdGhhdCBhY3R1YWxseSAqZG8qPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hlY2sgYmVmb3JlIEkgY2FuIHRydWx5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBsb2dpYy4KClRpbWUgdG8gcmVhY2ggZm9yIHRoZSB0cnVzdHkgZ3JlcCBjb21tYW5kLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBvZiBga3ZtX2hhc19taXJyb3JlZF90ZHBgIHdpdGhpbiB0aGUgS1ZNIHNvdXJjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gT25jZSBJIGhhdmUgdGhlIGRlZmluaXRpb24sIEkgY2FuIHN0YXJ0IHRvIGRpc3NlY3QgaG93IHRoZSBtaXJyb3JlZCBURFAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogd2UgbWlnaHQgYmUgY2hlY2tpbmcgZm9yIGl0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9oYXNfbWlycm9yZWRfdGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM5MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0LVx0XHRyZXR1cm4gcjtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE1Olx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXHUwMDNla3ZtKSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTYtXHRcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM5OTA9c3RhdGljIGludCBtbXVfYWxsb2NfZGlyZWN0X3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTgtXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTk6XHRcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQwMDAtXHRcdCAgICAhVkFMSURfUEFHRShtbXUtXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaD0zMD1zdGF0aWMgaW5saW5lIGVudW0ga3ZtX3RkcF9tbXVfcm9vdF90eXBlcyBrdm1fZ2ZuX3JhbmdlX2ZpbHRlcl90b19yb290X3R5cGVzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC0zNC1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjM1Olx0aWYgKCFrdm1faGFzX21pcnJvcmVkX3RkcChrdm0pKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzYtXHRcdHJldHVybiBLVk1fRElSRUNUX1JPT1RTO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc5NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTWlycm9yZWQgVERQIElzc3VlcyBpbiBLVk0qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IFRyYW5zcGFyZW50IFBhZ2UgU2hhcmluZyAoVFBTKSBhbmQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBtYW5hZ2VtZW50IGFyZSBpbnRlcmFjdGluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbWlycm9yZWQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBlbnRyaWVzIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgZXhpc3RlbmNlIGFuZCBkZWZpbml0aW9uIG9mIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgaW4gYGFyY2gveDg2L2t2bS9tbXUuaGAuIFRoaXMgbGlrZWx5IGZsYWdzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyBvciBzdXBwb3J0cyBtaXJyb3JlZCBwYWdlIHRhYmxlcywgcG90ZW50aWFsbHkgaW5mbHVlbmNpbmcgdGhlIE1NVSYjMzk7cyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UsIGFuZCBpbXBvcnRhbnRseSwgd2hpY2ggY29kZSBwYXRocyBhcmUgYWN0aXZlbHkgZXhlY3V0ZWQgaW4gdGhlIHN5c3RlbS4gVGhlIHNwZWNpZmljcyBvZiB0aGUgY2hlY2sgd2lsbCBiZSBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlbiB0cmFjZSBkb3duIGFueSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiAzOTM6XHR7XG4gMzk0Olx0XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbiAzOTU6XHR9XG4gMzk2Olx0XG4gMzk3Olx0c3RhdGljIGlubGluZSBnZm5fdCBrdm1fZ2ZuX2RpcmVjdF9iaXRzKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiAzOTg6XHR7XG4gMzk5Olx0XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzO1xuIDQwMDpcdH1cbiA0MDE6XHRcbiA0MDI6XHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX2FkZHJfZGlyZWN0KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuIDQwMzpcdHtcbiA0MDQ6XHRcdGdwYV90IGdwYV9kaXJlY3RfYml0cyA9IGdmbl90b19ncGEoa3ZtX2dmbl9kaXJlY3RfYml0cyhrdm0pKTtcbiA0MDU6XHRcbiA0MDY6XHRcdHJldHVybiAhZ3BhX2RpcmVjdF9iaXRzIHx8IChncGEgXHUwMDI2IGdwYV9kaXJlY3RfYml0cyk7XG4gNDA3Olx0fVxuIDQwODpcdFxuIDQwOTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faXNfZ2ZuX2FsaWFzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKktWTSBURFggVk0gQ3JlYXRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pYCBmdW5jdGlvbiBpcyBhIHNpbXBsZSBjaGVjazsgaXQgZXNzZW50aWFsbHkgdGVsbHMgdXMgaWYgYSBLVk0gaW5zdGFuY2UgaXMgYSBURFggVk0gYnkgY29tcGFyaW5nIGl0cyBhcmNoaXRlY3R1cmUmIzM5O3MgVk0gdHlwZSB3aXRoIGBLVk1fWDg2X1REWF9WTWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqaG93KiBhIFZNIGlzIGFjdHVhbGx5IGFzc2lnbmVkIHRoZSBgS1ZNX1g4Nl9URFhfVk1gIHR5cGUgZHVyaW5nIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBUaGUga2V5IGlzIHRvIHRyYWNlIHdoZXJlIGBLVk1fWDg2X1REWF9WTWAgaXMgYmVpbmcgdXRpbGl6ZWQgZHVyaW5nIHRoZSBWTSYjMzk7cyBpbnN0YW50aWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLVk0gVk0gY3JlYXRpb24gZmxvdyB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIHRoaXMgc3BlY2lmaWMgdHlwZSBiZWluZyBhc3NpZ25lZC4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBkZXRlcm1pbmUgdGhlIGV4YWN0IHBhdGggYnkgdHJhY2luZyB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9URFhfVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS5oLTM5My17XG5hcmNoL3g4Ni9rdm0vbW11Lmg6Mzk0Olx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzk1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTg9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NjI6XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTYzLVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xODk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xOTQtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxOTU6XHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5Ni1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjEte1xuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MjpcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02My19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA1OD1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3OC1cdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3OTpcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDgwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gS1ZNL1ZNWCBDb3JlIExvZ2ljKioKCk9rYXksIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgeDg2IEtWTS9WTVggY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNzAuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgaXQgZGVwZW5kcyBvbiB0aGUgY29udGV4dCwgYnV0IGl0IGNvdWxkIHJlbGF0ZSB0byBWTSBlbnRyeS9leGl0IGhhbmRsaW5nLCBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBzZXR1cCwgb3IgcG90ZW50aWFsbHkgZmF1bHQgbWFuYWdlbWVudCBzcGVjaWZpYyB0byBJbnRlbCYjMzk7cyBWVC14IGV4dGVuc2lvbnMuIEtub3dpbmcgaG93IGRlZXBseSBpbnRlZ3JhdGVkIGFuZCBhcmNoaXRlY3R1cmFsbHkgaW1wb3J0YW50IFZNWCBpcywgSSBiZXQgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGNydWNpYWwuIEZyb20gdGhlcmUgSSBjYW4gZm9sbG93IHRoZSBjYWxsIHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBteSBzcGVjaWZpYyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDYwOlx0XHR1bnNpZ25lZCB2Y3B1X3NpemUsIHZjcHVfYWxpZ247XG4xMDYxOlx0XHRpbnQgcjtcbjEwNjI6XHRcbjEwNjM6XHRcdHIgPSB2bXhfaW5pdCgpO1xuMTA2NDpcdFx0aWYgKHIpXG4xMDY1Olx0XHRcdHJldHVybiByO1xuMTA2NjpcdFxuMTA2NzpcdFx0LypcbjEwNjg6XHRcdCAqIFREWCBhbmQgVk1YIGhhdmUgZGlmZmVyZW50IHZDUFUgc3RydWN0dXJlcy4gIENhbGN1bGF0ZSB0aGVcbjEwNjk6XHRcdCAqIG1heGltdW0gc2l6ZS9hbGlnbiBzbyB0aGF0IGt2bV9pbml0KCkgY2FuIHVzZSB0aGUgbGFyZ2VyXG4xMDcwOlx0XHQgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBrbWVtX3ZjcHVfY2FjaGUuXG4xMDcxOlx0XHQgKi9cbjEwNzI6XHRcdHZjcHVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmNwdV92bXgpO1xuMTA3MzpcdFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XG4xMDc0Olx0XHRpZiAoZW5hYmxlX3RkeCkge1xuMTA3NTpcdFx0XHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxuMTA3NjpcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2Y3B1X3RkeCkpO1xuMTA3NzpcdFx0XHR2Y3B1X2FsaWduID0gbWF4X3QodW5zaWduZWQsIHZjcHVfYWxpZ24sXG4xMDc4Olx0XHRcdFx0XHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcbjEwNzk6XHRcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XG4xMDgwOlx0XHR9XG4xMDgxOlx0XG4xMDgyOlx0XHQvKlxuMTA4MzpcdFx0ICogQ29tbW9uIEtWTSBpbml0aWFsaXphdGlvbiBfbXVzdF8gY29tZSBsYXN0LCBhZnRlciB0aGlzLCAvZGV2L2t2bSBpc1xuMTA4NDpcdFx0ICogZXhwb3NlZCB0byB1c2Vyc3BhY2UhXG4xMDg1Olx0XHQgKi9cbjEwODY6XHRcdHIgPSBrdm1faW5pdCh2Y3B1X3NpemUsIHZjcHVfYWxpZ24sIFRISVNfTU9EVUxFKTtcbjEwODc6XHRcdGlmIChyKVxuMTA4ODpcdFx0XHRnb3RvIGVycl9rdm1faW5pdDtcbjEwODk6XHRcbjEwOTA6XHRcdHJldHVybiAwO1xuMTA5MTpcdFxuMTA5MjpcdGVycl9rdm1faW5pdDpcbjEwOTM6XHRcdHZteF9leGl0KCk7XG4xMDk0Olx0XHRyZXR1cm4gcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqTmF2aWdhdGluZyB0aGUgVERYIEltcGxlbWVudGF0aW9uIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBURFggaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gS1ZNJiMzOTtzIFZNWCBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKGVuYWJsZV90ZHgpYCBpbiBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLiBDbGVhcmx5LCB0aGlzIGlzIGEgcGl2b3RhbCBkZWNpc2lvbiBwb2ludCByZWxhdGVkIHRvIHdoZXRoZXIgb3Igbm90IFREWCBmZWF0dXJlcyBhcmUgYWN0aXZhdGVkIGR1cmluZyBWTSBleGVjdXRpb24uCgpNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgZW5hYmxlX3RkeGAgdmFyaWFibGUgaXMgYWN0dWFsbHkgYmVpbmcgc2V0LiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggVERYIGlzIGVuYWJsZWQgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUsIGlkZWFsbHkgc3RhcnRpbmcgZnJvbSB0aGlzIGNoZWNrLCB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggYW5kIGhvdyB0aGUgVERYIGVuYWJsaW5nIGRlY2lzaW9uIGlzIHVsdGltYXRlbHkgbWFkZS4gS25vd2luZyB0aGUgc291cmNlIG9mIGBlbmFibGVfdGR4YCB3aWxsIHByb3ZpZGUgaW5zaWdodHMgaW50byBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGhhcmR3YXJlIGNoZWNrcywgb3Igb3RoZXIgcnVudGltZSBjb25kaXRpb25zIHRoYXQgaW5mbHVlbmNlIFREWOKAmXMgb3BlcmF0aW9uYWwgc3RhdGUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgZWl0aGVyIGEgY29uZmlndXJhdGlvbiBmbGFnIG9yIGEgZGV0ZXJtaW5hdGlvbiBtYWRlIGR1cmluZyBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYW5kIHNlY3VyaXR5IHBvbGljaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVfdGR4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2PXN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTgtXHQvKiBOb3RlLCBURFggKmFuZCogVk1YIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVERYIGlzIGVuYWJsZWQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjAtXHRcdHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcdHJldHVybiBlbmFibGVfdGR4ID8gdGR4X2hhcmR3YXJlX3NldHVwKCkgOiAwO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1PXN0YXRpYyB2b2lkIHZ0X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3Olx0aWYgKGVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zOC1cdFx0dGR4X2hhcmR3YXJlX3Vuc2V0dXAoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDczLVx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc0Olx0aWYgKGVuYWJsZV90ZHgpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzUtXHRcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01NS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTY6Ym9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ2Nz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ3NC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ3NTpcdGlmICghZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ3Ni1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM0LXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MzU6XHRlbmFibGVfdGR4ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzNi1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTItXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEzOmV4dGVybiBib29sIGVuYWJsZV90ZHg7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTg3PVREWF9CVUlMRF9URFZQU19BQ0NFU1NPUlMoNjQsIFNUQVRFX05PTl9BUkNILCBzdGF0ZV9ub25fYXJjaCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODktI2Vsc2VcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTkwOiNkZWZpbmUgZW5hYmxlX3RkeFx0MFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xOTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQxCgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDE5MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ29kZSBSZWFjaGFiaWxpdHkgZm9yIFREWCBEeW5hbWljIFBBTVQgU3VwcG9ydCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBEeW5hbWljIFBBTVQgc3VwcG9ydCBmb3IgSW50ZWwgVERYLCBmb2N1c2luZyBvbiBpdHMgcmVhY2hhYmlsaXR5IGluIGEgZnV6emluZyBjb250ZXh0LiBGcm9tIGV4YW1pbmluZyBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgYW5kIHJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDM1MzUsIGEgY2xlYXIgcGljdHVyZSBlbWVyZ2VzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRoaXM6IHdpdGhvdXQgc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUg4oCTIGEgcGh5c2ljYWwgVERYLWVuYWJsZWQgaG9zdCDigJMgdGhpcyBjb2RlIHBhdGggKm5ldmVyKiBnZXRzIGhpdC4KClRoZSBgdGR4X2hhcmR3YXJlX3NldHVwKClgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCBjaGVja3MgZm9yIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAuIElmIHRoYXQgZmxhZyBpc24mIzM5O3Qgc2V0LCB3aGljaCBpdCB3b24mIzM5O3QgYmUgb24gc3RhbmRhcmQgaGFyZHdhcmUgb3IgUUVNVSwgdGhlIHNldHVwIGZhaWxzIGFuZCBgZW5hYmxlX3RkeGAgaXMgc2V0IHRvIDAuIFRoaXMsIGluIHR1cm4sIHByZXZlbnRzIGBLVk1fWDg2X1REWF9WTWAgZnJvbSBiZWluZyBzdXBwb3J0ZWQuIENvbnNlcXVlbnRseSwgY3JlYXRpbmcgYSBURFggVk0gdGhyb3VnaCBgaW9jdGwoS1ZNX0NSRUFURV9WTV9UWVBFKWAgd2lsbCBmYWlsIHdpdGggYC1FSU5WQUxgLCBtYWtpbmcgYGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtJmd0O2t2bSlgIGFsd2F5cyBmYWxzZS4KClRoaXMgY3J1Y2lhbCBga3ZtX2hhc19taXJyb3JlZF90ZHAoKWAgY2hlY2sgaXMgdGhlIGdhdGVrZWVwZXIuIFRoZSBNTVUgYnJhbmNoIGNvbnRhaW5pbmcgdGhlIGNhbGxzIHRvIGBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZWAgYW5kIGBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpYCBpbiBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXNgIGlzIGNvbXBsZXRlbHkgYnlwYXNzZWQuICBGdXJ0aGVybW9yZSwgYWxsIHRoZSBuZXcgZnVuY3Rpb25zIHRpZWQgdG8gZHluYW1pYyBQQU1UIChlLmcuLCBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGZ1bmN0aW9ucywgZXRjLikgYXJlIHVucmVhY2hhYmxlLiBUaGUga2VybmVsIHBhcmFtZXRlcnMgZm9yIGR5bmFtaWMgUEFNVCBhcmUgb25seSBwYXJzZWQgaWYgVERYIGlzIGVuYWJsZWQgb24gdGhlIGhvc3QgcGxhdGZvcm0uCgpJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgYm9vdC10aW1lIGZ1bmN0aW9ucyBtb2RpZmllZCwgYW5kIHRoZXkgYWxsIGZhbGwgaW50byB0aGUgc2FtZSB0cmFwLiBGdW5jdGlvbnMgbGlrZSBgdGRtcl9nZXRfcGFtdF9zemAgYW5kIGBpbml0X3RkeF9tb2R1bGUoKWAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmbGFnLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRob3NlIEtWTSBmdW5jdGlvbnMgbGlrZSBgdGR4X3ZjcHVfY3JlYXRlYCBhbmQgYHRkeF9oYXJkd2FyZV9zZXR1cGAuICBUaGVzZSBhbGwgb3BlcmF0ZSB3aXRoaW4gdGhlIFREWCBob3N0IGNvbnRleHQgYW5kIEtWTSBURFggVk0gc2V0dXAuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBndWlkZWxpbmVzLiBUaGlzIGNvZGUgdW5lcXVpdm9jYWxseSBmaXRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYywgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIOKAkyBhbiBJbnRlbCBURFggaG9zdCBwbGF0Zm9ybSB3aXRoIHRoZSBwcm9wZXIgQklPUyBzdXBwb3J0IGFuZCBmaXJtd2FyZSBtb2R1bGUuIFRoaXMgZ29lcyBiZXlvbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy4gSXQmIzM5O3Mgbm90IGp1c3QgdGhhdCBhIGZlYXR1cmUgaXNuJiMzOTt0ICplbmFibGVkKiwgYnV0IHRoYXQgdGhlIGZvdW5kYXRpb25hbCAqaGFyZHdhcmUqIGlzbiYjMzk7dCBwcmVzZW50LgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYSBoYXJkd2FyZSBlbnZpcm9ubWVudCB0aGF0IGlzbiYjMzk7dCByZXBsaWNhdGVkIGluIHRoZSB0eXBpY2FsIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIER5bmFtaWMgUEFNVCAoRFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGhvc3QgaW4gdGhlIGtlcm5lbCBhbmQgS1ZNLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBlbnRpcmVseSBjb25maW5lZCB0byBJbnRlbCBURFggaG9zdCBpbml0aWFsaXphdGlvbiBhbmQgS1ZNIFREWCBndWVzdCBtYW5hZ2VtZW50ICh1bmRlciBhcmNoL3g4Ni92aXJ0L3ZteC90ZHggYW5kIGFyY2gveDg2L2t2bS92bXgvdGR4LmMsIHBsdXMgbWlycm9yZWQgVERQIGhhbmRsaW5nIGd1YXJkZWQgYnkgS1ZNX1g4Nl9URFhfVk0pLiBUaGVzZSBwYXRocyBzdHJpY3RseSByZXF1aXJlIHBoeXNpY2FsIEludGVsIENQVXMgd2l0aCBURFggaG9zdCBwbGF0Zm9ybSBzdXBwb3J0IChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSwgTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBTRUFNUlIsIGFuZCB0aGUgSW50ZWwgVERYIGZpcm13YXJlIG1vZHVsZSksIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDU6NTMuODAwNzEyMjMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MzY4NTI2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgKERQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IGluIHRoZSBrZXJuZWwgYW5kIEtWTS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZW50aXJlbHkgY29uZmluZWQgdG8gSW50ZWwgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gYW5kIEtWTSBURFggZ3Vlc3QgbWFuYWdlbWVudCAodW5kZXIgYXJjaC94ODYvdmlydC92bXgvdGR4IGFuZCBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jLCBwbHVzIG1pcnJvcmVkIFREUCBoYW5kbGluZyBndWFyZGVkIGJ5IEtWTV9YODZfVERYX1ZNKS4gVGhlc2UgcGF0aHMgc3RyaWN0bHkgcmVxdWlyZSBwaHlzaWNhbCBJbnRlbCBDUFVzIHdpdGggVERYIGhvc3QgcGxhdGZvcm0gc3VwcG9ydCAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0sIE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgU0VBTVJSLCBhbmQgdGhlIEludGVsIFREWCBmaXJtd2FyZSBtb2R1bGUpLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDU6NTMuODAwNzIyMTUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgwMTk2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZjNhNWVhYmE5MDNjMjEyNGQ4ZmM2YWQ2NzU1Mjg1Y2U4ZGZkNWNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDI6MDU6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IDY4NjQ3ZmY0YmRkMjQuLmU3NTU4YjgzODJhY2YgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC03NTgyLDYgKzc1ODIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFxuIFxcdHRkZng9XFx0XFx0W0hXLERSTV1cXG4gXFxuK1xcdHRkeF9kcGFtdD1cXG4rXFx0XFx0XFx0W1g4Nl0gQ29udHJvbHMgd2hldGhlciBURFggd2lsbCB1c2UgRHluYW1pYyBQQU1UXFxuK1xcdFxcdFxcdHRvIHNhdmUgbWVtb3J5LCB3aGVuIHN1cHBvcnRlZC5cXG4rXFxuK1xcdFxcdFxcdFZhbGlkIHBhcmFtZXRlcnM6IFxcXCJvblxcXCIsIFxcXCJvZmZcXFwiXFxuK1xcdFxcdFxcdERlZmF1bHQ6IFxcXCJvZmZcXFwiXFxuK1xcbitcXHRcXHRcXHRGb3IgZGV0YWlscyBzZWU6XFxuK1xcdFxcdFxcdERvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbitcXG4gXFx0dGVzdF9zdXNwZW5kPVxcdFtTVVNQRU5EXVxcbiBcXHRcXHRcXHRGb3JtYXQ6IHsgXFxcIm1lbVxcXCIgfCBcXFwic3RhbmRieVxcXCIgfCBcXFwiZnJlZXplXFxcIiB9WyxOXVxcbiBcXHRcXHRcXHRTcGVjaWZ5IFxcXCJtZW1cXFwiIChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFxcXCJzdGFuZGJ5XFxcIiAoZm9yXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbmluZGV4IDMzMDM0OTlhZDRjNmYuLmRlMDk5NjdjZThkOGMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuQEAgLTIwMCw2ICsyMDAsMzMgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlXFxuIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURFxcbiBsYXVuY2ggdGltZSBhbmQgaXMgbm90IGFmZmVjdGVkLlxcbiBcXG4rRHluYW1pYyBQQU1UXFxuKy0tLS0tLS0tLS0tLVxcbitcXG4rVGhlIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1ldGFkYXRhIGluIHdoaWNoIHRoZSBURFhcXG4rbW9kdWxlIGtlZXBzIGRhdGEgYWJvdXQgZWFjaCBwaHlzaWNhbCBwYWdlICh0aGluayBzdHJ1Y3QgcGFnZSkuIFNwYWNlXFxuK2ZvciBpdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIFZNTSwgY29uc3VtZXMgdXAgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW1cXG4rbWVtb3J5IGFuZCBuZWVkcyB0byBiZSBzdXBwbGllZCB0byB0aGUgVERYIG1vZHVsZSB3aGVuIHRoZSBURFggbW9kdWxlIGlzXFxuK2ZpcnN0IGxvYWRlZC5cXG4rXFxuK0R5bmFtaWMgUEFNVCBpcyBhbiBhZGQtb24gZmVhdHVyZSB0aGF0IGFsbG93cyBhIFZNTSB0byBkeW5hbWljYWxseVxcbithbGxvY2F0ZSB0aGUgcGFydCBvZiB0aGUgUEFNVCB3aGljaCB0cmFja3MgNEtCIHBhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlXFxuK2Ftb3VudCBvZiBtZW1vcnkgdGhhdCBURFggY29uc3VtZXMgd2hpbGUgVERzIGFyZSBub3QgaW4gdXNlLlxcbitcXG4rV2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcXG4rXFxuKyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG4rXFxuK0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcXG4rcGFyYW1ldGVyIGlzIHNldCB0byBcXFwib25cXFwiLiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGVcXG4raW50ZXJuYWwgZGV0YWlscyBwcmV2ZW50IER5bmFtaWMgUEFNVCBmcm9tIHdvcmtpbmcgb24gYWxsIGtleWlkIHBhcnRpdGlvbmluZ1xcbitjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluXFxuK2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG9cXG4rZGVmYXVsdCBvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIEludGVsIFREWCBkb2N1bWVudGF0aW9uIGFib3V0XFxuK0R5bmFtaWMgUEFNVC5cXG4rXFxuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggZTIxM2M5YWUzZTMwMS4uNWMzNThjNDBlYWU4YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC05OSw2ICs5OSw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApXFxuIEtWTV9YODZfT1AobG9hZF9tbXVfcGdkKVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXFxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcXG4gS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpXFxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19vZmZzZXQpXFxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDY4M2JiOGJmNDNhOTQuLjU3ZDM3NDkxYzdjMDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMTY0NCw2ICsxNjQ0LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcXG4gXFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xcbiBcXHR2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xcbiBcXG4rXFx0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcXG4gXFxuIFxcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxcbmluZGV4IDg5ZTk3ZDU3NjFkODkuLmUxODZkZmU1YmY4ODUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxcbkBAIC0zNiw2ICszNiw3IEBAXFxuIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovXFxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HXFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRFxcdEJJVF9VTEwoMTgpXFxuKyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRcXHRCSVRfVUxMKDM2KVxcbiBcXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXFxuIFxcbkBAIC0xMTgsMTIgKzExOSwzNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxcbiBcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORztcXG4gfVxcbiBcXG4rYm9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xcbitcXG4rLyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRFBBTVQgcGFnZXMgb3V0c2lkZSBvZiBzcGlubG9ja3MuICovXFxuK3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xcbitcXHRpbnQgY250O1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbGlzdCk7XFxuK1xcdGNhY2hlLVxcdTAwM2VjbnQgPSAwO1xcbit9XFxuK1xcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XFxuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuK2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XFxuK3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xcbitcXG4gaW50IHRkeF9ndWVzdF9rZXlpZF9hbGxvYyh2b2lkKTtcXG4gdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpO1xcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XFxuIFxcbiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuIFxcbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKTtcXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gc3RydWN0IHRkeF90ZCB7XFxuIFxcdC8qIFREIHJvb3Qgc3RydWN0dXJlOiAqL1xcbiBcXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbmluZGV4IDQxMTUwZDU0NjU4OWMuLjhhM2NjMWEyYTQxZTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXFxuQEAgLTEsNyArMSw3IEBAXFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cXG4tI2lmbmRlZiBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxcbi0jZGVmaW5lIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuKy8qIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cXG4rI2lmbmRlZiBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSFxcbisjZGVmaW5lIF9YODZfVklSVF9URFhfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTIxLDYgKzIxLDkgQEAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yIHtcXG4gXFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcXG4gXFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcXG4gXFx0dTE2IHBhbXRfMWdfZW50cnlfc2l6ZTtcXG4rXFxuK1xcdC8qIE9wdGlvbmFsIG1ldGFkYXRhLCBpZiBEUEFNVCBpcyBzdXBwb3J0ZWQgKi9cXG4rXFx0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcXG4gfTtcXG4gXFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjgxNjg2MWNhMjc5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC02MTcsNiArNjE3LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuIFxcdFxcdGlmIChyKVxcbiBcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuK1xcdFxcdHIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xcbitcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcdH1cXG4gXFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjdjNzlmNGQ0YmY5OWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5AQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKVxcbiBcXHRpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UoY3RybF9wYWdlKTtcXG4gfVxcbiBcXG4gc3RydWN0IHRkeF9mbHVzaF92cF9hcmcge1xcbkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiBcXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcXG4gXFxuLVxcdF9fZnJlZV9wYWdlKGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlKTtcXG4gXFx0a3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xcbiB9XFxuIFxcbkBAIC02ODEsNiArNjgxLDggQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICghaXJxY2hpcF9zcGxpdCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHRkeF9pbml0X3BhbXRfY2FjaGUoXFx1MDAyNnRkeC1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcbiBcXHRmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1KTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX3dha2V1cF9saXN0KTtcXG5AQCAtODY2LDYgKzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXFx1MDAyNnRkeC1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcbiBcXHRpZiAodmNwdS1cXHUwMDNlY3B1ICE9IC0xKSB7XFxuIFxcdFxcdEtWTV9CVUdfT04odGR4LVxcdTAwM2VzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LVxcdTAwM2Vrdm0pO1xcbiBcXHRcXHR0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpO1xcbkBAIC0xNjE4LDYgKzE2MjIsMTcgQEAgdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXFxuIFxcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE1pbnVzIG9uZSBwYWdlIHRvIGV4Y2x1ZGUgdGhlIHJvb3QgU1BULCBidXQgcGx1cyBvbmUgcGFnZSBmb3IgYVxcbitcXHQgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLlxcbitcXHQgKi9cXG4rXFx0bWluX25yX3NwdHMgKz0gLTEgKyAxO1xcbitcXG4rXFx0cmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKFxcdTAwMjZ0b190ZHgodmNwdSktXFx1MDAzZXBhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbiBcXHRcXHRcXHQgICAga3ZtX3Bmbl90IHBmbilcXG4ge1xcbkBAIC0xNjc2LDE2ICsxNjkxLDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRcXHRcXHQgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xcbiBcXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XFxuIFxcdHU2NCBlcnIsIGVudHJ5LCBsZXZlbF9zdGF0ZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnNlcHRfcHQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcXG4gXFx0aWYgKCFzZXB0X3B0KVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuK1xcdHJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgXFx1MDAyNnRvX3RkeCh2Y3B1KS1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGVyciA9IHRkaF9tZW1fc2VwdF9hZGQoXFx1MDAyNnRvX2t2bV90ZHgoa3ZtKS1cXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW50cnksIFxcdTAwMjZsZXZlbF9zdGF0ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuQEAgLTE2OTgsOCArMTcyNSwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0ICB1NjQgbmV3X3NwdGUpXFxuIHtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcXG4gXFx0c3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7XFxuIFxcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHQvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovXFxuIFxcdGlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKVxcbkBAIC0xNzA3LDYgKzE3MzksMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcXG4gXFxuIFxcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXFx1MDAyNiBWTVhfRVBUX1JXWF9NQVNLKSAhPSBWTVhfRVBUX1JXWF9NQVNLKTtcXG4gXFxuK1xcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFxcdTAwMjZ0b190ZHgodmNwdSktXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxcbiBcXHQgKiBiZWZvcmUga3ZtX3RkeC1cXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcXG5AQCAtMTcxOSwxMCArMTc1NSwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxcbiBcXHQgKiBJZiB0aGUgVEQgaXNuJ3QgZmluYWxpemVkL3J1bm5hYmxlLCB0aGVuIHVzZXJzcGFjZSBpcyBpbml0aWFsaXppbmdcXG4gXFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShrdm1fdGR4LVxcdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXFxuLVxcdFxcdHJldHVybiB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFx0aWYgKGxpa2VseShrdm1fdGR4LVxcdTAwM2VzdGF0ZSA9PSBURF9TVEFURV9SVU5OQUJMRSkpXFxuK1xcdFxcdHJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0dGR4X3BhbXRfcHV0KHBmbik7XFxuIFxcbi1cXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTE4MTksNiArMTg2MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfcmVtb3ZlX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIoUEZOX1BIWVMocGZuKSwgUEFHRV9TSVpFKTtcXG4rXFx0dGR4X3BhbXRfcHV0KHBmbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xODYyLDYgKzE5MDQsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSxcXG4gICovXFxuIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcXG4ge1xcbitcXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdCA9IHZpcnRfdG9fcGFnZShzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0KTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEtWTSBkb2Vzbid0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlXFxuIFxcdCAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZVxcbkBAIC0xODc1LDE1ICsxOTE5LDE1IEBAIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcXG4gXFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cXG4gXFx0ICovXFxuIFxcdGlmIChLVk1fQlVHX09OKGlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeChrdm0pKSwga3ZtKSB8fFxcbi1cXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXFx1MDAzZWV4dGVybmFsX3NwdCkpKVxcbitcXHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGJlY2F1c2UgUkNVLXRpbWUgZnJlZSBpcyB1bm5lY2Vzc2FyeVxcbi1cXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xcbi1cXHQgKiByZWFkZXJzLlxcbitcXHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydFxcbitcXHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxcbitcXHQgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLlxcbiBcXHQgKi9cXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVxcdTAwM2VleHRlcm5hbF9zcHQpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc2VwdF9wdCk7XFxuIG91dDpcXG4gXFx0c3AtXFx1MDAzZWV4dGVybmFsX3NwdCA9IE5VTEw7XFxuIH1cXG5AQCAtMjQ1Niw3ICsyNTAwLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiBcXG4gXFx0cmV0ID0gLUVOT01FTTtcXG4gXFxuLVxcdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHR0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0aWYgKCF0ZHJfcGFnZSlcXG4gXFx0XFx0Z290byBmcmVlX2hraWQ7XFxuIFxcbkBAIC0yNDY5LDcgKzI1MTMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIFxcdFxcdGdvdG8gZnJlZV90ZHI7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdHRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdFxcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdFxcdGlmICghdGRjc19wYWdlc1tpXSlcXG4gXFx0XFx0XFx0Z290byBmcmVlX3RkY3M7XFxuIFxcdH1cXG5AQCAtMjU4NywxMCArMjYzMSw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gdGVhcmRvd246XFxuIFxcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAnaScgKi9cXG4gXFx0Zm9yICg7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHRkY3NfcGFnZXNbaV0pIHtcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuLVxcdFxcdFxcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4rXFx0XFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0aWYgKCFrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX3BhZ2VzKVxcbiBcXHRcXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcXG5AQCAtMjYwNSwxNiArMjY0NywxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIFxcdGZyZWVfY3B1bWFza192YXIocGFja2FnZXMpO1xcbiBcXG4gZnJlZV90ZGNzOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdGlmICh0ZGNzX3BhZ2VzW2ldKVxcbi1cXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4tXFx0fVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKVxcbitcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuIFxcdGtmcmVlKHRkY3NfcGFnZXMpO1xcbiBcXHRrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX3BhZ2VzID0gTlVMTDtcXG4gXFxuIGZyZWVfdGRyOlxcbi1cXHRpZiAodGRyX3BhZ2UpXFxuLVxcdFxcdF9fZnJlZV9wYWdlKHRkcl9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcXG4gXFx0a3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xcbiBcXG4gZnJlZV9oa2lkOlxcbkBAIC0yOTQ4LDcgKzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcdGludCByZXQsIGk7XFxuIFxcdHU2NCBlcnI7XFxuIFxcbi1cXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRpZiAoIXBhZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UgPSBwYWdlO1xcbkBAIC0yOTY4LDcgKzMwMDcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0XFx0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0XFx0aWYgKCFwYWdlKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV90ZGN4O1xcbkBAIC0yOTkwLDcgKzMwMjksNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcdFxcdFxcdCAqIG1ldGhvZCwgYnV0IHRoZSByZXN0IGFyZSBmcmVlZCBoZXJlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0XFx0XFx0X19mcmVlX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4rXFx0XFx0XFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuIFxcdFxcdFxcdFxcdHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuQEAgLTMwMTgsMTYgKzMwNTcsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXG4gZnJlZV90ZGN4OlxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdGlmICh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXFxuLVxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuK1xcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbiBcXHRcXHR0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xcbiBcXHR9XFxuIFxcdGtmcmVlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlcyk7XFxuIFxcdHRkeC1cXHUwMDNldnAudGRjeF9wYWdlcyA9IE5VTEw7XFxuIFxcbiBmcmVlX3RkdnByOlxcbi1cXHRpZiAodGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlKVxcbi1cXHRcXHRfX2ZyZWVfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlKTtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlID0gTlVMTDtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZHZwcl9wYSA9IDA7XFxuIFxcbkBAIC0zNDg3LDYgKzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFxuIFxcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xcbiBcXHR2dF94ODZfb3BzLmZyZWVfZXh0ZXJuYWxfc3B0ID0gdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdDtcXG4rXFxuK1xcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0dnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlO1xcbitcXG4gXFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG5pbmRleCBhYzgzMjNhNjhiMTYzLi5mZDM2OGUzZWUwNjBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXFxuQEAgLTcyLDYgKzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHtcXG4gXFxuIFxcdHU2NCBtYXBfZ3BhX25leHQ7XFxuIFxcdHU2NCBtYXBfZ3BhX2VuZDtcXG4rXFxuK1xcdHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlO1xcbiB9O1xcbiBcXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xcbmluZGV4IDFiOWZmNzQ5ZGQ4ZTAuLjJhY2FiNmU1ZjVmODcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1c3BlbmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZHIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL21zci1pbmRleC5oXFx1MDAzZVxcbkBAIC00Niw2ICs0NywxMSBAQFxcbiAjaW5jbHVkZSBcXFwic2VhbWNhbGxfaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRkeC5oXFxcIlxcbiBcXG4rLyogTnVtYmVyIG9mIERQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cXG4rI2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMlxcbitcXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XFxuK1xcbiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7XFxuIFxcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdGJvb2wgc3lzaW5pdF9kb25lO1xcbkBAIC02Myw2ICs2OSwxNCBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGR4X2xwX2luaXRpYWxpemVkKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcXG4gXFxuKy8qXFxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIERQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyXFxuKyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXFxuKyAqIHRoZSBEUEFNVCBhdCB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBEUEFNVCByZWZjb3VudHMgYXRcXG4rICogaW5pdGlhbGl6YXRpb24uXFxuKyAqL1xcbitzdGF0aWMgYXRvbWljX3QgKmRwYW10X3JlZmNvdW50cztcXG4rXFxuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXFxuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xcbiBcXG5AQCAtMjUyLDYgKzI2Niw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XFxuIFxcdC5vcHMgPSBcXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogQWxsb2NhdGUgRFBBTVQgcmVmZXJlbmNlIGNvdW50ZXJzIGZvciBhbGwgcGh5c2ljYWwgbWVtb3J5LlxcbisgKlxcbisgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXFxuKyAqL1xcbitzdGF0aWMgX19pbml0IGludCBpbml0X2RwYW10X3JlZmNvdW50cyh2b2lkKVxcbit7XFxuK1xcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKmRwYW10X3JlZmNvdW50cyk7XFxuK1xcbitcXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkcGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xcbitcXHRpZiAoIWRwYW10X3JlZmNvdW50cylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfZHBhbXRfcmVmY291bnRzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZmcmVlKGRwYW10X3JlZmNvdW50cyk7XFxuK1xcdGRwYW10X3JlZmNvdW50cyA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcGFtdF9yZWZjb3VudHNbaW5kZXhdO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBBZGQgYSBtZW1vcnkgcmVnaW9uIGFzIGEgVERYIG1lbW9yeSBibG9jay4gIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmVcXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJ3RcXG5AQCAtNTEwLDM1ICs1NjAsMzcgQEAgc3RhdGljIF9faW5pdCBpbnQgZmlsbF9vdXRfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcXG4rXFx0aW50IGJpdHNfcGVyX2VudHJ5O1xcbitcXG4rXFx0Yml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcXG4rXFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcXG4rXFxuK1xcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDYWxjdWxhdGUgUEFNVCBzaXplIGdpdmVuIGEgVERNUiBhbmQgYSBwYWdlIHNpemUuICBUaGUgcmV0dXJuZWRcXG4gICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuXFxuICAqL1xcbi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgcGFtdF9lbnRyeV9zaXplKVxcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcXG4rXFx0Y29uc3QgaW50IHRkeF9wZ19zaXplX3NoaWZ0W1REWF9QU19OUl0gPSB7IFBBR0VfU0hJRlQsIFBNRF9TSElGVCwgUFVEX1NISUZUIH07XFxuK1xcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcXG4rXFx0XFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXFxuK1xcdFxcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxcbitcXHRcXHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcXG4rXFx0fTtcXG4gXFxuLVxcdHN3aXRjaCAocGdzeikge1xcbi1cXHRjYXNlIFREWF9QU180SzpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBURFhfUFNfMk06XFxuLVxcdFxcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUE1EX1NISUZUO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBURFhfUFNfMUc6XFxuLVxcdFxcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUFVEX1NISUZUO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbitcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdO1xcbitcXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplW3Bnc3pdO1xcbiBcXG4tXFx0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZTtcXG4gXFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cXG4tXFx0cGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7XFxuLVxcbi1cXHRyZXR1cm4gcGFtdF9zejtcXG4rXFx0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTU3NiwxNSArNjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzXFxuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXFxuICAqL1xcbiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxcbi1cXHRcXHRcXHRcXHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGFtdF9zaXplW1REWF9QU19OUl07XFxuLVxcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7XFxuIFxcdHN0cnVjdCBwYWdlICpwYW10O1xcbi1cXHRpbnQgcGdzeiwgbmlkO1xcbitcXHRpbnQgbmlkO1xcbiBcXG4gXFx0bmlkID0gdGRtcl9nZXRfbmlkKHRkbXIsIHRtYl9saXN0KTtcXG4gXFxuQEAgLTU5MiwxMyArNjQwLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcXG4gXFx0ICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuXFxuIFxcdCAqL1xcbi1cXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XFxuLVxcdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcXHUwMDNjIFREWF9QU19OUjsgcGdzeisrKSB7XFxuLVxcdFxcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcXG4tXFx0XFx0XFx0XFx0XFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcXG4tXFx0XFx0dGRtcl9wYW10X3NpemUgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcXG4rXFxuK1xcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcXG4rXFx0XFx0LyogV2l0aCBEUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXFxuK1xcdFxcdHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XFxuIFxcdH1cXG4gXFxuK1xcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplICsgdGRtci1cXHUwMDNlcGFtdF8xZ19zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgb25lIGNodW5rIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZm9yIGFsbFxcbiBcXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcXG5AQCAtNjA2LDI1ICs2NTksMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKi9cXG4gXFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRuaWQsIFxcdTAwMjZub2RlX29ubGluZV9tYXApO1xcbi1cXHRpZiAoIXBhbXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXFxuLVxcdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxcbitcXHQgKiB0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcXG4rXFx0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxcbiBcXHQgKi9cXG4tXFx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xcbi1cXHRcXHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcXG4tXFx0XFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbi1cXHR9XFxuK1xcdGlmICghcGFtdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzRLXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMk1dO1xcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzJtX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzJNXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMUddO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXFx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cXHUwMDNlcGFtdF8ybV9iYXNlICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjU1LDEwICs3MDAsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcl9kb19wYW10X2Z1bmMoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcXHUwMDI2cGFtdF9iYXNlLCBcXHUwMDI2cGFtdF9zaXplKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xcbi1cXHRpZiAoIXBhbXRfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcXG4rXFx0aWYgKCFwYW10X2Jhc2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XFxuQEAgLTY4NCwxNCArNzI2LDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yc19mcmVlX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbiBcXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJzX3NldF91cF9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuIHtcXG4gXFx0aW50IGksIHJldCA9IDA7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGRtcl9saXN0LVxcdTAwM2Vucl9jb25zdW1lZF90ZG1yczsgaSsrKSB7XFxuLVxcdFxcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0cGFtdF9lbnRyeV9zaXplKTtcXG4rXFx0XFx0cmV0ID0gdGRtcl9zZXRfdXBfcGFtdCh0ZG1yX2VudHJ5KHRkbXJfbGlzdCwgaSksIHRtYl9saXN0KTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG5AQCAtOTY4LDE4ICsxMDA4LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcXG4ge1xcbi1cXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF80a19lbnRyeV9zaXplLFxcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfMm1fZW50cnlfc2l6ZSxcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXFxuLVxcdH07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBmaWxsX291dF90ZG1ycyh0bWJfbGlzdCwgdGRtcl9saXN0KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xcbitcXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC05OTgsNiArMTAzMyw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rI2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVRcXHRCSVQoMTYpXFxuK1xcbiBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgIHU2NCBnbG9iYWxfa2V5aWQpXFxuIHtcXG5AQCAtMTAyNiw2ICsxMDYzLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxcbiBcXHRhcmdzLnJjeCA9IF9fcGEodGRtcl9wYV9hcnJheSk7XFxuIFxcdGFyZ3MucmR4ID0gdGRtcl9saXN0LVxcdTAwM2Vucl9jb25zdW1lZF90ZG1ycztcXG4gXFx0YXJncy5yOCA9IGdsb2JhbF9rZXlpZDtcXG4rXFxuK1xcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiRW5hYmxlIER5bmFtaWMgUEFNVFxcXFxuXFxcIik7XFxuK1xcdFxcdGFyZ3MucjggfD0gVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UO1xcbitcXHR9XFxuK1xcbiBcXHRyZXQgPSBzZWFtY2FsbF9wcmVycihUREhfU1lTX0NPTkZJRywgXFx1MDAyNmFyZ3MpO1xcbiBcXG4gXFx0LyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovXFxuQEAgLTExNjcsMTAgKzEyMTAsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuIFxcdCAqL1xcbiBcXHRnZXRfb25saW5lX21lbXMoKTtcXG4gXFxuLVxcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFxcdTAwMjZ0ZHhfbWVtbGlzdCk7XFxuK1xcdHJldCA9IGluaXRfZHBhbXRfcmVmY291bnRzKCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuIFxcbitcXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX2RwYW10X3JlZmNvdW50cztcXG4rXFxuIFxcdC8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgY29uc3RydWN0aW5nIFRETVJzICovXFxuIFxcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcXHUwMDI2dGR4X3RkbXJfbGlzdCwgXFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMjIwLDYgKzEyNjcsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcXG4gXFx0ZnJlZV90ZG1yX2xpc3QoXFx1MDAyNnRkeF90ZG1yX2xpc3QpO1xcbiBlcnJfZnJlZV90ZHhtZW06XFxuIFxcdGZyZWVfdGR4X21lbWxpc3QoXFx1MDAyNnRkeF9tZW1saXN0KTtcXG4rZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOlxcbitcXHRmcmVlX2RwYW10X3JlZmNvdW50cygpO1xcbiBcXHRnb3RvIG91dF9wdXRfdGR4bWVtO1xcbiB9XFxuIFxcbkBAIC0yMDA1LDYgKzIwNTQsMjkzIEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XFxuIFxcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4re1xcbitcXHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFxcdTAwMjYgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcbitcXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcXG4rXFx0aWYgKHBhZ2UpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnBhZ2UtXFx1MDAzZWxydSk7XFxuK1xcdFxcdGNhY2hlLVxcdTAwM2VjbnQtLTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHBhZ2U7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdGlmIChjYWNoZSlcXG4rXFx0XFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xcbitcXG4rXFx0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRpbnQgaSwgajtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkrKykge1xcbitcXHRcXHRwYW10X3BhZ2VzW2ldID0gYWxsb2NfZHBhbXRfcGFnZShjYWNoZSk7XFxuK1xcdFxcdGlmICghcGFtdF9wYWdlc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKVxcbitcXHRcXHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xcbitcXHRcXHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIEhlbHBlciBmb3IgYnVpbGRpbmcgRFBBTVQgc2VhbWNhbGwoKSBhcmd1bWVudHMuICovXFxuK3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB0aGUgMk1CLXdpZGUgRFBBTVQgcmVnaW9uIGZvciAncGZuJzogKi9cXG4rXFx0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgUE1EX1NJWkUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVERYIEFCSSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSBwYWdlIGxldmVsIHRoZSBpbnN0YWxsZWQgRFBBTVRcXG4rXFx0ICogYmFja2luZyB3aWxsIGNvdmVyLCBldmVuIHRob3VnaCB0b2RheSBvbmx5IDJNQiBpcyBzdXBwb3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gaHBhXzJtYiB8IFREWF9QU18yTTtcXG4rfVxcbitcXG4rLyogQWRkIERQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXFxuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXFxuK3tcXG4rXFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xcbitcXHRcXHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXFxuK1xcdFxcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXFxuK1xcdFxcdC5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXFx1MDAyNmFyZ3MpO1xcbit9XFxuK1xcbisvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0fTtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBDb3B5IFBBTVQgcGFnZXMgb3V0IG9mIHRoZSBzdHJ1Y3QgcGVyIHRoZSBURFggQUJJICovXFxuK1xcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xcbitcXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIERQQU1UIG1lbW9yeSAqL1xcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRwYW10X2xvY2spO1xcbitcXG4rLyogQnVtcCBEUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXFxuK2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdO1xcbitcXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9kcGFtdF9yZWZjb3VudChwZm4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIERQQU1UIGVudHJ5IGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXFx1MDAzZT0gMSksXFxuK1xcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8oZHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVubGlrZSB0ZHhfcGFtdF9wdXQoKSB3aGljaCB1c2VzIGF0b21pY19kZWNfYW5kX2xvY2soKSB0b1xcbitcXHQgKiBhdG9taWNhbGx5IGhhbmRsZSB0aGUgMS1cXHUwMDNlMCB0cmFuc2l0aW9uLCB0aGUgZ2V0IHNpZGUgaGFzIG5vXFxuK1xcdCAqIGVxdWl2YWxlbnQgY29tYmluZWQgcHJpbWl0aXZlIGZvciAwLVxcdTAwM2UxLiBSZWNoZWNrIHVuZGVyIHRoZVxcbitcXHQgKiBsb2NrIHNpbmNlIGFub3RoZXIgZ2V0IG1heSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgMC1cXHUwMDNlMVxcbitcXHQgKiB0cmFuc2l0aW9uIGFmdGVyIGJvdGggc2F3IGF0b21pY19pbmNfbm90X3plcm8oKSBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8oZHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXFxuK1xcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cXHUwMDNlMS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZHBhbXRfbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0X2ZyZWU6XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcXG4rXFxuKy8qIERyb3AgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXFxuK3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXSA9IHt9O1xcbitcXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgRFBBTVQgZW50cnksIGRvbid0XFxuK1xcdCAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC5cXG4rXFx0ICovXFxuK1xcdGlmICghYXRvbWljX2RlY19hbmRfbG9jayhkcGFtdF9yZWZjb3VudCwgXFx1MDAyNmRwYW10X2xvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXFxuK1xcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xcbitcXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXFxuK1xcdCAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kXFxuK1xcdCAqIHRoZSBkYW5nbGluZyBEUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC5cXG4rXFx0ICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogYXRvbWljX2RlY19hbmRfbG9jaygpIGFscmVhZHkgZGVjcmVtZW50ZWQgaXQgdG8gMCxcXG4rXFx0XFx0ICogYnV0IHRoZSBEUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGF0b21pY19zZXQoZHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXHRyZXR1cm47XFxuK291dF91bmxvY2s6XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcGFtdF9sb2NrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfcHV0KTtcXG4rXFxuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXG4rXFx0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7XFxuK1xcbitpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuK3tcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRucGFnZXMgKj0gVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UO1xcbitcXG4rXFx0d2hpbGUgKGNhY2hlLVxcdTAwM2VjbnQgXFx1MDAzYyBucGFnZXMpIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcbitcXHRcXHRpZiAoIXBhZ2UpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnBhZ2UtXFx1MDAzZWxydSwgXFx1MDAyNmNhY2hlLVxcdTAwM2VwYWdlX2xpc3QpO1xcbitcXHRcXHRjYWNoZS1cXHUwMDNlY250Kys7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfdG9wdXBfcGFtdF9jYWNoZSk7XFxuK1xcbisvKlxcbisgKiBSZXR1cm4gYSBwYWdlIHRoYXQgY2FuIGJlIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgXFxcImNvbnRyb2xcXFwiXFxuKyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxcbisgKiBndWVzdCwgYW5kIHRodXMgb2J0YWluIFREWCBwcm90ZWN0aW9ucywgaW5jbHVkaW5nIERQQU1UIHRyYWNraW5nLlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcXG4rXFxuKy8qXFxuKyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cXG4rICovXFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4rXFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XFxuK31cXG4rXFxuK19fc2V0dXAoXFxcInRkeF9kcGFtdD1cXFwiLCB0ZHhfZHBhbXRfc2V0dXApO1xcbitcXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG5AQCAtNDgsNiArNDgsOCBAQFxcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXFx0XFx0XFx0NDVcXG4gI2RlZmluZSBUREhfU1lTX1NIVVRET1dOXFx0XFx0NTJcXG4gI2RlZmluZSBUREhfU1lTX1VQREFURVxcdFxcdFxcdDUzXFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERFxcdFxcdDU4XFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVxcdFxcdDU5XFxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXFx0XFx0XFx0NjlcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uOThlYmYxN2FhYjFjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xcbkBAIC0xLDYgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKlxcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbisgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbiAgKlxcbiAgKiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uXFxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cXG5AQCAtMzMsNiArMzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCB2YWw7XFxuK1xcbitcXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuQEAgLTEyOSw1ICsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbiBcXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZF9jdHJsKTtcXG4gXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzb1xcbitcXHQgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQuIERvbid0XFxuK1xcdCAqIHRyeSB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlXFxuK1xcdCAqIERQQU1UIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcXG4rXFx0XFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZG1yKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDU6NTQuMjk5NTEyNDIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2OTkzODAzOTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmYzYTVlYWJhOTAzYzIxMjRkOGZjNmFkNjc1NTI4NWNlOGRmZDVjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDI6MDU6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA2ODY0N2ZmNGJkZDI0Li5lNzU1OGI4MzgyYWNmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtNzU4Miw2ICs3NTgyLDE2IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHR0ZGZ4PVx0XHRbSFcsRFJNXVxuIFxuK1x0dGR4X2RwYW10PVxuK1x0XHRcdFtYODZdIENvbnRyb2xzIHdoZXRoZXIgVERYIHdpbGwgdXNlIER5bmFtaWMgUEFNVFxuK1x0XHRcdHRvIHNhdmUgbWVtb3J5LCB3aGVuIHN1cHBvcnRlZC5cbitcbitcdFx0XHRWYWxpZCBwYXJhbWV0ZXJzOiBcIm9uXCIsIFwib2ZmXCJcbitcdFx0XHREZWZhdWx0OiBcIm9mZlwiXG4rXG4rXHRcdFx0Rm9yIGRldGFpbHMgc2VlOlxuK1x0XHRcdERvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuK1xuIFx0dGVzdF9zdXNwZW5kPVx0W1NVU1BFTkRdXG4gXHRcdFx0Rm9ybWF0OiB7IFwibWVtXCIgfCBcInN0YW5kYnlcIiB8IFwiZnJlZXplXCIgfVssTl1cbiBcdFx0XHRTcGVjaWZ5IFwibWVtXCIgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXCJzdGFuZGJ5XCIgKGZvclxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuaW5kZXggMzMwMzQ5OWFkNGM2Zi4uZGUwOTk2N2NlOGQ4YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5AQCAtMjAwLDYgKzIwMCwzMyBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmVcbiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVERcbiBsYXVuY2ggdGltZSBhbmQgaXMgbm90IGFmZmVjdGVkLlxuIFxuK0R5bmFtaWMgUEFNVFxuKy0tLS0tLS0tLS0tLVxuK1xuK1RoZSBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZXRhZGF0YSBpbiB3aGljaCB0aGUgVERYXG4rbW9kdWxlIGtlZXBzIGRhdGEgYWJvdXQgZWFjaCBwaHlzaWNhbCBwYWdlICh0aGluayBzdHJ1Y3QgcGFnZSkuIFNwYWNlXG4rZm9yIGl0IGlzIGFsbG9jYXRlZCBieSB0aGUgVk1NLCBjb25zdW1lcyB1cCB0byBhYm91dCAwLjQlIG9mIHN5c3RlbVxuK21lbW9yeSBhbmQgbmVlZHMgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIFREWCBtb2R1bGUgd2hlbiB0aGUgVERYIG1vZHVsZSBpc1xuK2ZpcnN0IGxvYWRlZC5cbitcbitEeW5hbWljIFBBTVQgaXMgYW4gYWRkLW9uIGZlYXR1cmUgdGhhdCBhbGxvd3MgYSBWTU0gdG8gZHluYW1pY2FsbHlcbithbGxvY2F0ZSB0aGUgcGFydCBvZiB0aGUgUEFNVCB3aGljaCB0cmFja3MgNEtCIHBhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlXG4rYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCBjb25zdW1lcyB3aGlsZSBURHMgYXJlIG5vdCBpbiB1c2UuXG4rXG4rV2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbitcbisgIFsuLl0gdmlydC90ZHg6IEVuYWJsZSBEeW5hbWljIFBBTVRcbisgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuKyAgWy4uXSB2aXJ0L3RkeDogVERYLU1vZHVsZSBpbml0aWFsaXplZFxuK1xuK0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbitwYXJhbWV0ZXIgaXMgc2V0IHRvIFwib25cIi4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4raW50ZXJuYWwgZGV0YWlscyBwcmV2ZW50IER5bmFtaWMgUEFNVCBmcm9tIHdvcmtpbmcgb24gYWxsIGtleWlkIHBhcnRpdGlvbmluZ1xuK2NvbmZpZ3VyYXRpb25zLiBXaGVuIHRoZSBURFggbW9kdWxlIGlzIGZpeGVkIHRvIGluY2x1ZGUgdGhlc2UgY29uc3RyYWludHMgaW5cbitpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4rZGVmYXVsdCBvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIEludGVsIFREWCBkb2N1bWVudGF0aW9uIGFib3V0XG4rRHluYW1pYyBQQU1ULlxuK1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCBlMjEzYzlhZTNlMzAxLi41YzM1OGM0MGVhZThhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk5LDYgKzk5LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpXG4gS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldClcbiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcilcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uNTdkMzc0OTFjN2MwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNjQ0LDYgKzE2NDQsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xuIFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcbiBcbitcdGludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7XG4gXG4gXHRib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5lMTg2ZGZlNWJmODg1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5AQCAtMzYsNiArMzYsNyBAQFxuIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovXG4gI2RlZmluZSBURFhfRkVBVFVSRVMwX1REX1BSRVNFUlZJTkdcdEJJVF9VTEwoMSlcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRFx0QklUX1VMTCgxOClcbisjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiArMTE5LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfc3VwcG9ydHNfcnVudGltZV91cGRhdGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mXG4gXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX1REX1BSRVNFUlZJTkc7XG4gfVxuIFxuK2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKTtcbitcbisvKiBTaW1wbGUgc3RydWN0dXJlIGZvciBwcmUtYWxsb2NhdGluZyBEUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi9cbitzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XG4rXHRpbnQgY250O1xuK307XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuK1x0Y2FjaGUtXHUwMDNlY250ID0gMDtcbit9XG4rXG4rdm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTtcbitcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuK3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbitcbiBzdHJ1Y3QgdGR4X3RkIHtcbiBcdC8qIFREIHJvb3Qgc3RydWN0dXJlOiAqL1xuIFx0c3RydWN0IHBhZ2UgKnRkcl9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuaW5kZXggNDExNTBkNTQ2NTg5Yy4uOGEzY2MxYTJhNDFlMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5AQCAtMSw3ICsxLDcgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cbi0jaWZuZGVmIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4tI2RlZmluZSBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuKy8qIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cbisjaWZuZGVmIF9YODZfVklSVF9URFhfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4rI2RlZmluZSBfWDg2X1ZJUlRfVERYX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMSw2ICsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XG4gXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xuIFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XG4rXG4rXHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRFBBTVQgaXMgc3VwcG9ydGVkICovXG4rXHR1OCAgcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xuIH07XG4gXG4gc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjgxNjg2MWNhMjc5YyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02MTcsNiArNjE3LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuIFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gXHRcdGlmIChyKVxuIFx0XHRcdHJldHVybiByO1xuK1xuK1x0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0cmV0dXJuIHI7XG4gXHR9XG4gXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcbiBcdFx0XHRcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uN2M3OWY0ZDRiZjk5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpXG4gXHRpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xuIFxuLVx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcbiB9XG4gXG5AQCAtNjgxLDYgKzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHR0ZHhfaW5pdF9wYW10X2NhY2hlKFx1MDAyNnRkeC1cdTAwM2VwYW10X2NhY2hlKTtcbitcbiBcdGZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1KTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWd1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRkeC1cdTAwM2V2dC5waV93YWtldXBfbGlzdCk7XG5AQCAtODY2LDYgKzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuK1x0dGR4X2ZyZWVfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4rXG4gXHRpZiAodmNwdS1cdTAwM2VjcHUgIT0gLTEpIHtcbiBcdFx0S1ZNX0JVR19PTih0ZHgtXHUwMDNlc3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS1cdTAwM2Vrdm0pO1xuIFx0XHR0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpO1xuQEAgLTE2MTgsNiArMTYyMiwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxuK3tcbitcdC8qXG4rXHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcbitcdCAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuXG4rXHQgKi9cbitcdG1pbl9ucl9zcHRzICs9IC0xICsgMTtcbitcbitcdHJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZShcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSwgbWluX25yX3NwdHMpO1xuK31cbitcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0ICAgIGt2bV9wZm5fdCBwZm4pXG4ge1xuQEAgLTE2NzYsMTYgKzE2OTEsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdFx0XHRcdCAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcbiBcdGlmICghc2VwdF9wdClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbitcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGVyciA9IHRkaF9tZW1fc2VwdF9hZGQoXHUwMDI2dG9fa3ZtX3RkeChrdm0pLVx1MDAzZXRkLCBncGEsIGxldmVsLCBzZXB0X3B0LFxuIFx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuK1x0aWYgKGVycilcbitcdFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcbitcbiBcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuQEAgLTE2OTgsOCArMTcyNSwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xuIFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHQvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovXG4gXHRpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSlcbkBAIC0xNzA3LDYgKzE3MzksMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuK1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuK1x0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LypcbiBcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG4gXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuQEAgLTE3MTksMTAgKzE3NTUsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcdCAqIElmIHRoZSBURCBpc24ndCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRpZiAobGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuK1x0XHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHR0ZHhfcGFtdF9wdXQocGZuKTtcbiBcbi1cdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTgxOSw2ICsxODYwLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuK1x0dGR4X3BhbXRfcHV0KHBmbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTg2Miw2ICsxOTA0LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsXG4gICovXG4gc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIHtcbitcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4rXG4gXHQvKlxuIFx0ICogS1ZNIGRvZXNuJ3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGVcbiBcdCAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZVxuQEAgLTE4NzUsMTUgKzE5MTksMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4rXHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKlxuLVx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3Nhcnlcbi1cdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXG4tXHQgKiByZWFkZXJzLlxuK1x0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2Vzbid0IHN1cHBvcnRcbitcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXG4rXHQgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLlxuIFx0ICovXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU2LDcgKzI1MDAsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXG4gXHRyZXQgPSAtRU5PTUVNO1xuIFxuLVx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHR0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghdGRyX3BhZ2UpXG4gXHRcdGdvdG8gZnJlZV9oa2lkO1xuIFxuQEAgLTI0NjksNyArMjUxMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdHRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTg3LDEwICsyNjMxLDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIHRlYXJkb3duOlxuIFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICdpJyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKSB7XG4tXHRcdFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4tXHRcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4tXHRcdH1cbitcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuK1x0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGlmICgha3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzKVxuIFx0XHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbkBAIC0yNjA1LDE2ICsyNjQ3LDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdGZyZWVfY3B1bWFza192YXIocGFja2FnZXMpO1xuIFxuIGZyZWVfdGRjczpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0fVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspXG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbiBcdGtmcmVlKHRkY3NfcGFnZXMpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3Rkcjpcbi1cdGlmICh0ZHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGRyX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTQ4LDcgKzI5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGVycjtcbiBcbi1cdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCFwYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlID0gcGFnZTtcbkBAIC0yOTY4LDcgKzMwMDcsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTAsNyArMzAyOSw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdFx0XHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbitcdFx0XHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUlPO1xuQEAgLTMwMTgsMTYgKzMwNTcsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFxuIGZyZWVfdGRjeDpcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGtmcmVlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzKTtcbiBcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3RkdnByOlxuLVx0aWYgKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDg3LDYgKzM1MjQsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcbiBcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xuIFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XG4rXG4rXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4rXHRcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcbitcbiBcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbmluZGV4IGFjODMyM2E2OGIxNjMuLmZkMzY4ZTNlZTA2MGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG5AQCAtNzIsNiArNzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHgge1xuIFxuIFx0dTY0IG1hcF9ncGFfbmV4dDtcbiBcdHU2NCBtYXBfZ3BhX2VuZDtcbitcbitcdHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlO1xuIH07XG4gXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5pbmRleCAxYjlmZjc0OWRkOGUwLi4yYWNhYjZlNWY1Zjg3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbkBAIC0zMCw2ICszMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbXNyLWluZGV4LmhcdTAwM2VcbkBAIC00Niw2ICs0NywxMSBAQFxuICNpbmNsdWRlIFwic2VhbWNhbGxfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rLyogTnVtYmVyIG9mIERQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cbisjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyXG4rXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xuIFx0Ym9vbCBpbml0aWFsaXplZDtcbiBcdGJvb2wgc3lzaW5pdF9kb25lO1xuQEAgLTYzLDYgKzY5LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbisvKlxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIERQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyXG4rICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcbisgKiB0aGUgRFBBTVQgYXQgdGhlIDJNQiByYW5nZS4gVGhlIGtlcm5lbCBhbGxvY2F0ZXMgRFBBTVQgcmVmY291bnRzIGF0XG4rICogaW5pdGlhbGl6YXRpb24uXG4rICovXG4rc3RhdGljIGF0b21pY190ICpkcGFtdF9yZWZjb3VudHM7XG4rXG4gLyogQWxsIFREWC11c2FibGUgbWVtb3J5IHJlZ2lvbnMuICBQcm90ZWN0ZWQgYnkgbWVtX2hvdHBsdWdfbG9jay4gKi9cbiBzdGF0aWMgTElTVF9IRUFEKHRkeF9tZW1saXN0KTtcbiBcbkBAIC0yNTIsNiArMjY2LDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHtcbiBcdC5vcHMgPSBcdTAwMjZ0ZHhfc3lzY29yZV9vcHMsXG4gfTtcbiBcbisvKlxuKyAqIEFsbG9jYXRlIERQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS5cbisgKlxuKyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cbisgKi9cbitzdGF0aWMgX19pbml0IGludCBpbml0X2RwYW10X3JlZmNvdW50cyh2b2lkKVxuK3tcbitcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKmRwYW10X3JlZmNvdW50cyk7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XG4rXHRpZiAoIWRwYW10X3JlZmNvdW50cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfZHBhbXRfcmVmY291bnRzKHZvaWQpXG4re1xuK1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dmZyZWUoZHBhbXRfcmVmY291bnRzKTtcbitcdGRwYW10X3JlZmNvdW50cyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXG4rXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcGZuIFx1MDAzZVx1MDAzZSAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7XG4rXG4rXHRyZXR1cm4gXHUwMDI2ZHBhbXRfcmVmY291bnRzW2luZGV4XTtcbit9XG4rXG4gLypcbiAgKiBBZGQgYSBtZW1vcnkgcmVnaW9uIGFzIGEgVERYIG1lbW9yeSBibG9jay4gIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmVcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24ndFxuQEAgLTUxMCwzNSArNTYwLDM3IEBAIHN0YXRpYyBfX2luaXQgaW50IGZpbGxfb3V0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xuK1x0aW50IGJpdHNfcGVyX2VudHJ5O1xuK1xuK1x0Yml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbitcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xuK1xuK1x0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XG4rfVxuK1xuIC8qXG4gICogQ2FsY3VsYXRlIFBBTVQgc2l6ZSBnaXZlbiBhIFRETVIgYW5kIGEgcGFnZSBzaXplLiAgVGhlIHJldHVybmVkXG4gICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuXG4gICovXG4tc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3osXG4tXHRcdFx0XHRcdCAgICAgdTE2IHBhbXRfZW50cnlfc2l6ZSlcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbitcdGNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9O1xuK1x0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xuK1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcbitcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXG4rXHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxuK1x0fTtcbiBcbi1cdHN3aXRjaCAocGdzeikge1xuLVx0Y2FzZSBURFhfUFNfNEs6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFREWF9QU18yTTpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQTURfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMUc6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUFVEX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4rXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIHRkeF9wZ19zaXplX3NoaWZ0W3Bnc3pdO1xuK1x0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZVtwZ3N6XTtcbiBcbi1cdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemU7XG4gXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xuLVx0cGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7XG4tXG4tXHRyZXR1cm4gcGFtdF9zejtcbitcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuIH1cbiBcbiAvKlxuQEAgLTU3NiwxNSArNjI4LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfZ2V0X25pZChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cbiAgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcbitcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfc2l6ZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFtdDtcbi1cdGludCBwZ3N6LCBuaWQ7XG4rXHRpbnQgbmlkO1xuIFxuIFx0bmlkID0gdGRtcl9nZXRfbmlkKHRkbXIsIHRtYl9saXN0KTtcbiBcbkBAIC01OTIsMTMgKzY0MCwxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxuIFx0ICogYW5kIHRoZSB0b3RhbCBQQU1UIHNpemUuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9zaXplID0gMDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcbi1cdFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxuLVx0XHRcdFx0XHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xuLVx0XHR0ZG1yX3BhbXRfc2l6ZSArPSBwYW10X3NpemVbcGdzel07XG4rXHR0ZG1yLVx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcbitcdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4rXHRcdC8qIFdpdGggRFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqL1xuK1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xuK1x0fSBlbHNlIHtcbitcdFx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XG4gXHR9XG4gXG4rXHR0ZG1yX3BhbXRfc2l6ZSA9IHRkbXItXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cdTAwM2VwYW10XzJtX3NpemUgKyB0ZG1yLVx1MDAzZXBhbXRfMWdfc2l6ZTtcbitcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsXG4gXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcbkBAIC02MDYsMjUgKzY1OSwxNyBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHQgKi9cbiBcdHBhbXQgPSBhbGxvY19jb250aWdfcGFnZXModGRtcl9wYW10X3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsXG4gXHRcdFx0bmlkLCBcdTAwMjZub2RlX29ubGluZV9tYXApO1xuLVx0aWYgKCFwYW10KVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qXG4tXHQgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGVcbi1cdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxuK1x0ICogdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcbitcdCAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC5cbiBcdCAqL1xuLVx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcbi1cdFx0cGFtdF9iYXNlW3Bnc3pdID0gdGRtcl9wYW10X2Jhc2U7XG4tXHRcdHRkbXJfcGFtdF9iYXNlICs9IHBhbXRfc2l6ZVtwZ3N6XTtcbi1cdH1cbitcdGlmICghcGFtdClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzRLXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMk1dO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzFHXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107XG4rXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTtcbitcdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgKyB0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZTtcbitcdHRkbXItXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgKyB0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02NTUsMTAgKzcwMCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yX2RvX3BhbXRfZnVuYyhzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcdTAwMjZwYW10X2Jhc2UsIFx1MDAyNnBhbXRfc2l6ZSk7XG4gXG4gXHQvKiBEbyBub3RoaW5nIGlmIFBBTVQgaGFzbid0IGJlZW4gYWxsb2NhdGVkIGZvciB0aGlzIFRETVIgKi9cbi1cdGlmICghcGFtdF9zaXplKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKVxuK1x0aWYgKCFwYW10X2Jhc2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XG5AQCAtNjg0LDE0ICs3MjYsMTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJzX2ZyZWVfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4gXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4gXHRpbnQgaSwgcmV0ID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1yczsgaSsrKSB7XG4tXHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCxcbi1cdFx0XHRcdHBhbXRfZW50cnlfc2l6ZSk7XG4rXHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBlcnI7XG4gXHR9XG5AQCAtOTY4LDE4ICsxMDA4LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdFx0XHRcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbi1cdHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMm1fZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QsIHBhbXRfZW50cnlfc2l6ZSk7XG4rXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTk5OCw2ICsxMDMzLDggQEAgc3RhdGljIF9faW5pdCBpbnQgY29uc3RydWN0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rI2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVRcdEJJVCgxNilcbitcbiBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdFx0XHRcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxuIHtcbkBAIC0xMDI2LDYgKzEwNjMsMTIgQEAgc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRhcmdzLnJjeCA9IF9fcGEodGRtcl9wYV9hcnJheSk7XG4gXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1ycztcbiBcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XG4rXG4rXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcbitcdFx0cHJfaW5mbyhcIkVuYWJsZSBEeW5hbWljIFBBTVRcXG5cIik7XG4rXHRcdGFyZ3MucjggfD0gVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UO1xuK1x0fVxuK1xuIFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFx1MDAyNmFyZ3MpO1xuIFxuIFx0LyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovXG5AQCAtMTE2NywxMCArMTIxMCwxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdCAqL1xuIFx0Z2V0X29ubGluZV9tZW1zKCk7XG4gXG4tXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4rXHRyZXQgPSBpbml0X2RwYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbitcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzO1xuK1xuIFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cbiBcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcdTAwMjZ0ZHhfc3lzaW5mby50ZG1yKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIyMCw2ICsxMjY3LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHRmcmVlX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0KTtcbiBlcnJfZnJlZV90ZHhtZW06XG4gXHRmcmVlX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitlcnJfZnJlZV9kcGFtdF9yZWZjb3VudHM6XG4rXHRmcmVlX2RwYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwNSw2ICsyMDU0LDI5MyBAQCB1NjQgdGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKHU2NCBoa2lkLCBrdm1fcGZuX3QgcGZuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTtcbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzeXNpbmZvLVx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBhZ2U7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdGlmIChjYWNoZSlcbitcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuK1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbit9XG4rXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRpbnQgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XG4rXHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbitcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpKyspIHtcbitcdFx0LypcbitcdFx0ICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzXG4rXHRcdCAqIHdoZXJlIHRoZXkgd2VyZSBwYXNzZWQgdG8gdGhlIFREWCBtb2R1bGUuXG4rXHRcdCAqL1xuK1x0XHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpO1xuK1xuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2ldKTtcbitcdH1cbit9XG4rXG4rLyogSGVscGVyIGZvciBidWlsZGluZyBEUEFNVCBzZWFtY2FsbCgpIGFyZ3VtZW50cy4gKi9cbitzdGF0aWMgdTY0IHBhbXRfMm1iX2FyZyhrdm1fcGZuX3QgcGZuKVxuK3tcbitcdC8qIEZpbmQgdGhlIDJNQi13aWRlIERQQU1UIHJlZ2lvbiBmb3IgJ3Bmbic6ICovXG4rXHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgUE1EX1NJWkUpO1xuK1xuK1x0LypcbitcdCAqIFREWCBBQkkgcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgcGFnZSBsZXZlbCB0aGUgaW5zdGFsbGVkIERQQU1UXG4rXHQgKiBiYWNraW5nIHdpbGwgY292ZXIsIGV2ZW4gdGhvdWdoIHRvZGF5IG9ubHkgMk1CIGlzIHN1cHBvcnRlZC5cbitcdCAqL1xuK1x0cmV0dXJuIGhwYV8ybWIgfCBURFhfUFNfMk07XG4rfVxuK1xuKy8qIEFkZCBEUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4rXHRcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXG4rXHRcdC5yOCAgPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1sxXSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFx1MDAyNmFyZ3MpO1xuK31cbitcbisvKiBSZW1vdmUgRFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cbitzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbitcdFx0LnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLFxuK1x0fTtcbitcdHU2NCByZXQ7XG4rXG4rXHRyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgXHUwMDI2YXJncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogQ29weSBQQU1UIHBhZ2VzIG91dCBvZiB0aGUgc3RydWN0IHBlciB0aGUgVERYIEFCSSAqL1xuK1x0cGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7XG4rXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIERQQU1UIG1lbW9yeSAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHBhbXRfbG9jayk7XG4rXG4rLyogQnVtcCBEUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4rXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XG4rXHR1NjQgdGR4X3N0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgRFBBTVQgZW50cnkgaXMgYWxyZWFkeSBhZGRlZCAoaS5lLiByZWZjb3VudCBcdTAwM2U9IDEpLFxuK1x0ICogdGhlbiBqdXN0IGluY3JlbWVudCB0aGUgcmVmY291bnQuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKGRwYW10X3JlZmNvdW50KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4rXG4rXHQvKlxuK1x0ICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvXG4rXHQgKiBhdG9taWNhbGx5IGhhbmRsZSB0aGUgMS1cdTAwM2UwIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm9cbitcdCAqIGVxdWl2YWxlbnQgY29tYmluZWQgcHJpbWl0aXZlIGZvciAwLVx1MDAzZTEuIFJlY2hlY2sgdW5kZXIgdGhlXG4rXHQgKiBsb2NrIHNpbmNlIGFub3RoZXIgZ2V0IG1heSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgMC1cdTAwM2UxXG4rXHQgKiB0cmFuc2l0aW9uIGFmdGVyIGJvdGggc2F3IGF0b21pY19pbmNfbm90X3plcm8oKSBmYWlsLlxuK1x0ICovXG4rXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhkcGFtdF9yZWZjb3VudCkpXG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXG4rXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X2FkZChwZm4sIHBhbXRfcGFnZXMpO1xuK1x0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xuK1x0XHRyZXQgPSAtRUlPO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGVcbitcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cdTAwM2UxLlxuK1x0ICovXG4rXHRhdG9taWNfc2V0KGRwYW10X3JlZmNvdW50LCAxKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X2ZyZWU6XG4rXHRzcGluX3VubG9jayhcdTAwMjZkcGFtdF9sb2NrKTtcbitcdGZyZWVfcGFtdF9hcnJheShwYW10X3BhZ2VzKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpO1xuK1xuKy8qIERyb3AgRFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgRFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4rdm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbilcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307XG4rXHRhdG9taWNfdCAqZHBhbXRfcmVmY291bnQ7XG4rXHR1NjQgdGR4X3N0YXR1cztcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybjtcbitcbitcdGRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfZHBhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIERQQU1UIGVudHJ5LCBkb24ndFxuK1x0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soZHBhbXRfcmVmY291bnQsIFx1MDAyNmRwYW10X2xvY2spKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xuK1xuK1x0LypcbitcdCAqIERvbid0IGZyZWUgcGFtdF9wYWdlcyBhcyBpdCBjb3VsZCBob2xkIGdhcmJhZ2Ugd2hlblxuK1x0ICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJ3QgcGFuaWMvQlVHX09OKCksIGFzXG4rXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXG4rXHQgKiBmYWlsdXJlIGluZGljYXRlcyBhIGtlcm5lbCBidWcsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQsIGFuZFxuK1x0ICogdGhlIGRhbmdsaW5nIERQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsXG4rXHRcdCAqIGJ1dCB0aGUgRFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXG4rXHRcdCAqL1xuK1x0XHRhdG9taWNfc2V0KGRwYW10X3JlZmNvdW50LCAxKTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZHBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXHRyZXR1cm47XG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmRwYW10X2xvY2spO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfcHV0KTtcbitcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcbitcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcbitcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9wYW10X2NhY2hlKTtcbitcbitpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4re1xuK1x0aWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5wYWdlcyAqPSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7XG4rXG4rXHR3aGlsZSAoY2FjaGUtXHUwMDNlY250IFx1MDAzYyBucGFnZXMpIHtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXG4rXHRcdGlmICghcGFnZSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdFx0bGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VscnUsIFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfdG9wdXBfcGFtdF9jYWNoZSk7XG4rXG4rLypcbisgKiBSZXR1cm4gYSBwYWdlIHRoYXQgY2FuIGJlIGdpZnRlZCB0byB0aGUgVERYIG1vZHVsZSBmb3IgdXNlIGFzIGEgXCJjb250cm9sXCJcbisgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcbisgKiBndWVzdCwgYW5kIHRodXMgb2J0YWluIFREWCBwcm90ZWN0aW9ucywgaW5jbHVkaW5nIERQQU1UIHRyYWNraW5nLlxuKyAqL1xuK3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmICh0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4ocGFnZSksIE5VTEwpKSB7XG4rXHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiBwYWdlO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2FsbG9jX2NvbnRyb2xfcGFnZSk7XG4rXG4rLypcbisgKiBGcmVlIGEgcGFnZSB0aGF0IHdhcyBnaWZ0ZWQgdG8gdGhlIFREWCBtb2R1bGUgZm9yIHVzZSBhcyBhIGNvbnRyb2xcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cbisgKi9cbit2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybjtcbitcbitcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7XG4rXHRfX2ZyZWVfcGFnZShwYWdlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XG4rXG4rc3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbit7XG4rXHRyZXR1cm4ga3N0cnRvYm9vbChzdHIsIFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XG4rfVxuK1xuK19fc2V0dXAoXCJ0ZHhfZHBhbXQ9XCIsIHRkeF9kcGFtdF9zZXR1cCk7XG4rXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcbiB7XG4gXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmggYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbmluZGV4IGJkZmQwZTFlMzM3YWMuLmE4ODZjNTRkZWNhYWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuQEAgLTQ4LDYgKzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9BRERcdFx0NThcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkVcdFx0NTlcbiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRVx0XHRcdDY5XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuaW5kZXggZTQ5YzMwMGYyM2Q0My4uOThlYmYxN2FhYjFjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbkBAIC0xLDYgKzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuKyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4gICpcbiAgKiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uXG4gICogb2YgU0VBTUNBTEwgd3JhcHBlciBwcmltaXRpdmUgd2hpY2ggcmVhZHMgZ2xvYmFsIG1ldGFkYXRhLlxuQEAgLTMzLDYgKzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4re1xuK1x0aW50IHJldDtcbitcdHU2NCB2YWw7XG4rXG4rXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFx1MDAyNnZhbCk7XG4rXHRpZiAoIXJldClcbitcdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cyA9IHZhbDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xMjksNSArMTQxLDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jdHJsKTtcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jb25mKTtcbiBcbitcdC8qXG4rXHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IERQQU1ULCBzb1xuK1x0ICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQncyBub3Qgc3VwcG9ydGVkLiBEb24ndFxuK1x0ICogdHJ5IHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2VcbitcdCAqIERQQU1UIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxuK1x0ICovXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcbitcdFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA1OjU0LjI5OTUxNDEzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MzI1MjE5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggRFBBTVQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgdGhlIHBhdGNoIGlzIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQncyBkaWcgaW4uIEZpcnN0LCBJIG5lZWQgdG8gKnVuZGVyc3RhbmQqIHdoYXQgdGhpcyBwYXRjaCBpcyBldmVuIGRvaW5nLiBBaCwgaXQncyBhZGRpbmcgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYLCBzcGVjaWZpY2FsbHkgaW4gdGhlIEtWTSBURFggYW5kIHZpcnQvdm14L3RkeCBjb21wb25lbnRzLiBUaGF0J3MgZ29vZCBpbmZvcm1hdGlvbi5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlIGNvZGUncyBtb2RpZmllZC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgYSBkZWNlbnQgY2h1bmsgb2YgdGhlIGNvZGViYXNlOiBkb2N1bWVudGF0aW9uLCBpbmNsdWRlIGZpbGVzIGluIGBhcmNoL3g4NmAsIGFuZCBzb21lIGtleSBga3ZtYCBkaXJlY3RvcmllcywgZXNwZWNpYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggYHZteGAgYW5kIGB0ZHhgIChpbmNsdWRpbmcgYHRkeF9nbG9iYWxfbWV0YWRhdGFgKS4gVGhhdCBicmVhZHRoIG9mIGNoYW5nZXMgaXMgaW50ZXJlc3RpbmcuIFRoZSBkZWVwZXIgaXQgZ29lcyB0aGUgbW9yZSBvcHBvcnR1bml0eSBmb3IgaGlkZGVuIGVkZ2UgY2FzZXMuXG5cbk5leHQsIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZnV6emFiaWxpdHkgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50cy4gQ2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBmdW5jdGlvbmFsaXR5IGluIFFFTVUgb3IgR0NFPyBEb2VzIHRoZSBURFggaG9zdCAodGhhdCBJbnRlbCBURFggbW9kdWxlL1NFQU1DQUxMKSBmdW5jdGlvbiBwcm9wZXJseSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgd2l0aG91dCByZWFsIFREWCBoYXJkd2FyZT8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiBIb3cgZG9lcyB0aGlzIFREWCBob3N0IGdldCBpbml0aWFsaXplZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gTGV0J3MgZG8gYSBxdWljayBkaXZlLiBJIHNob3VsZCBjaGVjayBgZ3JlcHBlcmAgYW5kIGxvb2sgaW50byBgYXJjaC94ODYvdmlydC92bXgvdGR4L2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIFREWCBob3N0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjAwLjIzMjAzOTA1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxOTUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF90ZHhfbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTE2OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkbXJzKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTExODctXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjExODg6c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTExODkte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEyNzU9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMDQtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMDU6XFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMDYtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjowMC40NzEyNDAyMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTA2OTEwMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVERYIEhvc3QgSW5pdGlhbGl6YXRpb24gYW5kIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVERYIGhvc3QgZW52aXJvbm1lbnQuIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGB0ZHhfZW5hYmxlYC4gVGhhdCdzIHRoZSBrZXkgZnVuY3Rpb24sIEknbSBzdXJlLCBhbmQgaXQgc2hvdWxkIHJldmVhbCB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIFREWCBmZWF0dXJlcyBhcmUgYWN0aXZhdGVkLiBLbm93aW5nIHdoZXJlIHRoaXMgaXMgY2FsbGVkIGFuZCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgd2lsbCB0ZWxsIG1lIHF1aXRlIGEgYml0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgd2UncmUgdXNpbmcgZWFybHkgaW5pdGlhbGl6YXRpb24gdGVjaG5pcXVlcyBvciBkZWZlcnJpbmcgaXQuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlc2UgY2FsbCBzaXRlcyB3aXRoIGFueSBURFgtc3BlY2lmaWMgaG9zdCBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGlkZW50aWZ5IGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIG5vdGUgd2hpY2ggbW9kdWxlcyBhcmUgaW5pdGlhbGl6ZWQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MDQuNTc4MTUyNzQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Njc5NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9lbmFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTM6c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0LVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTExODg9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI3NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTI3NTpzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzYte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTctfVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzE4OnN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMxOS1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMDU3PWJvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMDU4LXtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjA1OTpcXHRpZiAoIXRkeF9lbmFibGVfZHBhbXQpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIwNjAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIzMzc9c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjMzOC17XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIzMzk6XFx0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjM0MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjA0LjY1NDgzNjMxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDEzNTQ2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBURFggRW5hYmxlbWVudCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGB0ZHhfZW5hYmxlKClgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgYXJlIGJyb3VnaHQgb25saW5lIHdpdGhpbiB0aGUgVk1YIGNvbnRleHQuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgVERYIGluaXRpYWxpemF0aW9uLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM6IHdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQsIHdoYXQgcmVnaXN0ZXJzIGFyZSBtYW5pcHVsYXRlZCwgYW5kIHdoYXQgc3BlY2lmaWMgY29udHJvbCBiaXRzIGFyZSBzZXQgdG8gZW5hYmxlIFREWCBmZWF0dXJlcy4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgYW55IGNhbGxzIHRvIGxvd2VyLWxldmVsIGZ1bmN0aW9ucywgc3VjaCBhcyB0aG9zZSByZWxhdGVkIHRvIGhhbmRsaW5nIFREWC1zcGVjaWZpYyBNU1JzIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIFREWCBtb2R1bGUgaXRzZWxmLiBUaGlzIGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVhcmx5IGJvb3Qgc3RhZ2VzIGFuZCB0aGUgc2VjdXJlIHNldHVwIG9mIHRoZSBURFggZW52aXJvbm1lbnQsIHNvIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBsb3ctbGV2ZWwgZGV0YWlscyB0aGF0J2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMzcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjowOC4yOTYxOTQzMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzA6XFx0ZXJyX2ZyZWVfZHBhbXRfcmVmY291bnRzOlxcbjEyNzE6XFx0XFx0ZnJlZV9kcGFtdF9yZWZjb3VudHMoKTtcXG4xMjcyOlxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuMTI3MzpcXHR9XFxuMTI3NDpcXHRcXG4xMjc1OlxcdHN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcXG4xMjc2OlxcdHtcXG4xMjc3OlxcdFxcdGVudW0gY3B1aHBfc3RhdGUgc3RhdGU7XFxuMTI3ODpcXHRcXHRpbnQgcmV0O1xcbjEyNzk6XFx0XFxuMTI4MDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMTI4MTpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4xMjgyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjEyODM6XFx0XFx0fVxcbjEyODQ6XFx0XFxuMTI4NTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWFNBVkUpKSB7XFxuMTI4NjpcXHRcXHRcXHRwcl9lcnIoXFxcIlhTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjEyODc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI4ODpcXHRcXHR9XFxuMTI4OTpcXHRcXG4xMjkwOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NT1ZESVI2NEIpKSB7XFxuMTI5MTpcXHRcXHRcXHRwcl9lcnIoXFxcIk1PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxcXG5cXFwiKTtcXG4xMjkyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyOTM6XFx0XFx0fVxcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xcbjEyOTY6XFx0XFx0XFx0cHJfZXJyKFxcXCJTZWxmLXNub29wIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjEyOTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHRcXG4xMzAwOlxcdFxcdHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXFxcInZpcnQvdGR4Om9ubGluZVxcXCIsXFxuMTMwMTpcXHRcXHRcXHRcXHRcXHQgIHRkeF9vbmxpbmVfY3B1LCB0ZHhfb2ZmbGluZV9jcHUpO1xcbjEzMDI6XFx0XFx0aWYgKHN0YXRlIFxcdTAwM2MgMClcXG4xMzAzOlxcdFxcdFxcdHJldHVybiBzdGF0ZTtcXG4xMzA0OlxcdFxcbjEzMDU6XFx0XFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XFxuMTMwNjpcXHRcXHRpZiAocmV0KSB7XFxuMTMwNzpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuMTMwODpcXHRcXHRcXHRjcHVocF9yZW1vdmVfc3RhdGUoc3RhdGUpO1xcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzEwOlxcdFxcdH1cXG4xMzExOlxcdFxcbjEzMTI6XFx0XFx0cmVnaXN0ZXJfc3lzY29yZShcXHUwMDI2dGR4X3N5c2NvcmUpO1xcbjEzMTM6XFx0XFxuMTMxNDpcXHRcXHR0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4xMzE1OlxcdFxcdHByX2luZm8oXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbjEzMTY6XFx0XFx0cmV0dXJuIDA7XFxuMTMxNzpcXHR9XFxuMTMxODpcXHRzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuMTMxOTpcXHRcXG4xMzIwOlxcdGludCB0ZHhfbW9kdWxlX3NodXRkb3duKHZvaWQpXFxuMTMyMTpcXHR7XFxuMTMyMjpcXHRcXHRzdHJ1Y3QgdGR4X3N5c19pbmZvX2hhbmRvZmYgaGFuZG9mZiA9IHt9O1xcbjEzMjM6XFx0XFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XFxuMTMyNDpcXHRcXHRpbnQgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjowOC4yOTYzMTczMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTQ4NzIwNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFREWCBIb3N0IFBsYXRmb3JtIEZlYXR1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gLiAgRmlyc3QgdGhpbmdzIGZpcnN0OiB3aGVyZSBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkZWZpbmVkKiBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpkZXRlY3RlZCogaW4gdGhlIGNvZGU/ICBUaW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcC4gIEdvdHRhIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHJldmVhbHMgYWJvdXQgdGhpcyBURFggaG9zdCBwbGF0Zm9ybSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI1MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MTIuMjQ1MDQwMDg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzcxNjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMDAtI2RlZmluZSBYODZfRkVBVFVSRV9DRFBfTDNcXHRcXHQoIDcqMzIrIDYpIC8qIFxcXCJjZHBfbDNcXFwiIENvZGUgYW5kIERhdGEgUHJpb3JpdGl6YXRpb24gTDMgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjIwMTojZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNXFx0KCA3KjMyKyA3KSAvKiBcXFwidGR4X2hvc3RfcGxhdGZvcm1cXFwiIFBsYXRmb3JtIHN1cHBvcnRzIGJlaW5nIGEgVERYIGhvc3QgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIwMi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0hXX1BTVEFURVxcdFxcdCggNyozMisgOCkgLyogXFxcImh3X3BzdGF0ZVxcXCIgQU1EIEhXLVBTdGF0ZSAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDY3PWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTctXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDk4OlxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0OTktXFx0XFx0cHJfZXJyKFxcXCJURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTI3NT1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI3OS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTI4MDpcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyODEtXFx0XFx0cHJfZXJyKFxcXCJURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQxNz1zdGF0aWMgYm9vbCBwYWRkcl9pc190ZHhfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHBoeXMpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQyMy1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQyNDpcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0MjUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODA9dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNjMxLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjMyOlxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNjMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjoxMi4zMDg3NjAxNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5MjAzMDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFREWCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgVERYIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgYHRkeF9pbml0YCB3aXRoaW4gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIEknbSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGxpbmVzIDE1ODAgdGhyb3VnaCAxNjQwLiBUaGlzIHJhbmdlIHR5cGljYWxseSBob2xkcyBjcml0aWNhbCBzZXR1cCBmdW5jdGlvbnMsIHBvdGVudGlhbCBzZWN1cml0eSBjaGVja3MsIG9yIGNvbmZpZ3VyYXRpb24gc3RlcHMgZGlyZWN0bHkgcmVsYXRlZCB0byBzZXR0aW5nIHVwIHRoZSBUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFREWCBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gcmVsYXRpb24gdG8gSW50ZWwncyBhcmNoaXRlY3R1cmUuIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBjb25jZXJuaW5nIGd1ZXN0IGNvbnRleHQgaW5pdGlhbGl6YXRpb24sIFREWCBtb2R1bGUgcmVnaXN0cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBoYW5kbGluZyBvciB2ZXJpZmljYXRpb24gcHJvY2Vzc2VzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIxMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjE0LjcwMDc5Mzg0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1ODA6XFx0dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcXG4xNTgxOlxcdHtcXG4xNTgyOlxcdFxcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XFxuMTU4MzpcXHRcXHRpbnQgZXJyO1xcbjE1ODQ6XFx0XFxuMTU4NTpcXHRcXHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFxcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFxcdTAwMjZucl90ZHhfa2V5aWRzKTtcXG4xNTg2OlxcdFxcdGlmIChlcnIpXFxuMTU4NzpcXHRcXHRcXHRyZXR1cm47XFxuMTU4ODpcXHRcXG4xNTg5OlxcdFxcdHByX2luZm8oXFxcIkJJT1MgZW5hYmxlZDogcHJpdmF0ZSBLZXlJRCByYW5nZSBbJXUsICV1KVxcXFxuXFxcIixcXG4xNTkwOlxcdFxcdFxcdFxcdHRkeF9rZXlpZF9zdGFydCwgdGR4X2tleWlkX3N0YXJ0ICsgbnJfdGR4X2tleWlkcyk7XFxuMTU5MTpcXHRcXG4xNTkyOlxcdFxcdC8qXFxuMTU5MzpcXHRcXHQgKiBUaGUgVERYIG1vZHVsZSBpdHNlbGYgcmVxdWlyZXMgb25lICdnbG9iYWwgS2V5SUQnIHRvIHByb3RlY3RcXG4xNTk0OlxcdFxcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJ3Mgb25seSBvbmUgVERYIEtleUlELCB0aGVyZSB3b24ndCBiZVxcbjE1OTU6XFx0XFx0ICogYW55IGxlZnQgZm9yIFREWCBndWVzdHMgdGh1cyB0aGVyZSdzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcXG4xNTk2OlxcdFxcdCAqIGF0IGFsbC5cXG4xNTk3OlxcdFxcdCAqL1xcbjE1OTg6XFx0XFx0aWYgKG5yX3RkeF9rZXlpZHMgXFx1MDAzYyAyKSB7XFxuMTU5OTpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxcXG5cXFwiKTtcXG4xNjAwOlxcdFxcdFxcdHJldHVybjtcXG4xNjAxOlxcdFxcdH1cXG4xNjAyOlxcdFxcbjE2MDM6XFx0XFx0LypcXG4xNjA0OlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXFxuMTYwNTpcXHRcXHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cXG4xNjA2OlxcdFxcdCAqL1xcbjE2MDc6XFx0XFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XFxuMTYwODpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogSGliZXJuYXRpb24gc3VwcG9ydCBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4xNjA5OlxcdFxcdFxcdHJldHVybjtcXG4xNjEwOlxcdFxcdH1cXG4xNjExOlxcdFxcbjE2MTI6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKFxcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcXG4xNjEzOlxcdFxcdGlmIChlcnIpIHtcXG4xNjE0OlxcdFxcdFxcdHByX2VycihcXFwiaW5pdGlhbGl6YXRpb24gZmFpbGVkOiByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoKSBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG4xNjE1OlxcdFxcdFxcdFxcdFxcdGVycik7XFxuMTYxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTYxNzpcXHRcXHR9XFxuMTYxODpcXHRcXG4xNjE5OlxcdCNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxcbjE2MjA6XFx0XFx0cHJfaW5mbyhcXFwiRGlzYWJsZSBBQ1BJIFMzLiBUdXJuIG9mZiBURFggaW4gdGhlIEJJT1MgdG8gdXNlIEFDUEkgUzMuXFxcXG5cXFwiKTtcXG4xNjIxOlxcdFxcdGFjcGlfc3VzcGVuZF9sb3dsZXZlbCA9IE5VTEw7XFxuMTYyMjpcXHQjZW5kaWZcXG4xNjIzOlxcdFxcbjE2MjQ6XFx0XFx0LypcXG4xNjI1OlxcdFxcdCAqIEp1c3QgdXNlIHRoZSBmaXJzdCBURFggS2V5SUQgYXMgdGhlICdnbG9iYWwgS2V5SUQnIGFuZFxcbjE2MjY6XFx0XFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXFxuMTYyNzpcXHRcXHQgKi9cXG4xNjI4OlxcdFxcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XFxuMTYyOTpcXHRcXHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgKyAxO1xcbjE2MzA6XFx0XFx0dGR4X25yX2d1ZXN0X2tleWlkcyA9IG5yX3RkeF9rZXlpZHMgLSAxO1xcbjE2MzE6XFx0XFxuMTYzMjpcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtcXG4xNjMzOlxcdFxcbjE2MzQ6XFx0XFx0Y2hlY2tfdGR4X2VycmF0dW0oKTtcXG4xNjM1OlxcdH1cXG4xNjM2OlxcdFxcbjE2Mzc6XFx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X2dldF9zeXNpbmZvKHZvaWQpXFxuMTYzODpcXHR7XFxuMTYzOTpcXHRcXHRpZiAoIXRkeF9tb2R1bGVfc3RhdGUuaW5pdGlhbGl6ZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjE0LjcwMDkzNDE0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU5ODU3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGluIHRoZSBURFggQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgaXMgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbiAoVERYKSBob3N0IGVudmlyb25tZW50IGFjdHVhbGx5IGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0/IFRoYXQncyB0aGUgY3J1Y2lhbCBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBnZXQgYmFjayBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9ucyBmcm9tIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYC4gTGV0IG1lIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjoxNy4zNjA3OTQ1NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzg4NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNDY3PWNvbnN0IGNoYXIgKnRkeF9kdW1wX21jZV9pbmZvKHN0cnVjdCBtY2UgKm0pXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ3Ny1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ3ODpzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDc5LVxcdFxcdFxcdFxcdFxcdCAgICB1MzIgKm5yX3RkeF9rZXlpZHMpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTU4MD12b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODQtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1ODU6XFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcXHUwMDI2dGR4X2tleWlkX3N0YXJ0LCBcXHUwMDI2bnJfdGR4X2tleWlkcyk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MTcuNDI0MTg4MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NDUzNDU2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHRkeC5jYCB0byBVbmRlcnN0YW5kIEtleSBQYXJ0aXRpb25pbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyBURFggaGFuZGxlcyBpdHMgcmVjb3JkIGtleSBJRCBwYXJ0aXRpb25pbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUgYW5kIFZNWCB2aXJ0dWFsaXphdGlvbi4gVGhlIHRhcmdldCBpcyB0aGUgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgVERYIG1vZHVsZSBmaWd1cmVzIG91dCBob3cgdG8gc2xpY2UgYW5kIGRpY2UgdGhlIHJlY29yZCBrZXkgSURzLlwiIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBhbmQgcGFydGl0aW9ucyB0aGVzZSBJRHMsIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2wgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgVERYIGVuc3VyZXMgdGhlIGlzb2xhdGlvbiBhbmQgaW50ZWdyaXR5IG9mIHByb3RlY3RlZCB2aXJ0dWFsIG1hY2hpbmVzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHVzZWQgaGVyZSwgYXMgdGhleSdsbCBsaWtlbHkgcmV2ZWFsIHRoZSBwYXJ0aXRpb25pbmcgc3RyYXRlZ3kgYW5kIGFueSBhc3NvY2lhdGVkIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyNiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjIwLjE2OTUzNjIyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NzU6XFx0XFx0cmV0dXJuIFxcXCJURFggcHJpdmF0ZSBtZW1vcnkgZXJyb3IuIFBvc3NpYmxlIGtlcm5lbCBidWcuXFxcIjtcXG4xNDc2OlxcdH1cXG4xNDc3OlxcdFxcbjE0Nzg6XFx0c3RhdGljIF9faW5pdCBpbnQgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyh1MzIgKnRkeF9rZXlpZF9zdGFydCxcXG4xNDc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgKm5yX3RkeF9rZXlpZHMpXFxuMTQ4MDpcXHR7XFxuMTQ4MTpcXHRcXHR1MzIgX25yX21rdG1lX2tleWlkcywgX3RkeF9rZXlpZF9zdGFydCwgX25yX3RkeF9rZXlpZHM7XFxuMTQ4MjpcXHRcXHRzdHJ1Y3QgbXNyIHZhbDtcXG4xNDgzOlxcdFxcdGludCByZXQ7XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdC8qXFxuMTQ4NjpcXHRcXHQgKiBJQTMyX01LVE1FX0tFWUlEX1BBUlRJT05JTkc6XFxuMTQ4NzpcXHRcXHQgKiAgIEJpdCBbMzE6MF06XFx0TnVtYmVyIG9mIE1LVE1FIEtleUlEcy5cXG4xNDg4OlxcdFxcdCAqICAgQml0IFs2MzozMl06XFx0TnVtYmVyIG9mIFREWCBwcml2YXRlIEtleUlEcy5cXG4xNDg5OlxcdFxcdCAqL1xcbjE0OTA6XFx0XFx0cmV0ID0gcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBcXHUwMDI2dmFsLnEpO1xcbjE0OTE6XFx0XFx0X25yX21rdG1lX2tleWlkcyA9IHZhbC5sO1xcbjE0OTI6XFx0XFx0X25yX3RkeF9rZXlpZHMgPSB2YWwuaDtcXG4xNDkzOlxcdFxcdGlmIChyZXQgfHwgIV9ucl90ZHhfa2V5aWRzKVxcbjE0OTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ5NTpcXHRcXG4xNDk2OlxcdFxcdC8qIFREWCBLZXlJRHMgc3RhcnQgYWZ0ZXIgdGhlIGxhc3QgTUtUTUUgS2V5SUQuICovXFxuMTQ5NzpcXHRcXHRfdGR4X2tleWlkX3N0YXJ0ID0gX25yX21rdG1lX2tleWlkcyArIDE7XFxuMTQ5ODpcXHRcXG4xNDk5OlxcdFxcdCp0ZHhfa2V5aWRfc3RhcnQgPSBfdGR4X2tleWlkX3N0YXJ0O1xcbjE1MDA6XFx0XFx0Km5yX3RkeF9rZXlpZHMgPSBfbnJfdGR4X2tleWlkcztcXG4xNTAxOlxcdFxcbjE1MDI6XFx0XFx0cmV0dXJuIDA7XFxuMTUwMzpcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdHN0YXRpYyBib29sIGlzX3RkeF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4xNTA2OlxcdHtcXG4xNTA3OlxcdFxcdHN0cnVjdCB0ZHhfbWVtYmxvY2sgKnRtYjtcXG4xNTA4OlxcdFxcbjE1MDk6XFx0XFx0LypcXG4xNTEwOlxcdFxcdCAqIFRoaXMgY2hlY2sgYXNzdW1lcyB0aGF0IHRoZSBzdGFydF9wZm5cXHUwMDNjLVxcdTAwM2VlbmRfcGZuIHJhbmdlIGRvZXMgbm90XFxuMTUxMTpcXHRcXHQgKiBjcm9zcyBtdWx0aXBsZSBAdGR4X21lbWxpc3QgZW50cmllcy4gIEEgc2luZ2xlIG1lbW9yeSBvbmxpbmVcXG4xNTEyOlxcdFxcdCAqIGV2ZW50IGFjcm9zcyBtdWx0aXBsZSBtZW1ibG9ja3MgKGZyb20gd2hpY2ggQHRkeF9tZW1saXN0XFxuMTUxMzpcXHRcXHQgKiBlbnRyaWVzIGFyZSBkZXJpdmVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbikgaXNcXG4xNTE0OlxcdFxcdCAqIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgYmVjYXVzZSBtZW1vcnkgb2ZmbGluZS9vbmxpbmUgaXMgZG9uZVxcbjE1MTU6XFx0XFx0ICogb24gZ3JhbnVsYXJpdHkgb2YgJ3N0cnVjdCBtZW1vcnlfYmxvY2snLCBhbmQgdGhlIGhvdHBsdWdnYWJsZVxcbjE1MTY6XFx0XFx0ICogbWVtb3J5IHJlZ2lvbiAob25lIG1lbWJsb2NrKSBtdXN0IGJlIG11bHRpcGxlIG9mIG1lbW9yeV9ibG9jay5cXG4xNTE3OlxcdFxcdCAqL1xcbjE1MTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bWIsIFxcdTAwMjZ0ZHhfbWVtbGlzdCwgbGlzdCkge1xcbjE1MTk6XFx0XFx0XFx0aWYgKHN0YXJ0X3BmbiBcXHUwMDNlPSB0bWItXFx1MDAzZXN0YXJ0X3BmbiBcXHUwMDI2XFx1MDAyNiBlbmRfcGZuIFxcdTAwM2M9IHRtYi1cXHUwMDNlZW5kX3BmbilcXG4xNTIwOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE1MjE6XFx0XFx0fVxcbjE1MjI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MjM6XFx0fVxcbjE1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjIwLjE2OTY3MzA0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTQ4NjAxNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggSG9zdCBTdXBwb3J0IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBcdTAwMjZ2YWwucSlgLiBUaGlzIHBvaW50cyBkaXJlY3RseSB0byBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBrZXkgSUQgcGFydGl0aW9uaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgaG9zdCBlbnZpcm9ubWVudC4gSW50ZWwgVERYIG1hbmRhdGVzIHNwZWNpZmljIGhhcmR3YXJlOiBTYXBwaGlyZSBSYXBpZHMgb3IgbmV3ZXIgWGVvbiwgd2l0aCBTRUFNUlIgYW5kIGEgVERYIG1vZHVsZSBsb2FkZWQgYnkgdGhlIGZpcm13YXJlLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgZW11bGF0ZSBhIFREWCBob3N0IHVzaW5nIFFFTVU/IEFuZCwgYSBmb2xsb3ctdXA6IGNhbiB3ZSBhY2hpZXZlIHRoaXMgd2l0aGluIGEgUUVNVSBpbnN0YW5jZSBvbiBhIEdDRSAoR29vZ2xlIENvbXB1dGUgRW5naW5lKSBWTT8gVGhlIGFuc3dlciBpcyBhIGNsZWFyIG5lZ2F0aXZlLiBTdGFuZGFyZCBRRU1VLCBhbmQgdGhlcmVmb3JlIEdDRSBWTXMsICpkb24ndCogZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIGNvbXBvbmVudHM6IFNFQU1SUiwgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB0aGUgVERYIG1vZHVsZSwgb3IgdGhlIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgIE1TUi5cblxuU28sIHdoZXJlIGlzIHRoZSBmb2N1cyBvZiB0aGlzIGNvZGUgbW9kaWZpY2F0aW9uPyBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgKmhvc3QqIFREWCBzdXBwb3J0LCBhcyBldmlkZW5jZWQgYnkgdGhlIGZpbGUgcGF0aHMgYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlLiBDYW4gdGhpcyBURFggaG9zdCBjb2RlLCBvciBLVk0gVERYIGhvc3QgY29kZSwgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIFREWCBoYXJkd2FyZT9cblxuTGV0J3MgZGVsdmUgZGVlcGVyIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBXaXRoaW4gdGhhdCwgSSBzZWUgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBhbmQgdGhlIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIFdoYXQgaXMgYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgIGV4YWN0bHk/IEV4YW1pbmluZyBgYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaGAsIGl0J3MgZGVmaW5lZCBhcyBgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKWAuIFRoaXMgc2lnbmlmaWVzIGFuIG9wdGlvbmFsIGNhbGwgdGhhdCByZXR1cm5zIDAgaWYgbm90IGltcGxlbWVudGVkLlxuXG5Ob3csIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBJIHNlZSB0aGF0IGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7YCBpcyBhc3NpZ25lZCAqb25seSBpZiogYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pYCBpcyB0cnVlLiBGb3Igbm9uLVREWCBlbnZpcm9ubWVudHMgKHN0YW5kYXJkIFZNWCBvciBTVk0pLCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGBOVUxMYCAoZHVlIHRvIGBPUFRJT05BTF9SRVQwYCksIGVuc3VyaW5nIGEgcmV0dXJuIG9mIDAuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uLlxuXG5TbywgdG8gc3VtbWFyaXplIGFuZCBjb25maXJtIG15IHN1c3BpY2lvbnMsIEkgbmVlZCB0byBrbm93IHdoZW4gYHZ0X3g4Nl9vcHNgIG9yIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGFyZSBjYWxsZWQuIFRoaXMgd291bGQgaWxsdW1pbmF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgVERYLXNwZWNpZmljIGhvc3QgY29kZSBpcyBpbml0aWFsaXplZCBhbmQgZXhlY3V0ZWQuIEkgbmVlZCB0byBzZWFyY2ggZm9yIHRob3NlIGlkZW50aWZpZXJzIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MjkuMzE4Mjc3NTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5OTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfaGFyZHdhcmVfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcXHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMzODg9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMzkyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzM5MzpzdGF0aWMgaW50IF9faW5pdCBfX3RkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM5NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NjYtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDY3OmludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUwMi1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MDM6XFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTA0LVxcdGlmIChyKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTktXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxMDppbnQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTEtdm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MjkuMzgyMDg0OTUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTY3MzY5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIFREWCBTZXR1cCBpbiBLVk0veDg2KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBhcmUgYmVpbmcgc2V0IHVwIGluIHRoZSBLVk0veDg2IGVudmlyb25tZW50LiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGNvcmUgVk1YIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AuIEkgcmVjYWxsIHRoYXQgdGhlIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGhlcmUuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbnMgZm9yIFREWCBhcmUgbGlrZWx5IG9jY3VycmluZy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbjsgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwcm9jZXNzb3IncyBURFgtcmVsYXRlZCBmZWF0dXJlcywgYW5kIGFueSBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcuIEkgZXhwZWN0IHRvIGZpbmQgZGV0YWlscyBvbiBlbmFibGluZyBURFgsIGNvbmZpZ3VyaW5nIHRoZSBURFggbW9kdWxlLCBhbmQgbWF5YmUgZXZlbiBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGd1ZXN0IGVudmlyb25tZW50IHdpdGhpbiBhIFREWCBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTY3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MzEuOTk4ODI1MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ5MDpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzQ5MTpcXHRcXHR9XFxuMzQ5MjpcXHRcXG4zNDkzOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9PU1hTQVZFKSkge1xcbjM0OTQ6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0ZHg6IE9TWFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMzQ5NTpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzQ5NjpcXHRcXHR9XFxuMzQ5NzpcXHRcXG4zNDk4OlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcXG4zNDk5OlxcdFxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbjM1MDA6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM1MDE6XFx0XFx0fVxcbjM1MDI6XFx0XFxuMzUwMzpcXHRcXHRyID0gX190ZHhfaGFyZHdhcmVfc2V0dXAoKTtcXG4zNTA0OlxcdFxcdGlmIChyKSB7XFxuMzUwNTpcXHRcXHRcXHQvKlxcbjM1MDY6XFx0XFx0XFx0ICogRGlzYWJsZSBURFggb25seSBidXQgZG9uJ3QgZmFpbCB0byBsb2FkIG1vZHVsZSBpZiB0aGUgVERYXFxuMzUwNzpcXHRcXHRcXHQgKiBtb2R1bGUgY291bGQgbm90IGJlIGxvYWRlZC4gIE5vIG5lZWQgdG8gcHJpbnQgbWVzc2FnZSBzYXlpbmdcXG4zNTA4OlxcdFxcdFxcdCAqIFxcXCJtb2R1bGUgaXMgbm90IGxvYWRlZFxcXCIgYmVjYXVzZSBpdCB3YXMgcHJpbnRlZCB3aGVuIHRoZSBmaXJzdFxcbjM1MDk6XFx0XFx0XFx0ICogU0VBTUNBTEwgZmFpbGVkLiAgRG9uJ3QgYm90aGVyIHVud2luZGluZyB0aGUgUy1FUFQgaG9va3Mgb3JcXG4zNTEwOlxcdFxcdFxcdCAqIHZtX3NpemUsIGFzIGt2bV94ODZfb3BzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCAoYW5kIGFyZVxcbjM1MTE6XFx0XFx0XFx0ICogaW50ZW50aW9uYWxseSBub3QgZXhwb3J0ZWQpLiAgVGhlIFMtRVBUIGNvZGUgaXMgdW5yZWFjaGFibGUsXFxuMzUxMjpcXHRcXHRcXHQgKiBhbmQgYWxsb2NhdGluZyBhIGZldyBtb3JlIGJ5dGVzIHBlciBWTSBpbiBhIHNob3VsZC1iZS1yYXJlXFxuMzUxMzpcXHRcXHRcXHQgKiBmYWlsdXJlIHNjZW5hcmlvIGlzIGEgbm9uLWlzc3VlLlxcbjM1MTQ6XFx0XFx0XFx0ICovXFxuMzUxNTpcXHRcXHRcXHRpZiAociA9PSAtRU5PREVWKVxcbjM1MTY6XFx0XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM1MTc6XFx0XFxuMzUxODpcXHRcXHRcXHRyZXR1cm4gcjtcXG4zNTE5OlxcdFxcdH1cXG4zNTIwOlxcdFxcbjM1MjE6XFx0XFx0S1ZNX1NBTklUWV9DSEVDS19WTV9TVFJVQ1RfU0laRShrdm1fdGR4KTtcXG4zNTIyOlxcdFxcbjM1MjM6XFx0XFx0dnRfeDg2X29wcy52bV9zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCB2dF94ODZfb3BzLnZtX3NpemUsIHNpemVvZihzdHJ1Y3Qga3ZtX3RkeCkpO1xcbjM1MjQ6XFx0XFxuMzUyNTpcXHRcXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcXG4zNTI2OlxcdFxcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xcbjM1Mjc6XFx0XFxuMzUyODpcXHRcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXFxuMzUyOTpcXHRcXHRcXHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XFxuMzUzMDpcXHRcXG4zNTMxOlxcdFxcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xcbjM1MzI6XFx0XFx0cmV0dXJuIDA7XFxuMzUzMzpcXHRcXG4zNTM0OlxcdHN1Y2Nlc3NfZGlzYWJsZV90ZHg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjMxLjk5OTA0MzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgzMjk4ODEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVERYIFN1cHBvcnQgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkeW5hbWljIFBBTVQgKFBhZ2UgQXR0cmlidXRlIFRhYmxlKSBzdXBwb3J0IGluIFREWCBpcyBlbmFibGVkLiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQgaGluZ2VzIG9uIGB0ZHhfZW5hYmxlX2RwYW10YCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRgIGZlYXR1cmUgZmxhZyByZXBvcnRlZCBieSB0aGUgVERYIG1vZHVsZSBpdHNlbGYgdmlhIFNFQU1DQUxMcy4gIEFuZCwgb2YgY291cnNlLCBgdGR4X2VuYWJsZV9kcGFtdGAgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gY29uc2lkZXIuXG5cblRoZSBURFggaG9zdCBwbGF0Zm9ybSBhbHNvIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllczogcGh5c2ljYWwgQ1BVIHN1cHBvcnQgKGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWApLCB0aGUgTVNSIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgLCBwcm9wZXIgU0VBTVJSIHJhbmdlIHJlZ2lzdGVycyBjb25maWd1cmVkIGluIHRoZSBCSU9TLCBhbmQgZnVuY3Rpb25pbmcgU0VBTUNBTExzIHRvIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBpZGVudGlmaWVkIGluIHNlY3Rpb24gMiBvZiB0aGUgb3JpZ2luYWwgcHJvbXB0IGluY2x1ZGUgdGhlIEludGVsIFREWCBob3N0PyAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgKnllcyouXG5cbkxldCdzIHZlcmlmeSB0aGF0LiBDYW4gc3RhbmRhcmQgUUVNVSBlbXVsYXRlIGEgVERYIGhvc3Q/IE5vLiBRRU1VIGNhbiBvbmx5IGZ1bmN0aW9uIGFzIGEgVERYIGd1ZXN0IHVzaW5nIEtWTSBURFggcnVubmluZyBvbiBhIHJlYWwgVERYIGhvc3QuICBRRU1VIFRDRyBzaW1wbHkgbGFja3MgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0IOKAkyBubyBTRUFNUlIsIG5vIFNFQU1DQUxMIGZ1bmN0aW9uYWxpdHksIGFuZCBubyBNS1RNRSBwYXJ0aXRpb25pbmcgTVNSIGVtdWxhdGlvbi4gIEluIGFueSBzdGFuZGFyZCBRRU1VL0tWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW8gb3IgUUVNVSBUQ0csIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgd2lsbCBub3QgYmUgcHJlc2VudC4gVGhlIGByZG1zcnFfc2FmZShNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcpYCB3aWxsIGluZXZpdGFibHkgZmFpbCwgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuXG5cblRoZXJlZm9yZSwgdGhlIGB0ZHhfaW5pdCgpYCBmdW5jdGlvbiB3b3VsZCBmYWlsIGVhcmx5IG9uIHdpdGggYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGUga2V5IGJpdCBoZXJlIGlzIHRoZSBmb2xsb3dpbmcgY29kZSBibG9jazpcblxuYGBgY1xucmV0ID0gcmRtc3JxX3NhZmUoTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HLCBcdTAwMjZ2YWwucSk7XG5pZiAocmV0IHx8ICFfbnJfdGR4X2tleWlkcylcbiAgICByZXR1cm4gLUVJTlZBTDtcbmBgYFxuXG5Db25zZXF1ZW50bHksIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGZsYWcgd2lsbCBuZXZlciBiZSBzZXQuIFRoZSBgdGR4X2VuYWJsZSgpYCBmdW5jdGlvbiB3aWxsIGZhaWwgaW1tZWRpYXRlbHksIGFuZCBgdGR4X2hhcmR3YXJlX3NldHVwKClgIHdpbGwgZmFpbCBhcyB3ZWxsLiBUaGlzIGxlYWRzIHRvIGB2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlYCByZW1haW5pbmcgTlVMTC4gQXMgYSByZXN1bHQsIGFsbCB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZHluYW1pYyBQQU1UIOKAkyBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAsIGV0Yy4g4oCTIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBFdmVuIGlmIHRoZXkgKndlcmUqIGNhbGxlZCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIHdvdWxkIHJldHVybiBgZmFsc2VgIGltbWVkaWF0ZWx5IGFueXdheSAocmV0dXJuaW5nIDAgaW1tZWRpYXRlbHkpLiBUaGUgVERYIEtWTSBtb2R1bGUsIHdpbGwgbmV2ZXIgZXZlbiBiZSBhYmxlIHRvIGNyZWF0ZSBhIFREWCBWTSB3aXRob3V0IGBlbmFibGVfdGR4YC5cblxuTm93LCBsZXQncyBpbnZlc3RpZ2F0ZSB0aGUgcmVjZW50IGNoYW5nZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIE15IHRoaW5raW5nIG5vdyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBwb2ludGVyLCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIHdoaWNoIGNhbiBwb2ludCB0byBhIGZ1bmN0aW9uIHRvIGhhbmRsZSBleHRlcm5hbCBjYWNoaW5nIG9wZXJhdGlvbnMuXG5cbmBgYGNcblx0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcblx0XHRpZiAocilcblx0XHRcdHJldHVybiByO1xuYGBgXG5cbkkgd2lsbCBuZWVkIHRvIGludmVzdGlnYXRlIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGNhbiBiZSBzZXQgYXMgYHRvcHVwX2V4dGVybmFsX2NhY2hlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwNjMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6MzkuODMyMDMzMTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwNTpcXHRcXG4gNjA2OlxcdHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbiA2MDc6XFx0e1xcbiA2MDg6XFx0XFx0aW50IHI7XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdC8qIDEgcm1hcCwgMSBwYXJlbnQgUFRFIHBlciBsZXZlbCwgYW5kIHRoZSBwcmVmZXRjaGVkIHJtYXBzLiAqL1xcbiA2MTE6XFx0XFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9wdGVfbGlzdF9kZXNjX2NhY2hlLFxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIDEgKyBQVDY0X1JPT1RfTUFYX0xFVkVMICsgUFRFX1BSRUZFVENIX05VTSk7XFxuIDYxMzpcXHRcXHRpZiAocilcXG4gNjE0OlxcdFxcdFxcdHJldHVybiByO1xcbiA2MTU6XFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4gNjE2OlxcdFxcdFxcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tbXVfZXh0ZXJuYWxfc3B0X2NhY2hlLFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xcbiA2MTg6XFx0XFx0XFx0aWYgKHIpXFxuIDYxOTpcXHRcXHRcXHRcXHRyZXR1cm4gcjtcXG4gNjIwOlxcdFxcbiA2MjE6XFx0XFx0XFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuIDYyMjpcXHRcXHRcXHRpZiAocilcXG4gNjIzOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbiA2MjQ6XFx0XFx0fVxcbiA2MjU6XFx0XFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9zaGFkb3dfcGFnZV9jYWNoZSxcXG4gNjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gNjI3OlxcdFxcdGlmIChyKVxcbiA2Mjg6XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDYyOTpcXHRcXHRpZiAobWF5YmVfaW5kaXJlY3QpIHtcXG4gNjMwOlxcdFxcdFxcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tbXVfc2hhZG93ZWRfaW5mb19jYWNoZSxcXG4gNjMxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gNjMyOlxcdFxcdFxcdGlmIChyKVxcbiA2MzM6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDYzNDpcXHRcXHR9XFxuIDYzNTpcXHRcXHRyZXR1cm4ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X3BhZ2VfaGVhZGVyX2NhY2hlLFxcbiA2MzY6XFx0XFx0XFx0XFx0XFx0XFx0ICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gNjM3OlxcdH1cXG4gNjM4OlxcdFxcbiA2Mzk6XFx0c3RhdGljIHZvaWQgbW11X2ZyZWVfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjM5LjgzMjQ3MTg1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTM0MDUyMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0ncyBNaXJyb3JlZCBURFAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIEtWTSBjb2RlLCBhbmQgdGhlIGZpcnN0IGxpbmUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsICprdm1faGFzX21pcnJvcmVkX3RkcCouLi4gd2hhdCdzIHRoYXQgYWN0dWFsbHkgKmRvKj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoZWNrIGJlZm9yZSBJIGNhbiB0cnVseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgbG9naWMuXG5cblRpbWUgdG8gcmVhY2ggZm9yIHRoZSB0cnVzdHkgZ3JlcCBjb21tYW5kLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgd2l0aGluIHRoZSBLVk0gc291cmNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVudCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgdG8gZGlzc2VjdCBob3cgdGhlIG1pcnJvcmVkIFREUCBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB3ZSBtaWdodCBiZSBjaGVja2luZyBmb3IgaXQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4NzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjQxLjk2NjUyNzAzNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NjMyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhc19taXJyb3JlZF90ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkxLVxcbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTQtXFx0XFx0cmV0dXJuIHI7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTU6XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNi1cXHRcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzk5MD1zdGF0aWMgaW50IG1tdV9hbGxvY19kaXJlY3Rfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk4LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTk6XFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQwMDAtXFx0XFx0ICAgICFWQUxJRF9QQUdFKG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTMwPXN0YXRpYyBpbmxpbmUgZW51bSBrdm1fdGRwX21tdV9yb290X3R5cGVzIGt2bV9nZm5fcmFuZ2VfZmlsdGVyX3RvX3Jvb3RfdHlwZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzQtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6MzU6XFx0aWYgKCFrdm1faGFzX21pcnJvcmVkX3RkcChrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTM2LVxcdFxcdHJldHVybiBLVk1fRElSRUNUX1JPT1RTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNjo0Mi4wMTIyOTc3ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMDU3ODY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNaXJyb3JlZCBURFAgSXNzdWVzIGluIEtWTSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IFRyYW5zcGFyZW50IFBhZ2UgU2hhcmluZyAoVFBTKSBhbmQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBtYW5hZ2VtZW50IGFyZSBpbnRlcmFjdGluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbWlycm9yZWQgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBlbnRyaWVzIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBleGlzdGVuY2UgYW5kIGRlZmluaXRpb24gb2YgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCBpbiBgYXJjaC94ODYva3ZtL21tdS5oYC4gVGhpcyBsaWtlbHkgZmxhZ3Mgd2hldGhlciB0aGUgY3VycmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbiBlbmFibGVzIG9yIHN1cHBvcnRzIG1pcnJvcmVkIHBhZ2UgdGFibGVzLCBwb3RlbnRpYWxseSBpbmZsdWVuY2luZyB0aGUgTU1VJ3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLCBhbmQgaW1wb3J0YW50bHksIHdoaWNoIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZWx5IGV4ZWN1dGVkIGluIHRoZSBzeXN0ZW0uIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNoZWNrIHdpbGwgYmUga2V5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlbiB0cmFjZSBkb3duIGFueSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NDQuMjEyODc5MjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbiAzOTM6XFx0e1xcbiAzOTQ6XFx0XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbiAzOTU6XFx0fVxcbiAzOTY6XFx0XFxuIDM5NzpcXHRzdGF0aWMgaW5saW5lIGdmbl90IGt2bV9nZm5fZGlyZWN0X2JpdHMoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbiAzOTg6XFx0e1xcbiAzOTk6XFx0XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHM7XFxuIDQwMDpcXHR9XFxuIDQwMTpcXHRcXG4gNDAyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faXNfYWRkcl9kaXJlY3Qoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpXFxuIDQwMzpcXHR7XFxuIDQwNDpcXHRcXHRncGFfdCBncGFfZGlyZWN0X2JpdHMgPSBnZm5fdG9fZ3BhKGt2bV9nZm5fZGlyZWN0X2JpdHMoa3ZtKSk7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdHJldHVybiAhZ3BhX2RpcmVjdF9iaXRzIHx8IChncGEgXFx1MDAyNiBncGFfZGlyZWN0X2JpdHMpO1xcbiA0MDc6XFx0fVxcbiA0MDg6XFx0XFxuIDQwOTpcXHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX2dmbl9hbGlhcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NDQuMjEyOTYzMzU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODk2NDM1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktWTSBURFggVk0gQ3JlYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKWAgZnVuY3Rpb24gaXMgYSBzaW1wbGUgY2hlY2s7IGl0IGVzc2VudGlhbGx5IHRlbGxzIHVzIGlmIGEgS1ZNIGluc3RhbmNlIGlzIGEgVERYIFZNIGJ5IGNvbXBhcmluZyBpdHMgYXJjaGl0ZWN0dXJlJ3MgVk0gdHlwZSB3aXRoIGBLVk1fWDg2X1REWF9WTWAuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqaG93KiBhIFZNIGlzIGFjdHVhbGx5IGFzc2lnbmVkIHRoZSBgS1ZNX1g4Nl9URFhfVk1gIHR5cGUgZHVyaW5nIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBUaGUga2V5IGlzIHRvIHRyYWNlIHdoZXJlIGBLVk1fWDg2X1REWF9WTWAgaXMgYmVpbmcgdXRpbGl6ZWQgZHVyaW5nIHRoZSBWTSdzIGluc3RhbnRpYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgS1ZNIFZNIGNyZWF0aW9uIGZsb3cgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byB0aGlzIHNwZWNpZmljIHR5cGUgYmVpbmcgYXNzaWduZWQuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBkZXRlcm1pbmUgdGhlIGV4YWN0IHBhdGggYnkgdHJhY2luZyB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjQ2LjUwMjYxMDE4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg3MTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1REWF9WTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xcbmFyY2gveDg2L2t2bS9tbXUuaDozOTQ6XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTU4PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTYyOlxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjMtXFx0XFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xODk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5NC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxOTU6XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02MS17XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MjpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzgtXFx0XFx0XFx0XFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3OTpcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDgwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NDYuNTUxNDg1Mzg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMjEwMDAwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gS1ZNL1ZNWCBDb3JlIExvZ2ljKipcblxuT2theSwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIHg4NiBLVk0vVk1YIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDcwLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoLi4uIHdlbGwsIGl0IGRlcGVuZHMgb24gdGhlIGNvbnRleHQsIGJ1dCBpdCBjb3VsZCByZWxhdGUgdG8gVk0gZW50cnkvZXhpdCBoYW5kbGluZywgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gc2V0dXAsIG9yIHBvdGVudGlhbGx5IGZhdWx0IG1hbmFnZW1lbnQgc3BlY2lmaWMgdG8gSW50ZWwncyBWVC14IGV4dGVuc2lvbnMuIEtub3dpbmcgaG93IGRlZXBseSBpbnRlZ3JhdGVkIGFuZCBhcmNoaXRlY3R1cmFsbHkgaW1wb3J0YW50IFZNWCBpcywgSSBiZXQgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGNydWNpYWwuIEZyb20gdGhlcmUgSSBjYW4gZm9sbG93IHRoZSBjYWxsIHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG15IHNwZWNpZmljIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NTEuODcyNDg3NjUxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0dW5zaWduZWQgdmNwdV9zaXplLCB2Y3B1X2FsaWduO1xcbjEwNjE6XFx0XFx0aW50IHI7XFxuMTA2MjpcXHRcXG4xMDYzOlxcdFxcdHIgPSB2bXhfaW5pdCgpO1xcbjEwNjQ6XFx0XFx0aWYgKHIpXFxuMTA2NTpcXHRcXHRcXHRyZXR1cm4gcjtcXG4xMDY2OlxcdFxcbjEwNjc6XFx0XFx0LypcXG4xMDY4OlxcdFxcdCAqIFREWCBhbmQgVk1YIGhhdmUgZGlmZmVyZW50IHZDUFUgc3RydWN0dXJlcy4gIENhbGN1bGF0ZSB0aGVcXG4xMDY5OlxcdFxcdCAqIG1heGltdW0gc2l6ZS9hbGlnbiBzbyB0aGF0IGt2bV9pbml0KCkgY2FuIHVzZSB0aGUgbGFyZ2VyXFxuMTA3MDpcXHRcXHQgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBrbWVtX3ZjcHVfY2FjaGUuXFxuMTA3MTpcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdHZjcHVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmNwdV92bXgpO1xcbjEwNzM6XFx0XFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuMTA3NDpcXHRcXHRpZiAoZW5hYmxlX3RkeCkge1xcbjEwNzU6XFx0XFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4xMDc2OlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgdmNwdV90ZHgpKTtcXG4xMDc3OlxcdFxcdFxcdHZjcHVfYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9hbGlnbixcXG4xMDc4OlxcdFxcdFxcdFxcdFxcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xcbjEwNzk6XFx0XFx0XFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1REWF9WTSk7XFxuMTA4MDpcXHRcXHR9XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdC8qXFxuMTA4MzpcXHRcXHQgKiBDb21tb24gS1ZNIGluaXRpYWxpemF0aW9uIF9tdXN0XyBjb21lIGxhc3QsIGFmdGVyIHRoaXMsIC9kZXYva3ZtIGlzXFxuMTA4NDpcXHRcXHQgKiBleHBvc2VkIHRvIHVzZXJzcGFjZSFcXG4xMDg1OlxcdFxcdCAqL1xcbjEwODY6XFx0XFx0ciA9IGt2bV9pbml0KHZjcHVfc2l6ZSwgdmNwdV9hbGlnbiwgVEhJU19NT0RVTEUpO1xcbjEwODc6XFx0XFx0aWYgKHIpXFxuMTA4ODpcXHRcXHRcXHRnb3RvIGVycl9rdm1faW5pdDtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0cmV0dXJuIDA7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdGVycl9rdm1faW5pdDpcXG4xMDkzOlxcdFxcdHZteF9leGl0KCk7XFxuMTA5NDpcXHRcXHRyZXR1cm4gcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDY6NTEuODcyNTY5NDcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzI2NDAzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBURFggSW1wbGVtZW50YXRpb24gaW4gS1ZNKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBURFggaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gS1ZNJ3MgVk1YIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoZW5hYmxlX3RkeClgIGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIENsZWFybHksIHRoaXMgaXMgYSBwaXZvdGFsIGRlY2lzaW9uIHBvaW50IHJlbGF0ZWQgdG8gd2hldGhlciBvciBub3QgVERYIGZlYXR1cmVzIGFyZSBhY3RpdmF0ZWQgZHVyaW5nIFZNIGV4ZWN1dGlvbi5cblxuTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYGVuYWJsZV90ZHhgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGJlaW5nIHNldC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFREWCBpcyBlbmFibGVkIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBpZGVhbGx5IHN0YXJ0aW5nIGZyb20gdGhpcyBjaGVjaywgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBob3cgdGhlIFREWCBlbmFibGluZyBkZWNpc2lvbiBpcyB1bHRpbWF0ZWx5IG1hZGUuIEtub3dpbmcgdGhlIHNvdXJjZSBvZiBgZW5hYmxlX3RkeGAgd2lsbCBwcm92aWRlIGluc2lnaHRzIGludG8gY29uZmlndXJhdGlvbiBvcHRpb25zLCBoYXJkd2FyZSBjaGVja3MsIG9yIG90aGVyIHJ1bnRpbWUgY29uZGl0aW9ucyB0aGF0IGluZmx1ZW5jZSBURFjigJlzIG9wZXJhdGlvbmFsIHN0YXRlLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGVpdGhlciBhIGNvbmZpZ3VyYXRpb24gZmxhZyBvciBhIGRldGVybWluYXRpb24gbWFkZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZCBzZWN1cml0eSBwb2xpY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjU0LjcwNTIxMjYyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVfdGR4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNj1zdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTgtXFx0LyogTm90ZSwgVERYICphbmQqIFZNWCBuZWVkIHRvIGJlIGRpc2FibGVkIGlmIFREWCBpcyBlbmFibGVkLiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE5OlxcdGlmIChlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIwLVxcdFxcdHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQ9c3RhdGljIF9faW5pdCBpbnQgdnRfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyOlxcdHJldHVybiBlbmFibGVfdGR4ID8gdGR4X2hhcmR3YXJlX3NldHVwKCkgOiAwO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1PXN0YXRpYyB2b2lkIHZ0X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Mzc6XFx0aWYgKGVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzgtXFx0XFx0dGR4X2hhcmR3YXJlX3Vuc2V0dXAoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNTg9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3My1cXHR2Y3B1X2FsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHZjcHVfdm14KTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc0OlxcdGlmIChlbmFibGVfdGR4KSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3NS1cXHRcXHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01NS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU2OmJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo1Nzptb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDY3PWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NzQtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDc1OlxcdGlmICghZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NzYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1MzQtc3VjY2Vzc19kaXNhYmxlX3RkeDpcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MzU6XFx0ZW5hYmxlX3RkeCA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM2LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaD0xMT12b2lkIHRkeF9oYXJkd2FyZV91bnNldHVwKHZvaWQpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTItXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxMzpleHRlcm4gYm9vbCBlbmFibGVfdGR4O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTE4Nz1URFhfQlVJTERfVERWUFNfQUNDRVNTT1JTKDY0LCBTVEFURV9OT05fQVJDSCwgc3RhdGVfbm9uX2FyY2gpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODktI2Vsc2VcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE5MDojZGVmaW5lIGVuYWJsZV90ZHhcXHQwXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xOTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA2OjU0Ljc1MDQxMTkzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDg3MTEwNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIENvZGUgUmVhY2hhYmlsaXR5IGZvciBURFggRHluYW1pYyBQQU1UIFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgRHluYW1pYyBQQU1UIHN1cHBvcnQgZm9yIEludGVsIFREWCwgZm9jdXNpbmcgb24gaXRzIHJlYWNoYWJpbGl0eSBpbiBhIGZ1enppbmcgY29udGV4dC4gRnJvbSBleGFtaW5pbmcgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgIGFuZCByZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSBsaW5lcyAzNTM1LCBhIGNsZWFyIHBpY3R1cmUgZW1lcmdlcy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGlzOiB3aXRob3V0IHNwZWNpZmljIEludGVsIGhhcmR3YXJlIOKAkyBhIHBoeXNpY2FsIFREWC1lbmFibGVkIGhvc3Qg4oCTIHRoaXMgY29kZSBwYXRoICpuZXZlciogZ2V0cyBoaXQuXG5cblRoZSBgdGR4X2hhcmR3YXJlX3NldHVwKClgIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCBjaGVja3MgZm9yIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAuIElmIHRoYXQgZmxhZyBpc24ndCBzZXQsIHdoaWNoIGl0IHdvbid0IGJlIG9uIHN0YW5kYXJkIGhhcmR3YXJlIG9yIFFFTVUsIHRoZSBzZXR1cCBmYWlscyBhbmQgYGVuYWJsZV90ZHhgIGlzIHNldCB0byAwLiBUaGlzLCBpbiB0dXJuLCBwcmV2ZW50cyBgS1ZNX1g4Nl9URFhfVk1gIGZyb20gYmVpbmcgc3VwcG9ydGVkLiBDb25zZXF1ZW50bHksIGNyZWF0aW5nIGEgVERYIFZNIHRocm91Z2ggYGlvY3RsKEtWTV9DUkVBVEVfVk1fVFlQRSlgIHdpbGwgZmFpbCB3aXRoIGAtRUlOVkFMYCwgbWFraW5nIGBrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSlgIGFsd2F5cyBmYWxzZS5cblxuVGhpcyBjcnVjaWFsIGBrdm1faGFzX21pcnJvcmVkX3RkcCgpYCBjaGVjayBpcyB0aGUgZ2F0ZWtlZXBlci4gVGhlIE1NVSBicmFuY2ggY29udGFpbmluZyB0aGUgY2FsbHMgdG8gYGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlYCBhbmQgYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgIGluIGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlc2AgaXMgY29tcGxldGVseSBieXBhc3NlZC4gIEZ1cnRoZXJtb3JlLCBhbGwgdGhlIG5ldyBmdW5jdGlvbnMgdGllZCB0byBkeW5hbWljIFBBTVQgKGUuZy4sIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgdGhlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgZnVuY3Rpb25zLCBldGMuKSBhcmUgdW5yZWFjaGFibGUuIFRoZSBrZXJuZWwgcGFyYW1ldGVycyBmb3IgZHluYW1pYyBQQU1UIGFyZSBvbmx5IHBhcnNlZCBpZiBURFggaXMgZW5hYmxlZCBvbiB0aGUgaG9zdCBwbGF0Zm9ybS5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgYm9vdC10aW1lIGZ1bmN0aW9ucyBtb2RpZmllZCwgYW5kIHRoZXkgYWxsIGZhbGwgaW50byB0aGUgc2FtZSB0cmFwLiBGdW5jdGlvbnMgbGlrZSBgdGRtcl9nZXRfcGFtdF9zemAgYW5kIGBpbml0X3RkeF9tb2R1bGUoKWAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmbGFnLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRob3NlIEtWTSBmdW5jdGlvbnMgbGlrZSBgdGR4X3ZjcHVfY3JlYXRlYCBhbmQgYHRkeF9oYXJkd2FyZV9zZXR1cGAuICBUaGVzZSBhbGwgb3BlcmF0ZSB3aXRoaW4gdGhlIFREWCBob3N0IGNvbnRleHQgYW5kIEtWTSBURFggVk0gc2V0dXAuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgZ3VpZGVsaW5lcy4gVGhpcyBjb2RlIHVuZXF1aXZvY2FsbHkgZml0cy4gSXQgcmVxdWlyZXMgc3BlY2lmaWMsIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSDigJMgYW4gSW50ZWwgVERYIGhvc3QgcGxhdGZvcm0gd2l0aCB0aGUgcHJvcGVyIEJJT1Mgc3VwcG9ydCBhbmQgZmlybXdhcmUgbW9kdWxlLiBUaGlzIGdvZXMgYmV5b25kIHRoZSBjYXBhYmlsaXRpZXMgb2Ygc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIEl0J3Mgbm90IGp1c3QgdGhhdCBhIGZlYXR1cmUgaXNuJ3QgKmVuYWJsZWQqLCBidXQgdGhhdCB0aGUgZm91bmRhdGlvbmFsICpoYXJkd2FyZSogaXNuJ3QgcHJlc2VudC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYSBoYXJkd2FyZSBlbnZpcm9ubWVudCB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgaW4gdGhlIHR5cGljYWwgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2NDEsIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzowNC4yMzc1MjY0NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgKERQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBob3N0IGluIHRoZSBrZXJuZWwgYW5kIEtWTS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZW50aXJlbHkgY29uZmluZWQgdG8gSW50ZWwgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gYW5kIEtWTSBURFggZ3Vlc3QgbWFuYWdlbWVudCAodW5kZXIgYXJjaC94ODYvdmlydC92bXgvdGR4IGFuZCBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jLCBwbHVzIG1pcnJvcmVkIFREUCBoYW5kbGluZyBndWFyZGVkIGJ5IEtWTV9YODZfVERYX1ZNKS4gVGhlc2UgcGF0aHMgc3RyaWN0bHkgcmVxdWlyZSBwaHlzaWNhbCBJbnRlbCBDUFVzIHdpdGggVERYIGhvc3QgcGxhdGZvcm0gc3VwcG9ydCAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0sIE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgU0VBTVJSLCBhbmQgdGhlIEludGVsIFREWCBmaXJtd2FyZSBtb2R1bGUpLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRHluYW1pYyBQQU1UIChEUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgaG9zdCBpbiB0aGUga2VybmVsIGFuZCBLVk0uIFRoZSBtb2RpZmllZCBjb2RlIGlzIGVudGlyZWx5IGNvbmZpbmVkIHRvIEludGVsIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGFuZCBLVk0gVERYIGd1ZXN0IG1hbmFnZW1lbnQgKHVuZGVyIGFyY2gveDg2L3ZpcnQvdm14L3RkeCBhbmQgYXJjaC94ODYva3ZtL3ZteC90ZHguYywgcGx1cyBtaXJyb3JlZCBURFAgaGFuZGxpbmcgZ3VhcmRlZCBieSBLVk1fWDg2X1REWF9WTSkuIFRoZXNlIHBhdGhzIHN0cmljdGx5IHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgQ1BVcyB3aXRoIFREWCBob3N0IHBsYXRmb3JtIHN1cHBvcnQgKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNLCBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFNFQU1SUiwgYW5kIHRoZSBJbnRlbCBURFggZmlybXdhcmUgbW9kdWxlKSwgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjA0LjIzNzU1Mzc2MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowbf72d[1] Phase: Running StartedAt: 2026-09-04 02:07:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf72d[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 02:07:16 +0000 UTC FinishedAt: 2026-09-04 02:07:20 +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,}