Name: series-workflow8gvp9 Phase: Succeeded StartedAt: 2026-09-15 03:12:59 +0000 UTC FinishedAt: 2026-09-15 04:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[0] Phase: Succeeded StartedAt: 2026-09-15 03:12:59 +0000 UTC FinishedAt: 2026-09-15 03:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 03:12:59 +0000 UTC FinishedAt: 2026-09-15 03:35:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MMU" ], "series_id": "e368a81f-631d-4d2a-86da-8b3bb3d7b3db" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_mmap", "tcp_zc_vma_open", "tcp_zc_vma_close", "tcp_zc_mem_charge", "tcp_zc_mem_uncharge", "tcp_zerocopy_receive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX21tYXAmIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9vcGVuJiMzNDssCiAgICAmIzM0O3RjcF96Y192bWFfY2xvc2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV9jaGFyZ2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV91bmNoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemVyb2NvcHlfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzICh2aWEgdGNwX21tYXAsIHRjcF96Y192bWFfb3BlbiwgYW5kIHRjcF96Y192bWFfY2xvc2UpLCB0cmFja2luZyBtbV9zdHJ1Y3QgYW5kIHNvY2sgcmVmZXJlbmNlcywgYW5kIHVwZGF0ZXMgbWVtb3J5IHJhaXNlIGFjY291bnRpbmcgaW4gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkIHdpdGggdGhlIG5ldyBTS19NRU1fUkVDVl9aRVJPQ09QWSBraW5kLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBNTSBpbnRlcmFjdGlvbiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2Ugc29ja2V0IHN5c2NhbGxzIChtbWFwLCBnZXRzb2Nrb3B0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBtdW5tYXAsIGV0Yy4pLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGZ1enogZm9yIG1lbW9yeSBhY2NvdW50aW5nLCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZDhmNmMwYjU5MzFhNDhhMTQwN2NkNTRiNmEyYTdkZDUyNmRiYzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MzE6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXG5pbmRleCA1MTE4NTIyMmFhYzI5Li5jZjE5MDU1YTljNDAxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmhcbkBAIC0xNTU2LDYgJiM0MzsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XG4gXG4gI2RlZmluZSBTS19NRU1fU0VORFx0MFxuICNkZWZpbmUgU0tfTUVNX1JFQ1ZcdDFcbiYjNDM7I2RlZmluZSBTS19NRU1fUkVDVl9aRVJPQ09QWVx0MHgxMDBcbiBcbiAvKiBzeXNjdGxfbWVtIHZhbHVlcyBhcmUgaW4gcGFnZXMgKi9cbiBzdGF0aWMgaW5saW5lIGxvbmcgc2tfcHJvdF9tZW1fbGltaXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IGluZGV4KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxuaW5kZXggYjUzMTA0Mzk1MzZlMC4uMGYxMGI5MmMxMThjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG5AQCAtMzgsNyAmIzQzOzM4LDggQEBcbiBcbiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXNcdFx0XHRcXFxuIFx0XHRFTShTS19NRU1fU0VORClcdFx0XHRcXFxuLVx0XHRFTWUoU0tfTUVNX1JFQ1YpXG4mIzQzO1x0XHRFTShTS19NRU1fUkVDVilcdFx0XHRcXFxuJiM0MztcdFx0RU1lKFNLX01FTV9SRUNWX1pFUk9DT1BZKVxuIFxuIC8qIGVudW1zIG5lZWQgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSAqL1xuICN1bmRlZiBFTVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggZmE2MGI3NDk0YzU4Ni4uM2Q4NWMxMzhlMWM3MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMzM4MCw3ICYjNDM7MzM4MCw3IEBAIGludCBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGFtdCwgaW50IGtpbmQpXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2Mgc2tfZ2V0X3JtZW0wKHNrLCBwcm90KSlcbiBcdFx0XHRyZXR1cm4gMTtcbiBcbi1cdH0gZWxzZSB7IC8qIFNLX01FTV9TRU5EICovXG4mIzQzO1x0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4gXHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI2Nyw2ICYjNDM7MjY3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2tleS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuQEAgLTE4NjAsMjMgJiM0MzsxODYxLDExOCBAQCB2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiYjNDM7c3RydWN0IHRjcF96Y192bWEge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0cmVmY291bnRfdCByZWZjbnQ7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogS2VlcCB0aGUgc2l6ZSBhcmd1bWVudCB0byBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQoKSB3aXRoaW4gaW50LiAqL1xuJiM0MzsjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjaHVuaztcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4mIzQzO1x0XHRjaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLFxuJiM0MztcdFx0XHQgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTtcbiYjNDM7XHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbiYjNDM7XHRcdG5yX3BhZ2VzIC09IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNoYXJnZWQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBjaHVuaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobnJfcGFnZXMpIHtcbiYjNDM7XHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xuJiM0MztcdFx0cmV0ID0gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHNrLCBjaHVuayBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpO1xuJiM0MztcdFx0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdFx0dGNwX3pjX21lbV91bmNoYXJnZShzaywgY2hhcmdlZCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2hhcmdlZCAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRucl9wYWdlcyAtPSBjaHVuaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmVmY291bnRfaW5jKFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbiYjNDM7XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCB6Y192bWEtXHUwMDNlbnJfcGFnZXMpO1xuJiM0MztcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4mIzQzO1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuJiM0MztcdFx0a2ZyZWUoemNfdm1hKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0ge1xuJiM0MztcdC5vcGVuID0gdGNwX3pjX3ZtYV9vcGVuLFxuJiM0MztcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG4gfTtcbiBcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4mIzQzO1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQyk7XG4gXG4gXHQvKiBJbnN0cnVjdCB2bV9pbnNlcnRfcGFnZSgpIHRvIG5vdCBtbWFwX3JlYWRfbG9jayhtbSkgKi9cbi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTtcbiYjNDM7XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9NSVhFRE1BUCk7XG4mIzQzO1xuJiM0MztcdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdHpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0aWYgKCF6Y192bWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0emNfdm1hLVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4mIzQzO1x0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xuJiM0MztcdHpjX3ZtYS1cdTAwM2VzayA9IHNvY2stXHUwMDNlc2s7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQsIDEpO1xuJiM0MztcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xuJiM0MztcdHNvY2tfaG9sZCh6Y192bWEtXHUwMDNlc2spO1xuJiM0MztcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXHUwMDNlc2ssIG5yX3BhZ2VzKSkge1xuJiM0MztcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4mIzQzO1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuJiM0MztcdFx0a2ZyZWUoemNfdm1hKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiBcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ0Y3Bfdm1fb3BzO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSB6Y192bWE7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZtYS1cdTAwM2V2bV9vcHMgPT0gXHUwMDI2dGNwX3ZtX29wcyBcdTAwMjZcdTAwMjYgemNfdm1hIFx1MDAyNlx1MDAyNiB6Y192bWEtXHUwMDNlbW0gPT0gbW07XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHNrYl9mcmFnX3QgKnNrYl9hZHZhbmNlX3RvX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldF9za2IsXG4gXHRcdFx0XHQgICAgICAgdTMyICpvZmZzZXRfZnJhZylcbiB7XG5AQCAtMjE3Myw3ICYjNDM7MjI2OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcbiBcdGlmICh2bWEpIHtcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuJiM0MztcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG4gXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC0yMTgzLDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuIFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcmVzcyk7XG4tXHRpZiAoIXZtYSB8fCB2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbiYjNDM7XHRpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfbW1hcCYjMzQ7LAogICAgJiMzNDt0Y3BfemNfdm1hX29wZW4mIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9jbG9zZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX2NoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGQ4ZjZjMGI1OTMxYTQ4YTE0MDdjZDU0YjZhMmE3ZGQ1MjZkYmM2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAzOjMxOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmNmMTkwNTVhOWM0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTE1NTYsNiAmIzQzOzE1NTYsNyBAQCB2b2lkIF9fc2tfbWVtX3JlY2xhaW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgYW1vdW50KTsKIAogI2RlZmluZSBTS19NRU1fU0VORAkwCiAjZGVmaW5lIFNLX01FTV9SRUNWCTEKJiM0MzsjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZCTB4MTAwCiAKIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqLwogc3RhdGljIGlubGluZSBsb25nIHNrX3Byb3RfbWVtX2xpbWl0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBpbmRleCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaAppbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oCkBAIC0zOCw3ICYjNDM7MzgsOCBAQAogCiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXMJCQlcCiAJCUVNKFNLX01FTV9TRU5EKQkJCVwKLQkJRU1lKFNLX01FTV9SRUNWKQomIzQzOwkJRU0oU0tfTUVNX1JFQ1YpCQkJXAomIzQzOwkJRU1lKFNLX01FTV9SRUNWX1pFUk9DT1BZKQogCiAvKiBlbnVtcyBuZWVkIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgKi8KICN1bmRlZiBFTQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGZhNjBiNzQ5NGM1ODYuLjNkODVjMTM4ZTFjNzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTMzODAsNyAmIzQzOzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKQogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtzay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmx0OyBza19nZXRfcm1lbTAoc2ssIHByb3QpKQogCQkJcmV0dXJuIDE7CiAKLQl9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqLwomIzQzOwl9IGVsc2UgaWYgKGtpbmQgPT0gU0tfTUVNX1NFTkQpIHsKIAkJaW50IHdtZW0wID0gc2tfZ2V0X3dtZW0wKHNrLCBwcm90KTsKIAogCQlpZiAoc2stJmd0O3NrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI2Nyw2ICYjNDM7MjY3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0YXRpY19rZXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2luZXRfY29tbW9uLmgmZ3Q7CkBAIC0xODYwLDIzICYjNDM7MTg2MSwxMTggQEAgdm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpCiB9CiAKICNpZmRlZiBDT05GSUdfTU1VCiYjNDM7c3RydWN0IHRjcF96Y192bWEgewomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJcmVmY291bnRfdCByZWZjbnQ7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi8KJiM0MzsjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggJmd0OyZndDsgUEFHRV9TSElGVCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjaHVuazsKJiM0MzsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzKSB7CiYjNDM7CQljaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAomIzQzOwkJCSAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspOwomIzQzOwkJX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZChzaywgY2h1bmspOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNoYXJnZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgY2h1bms7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlIChucl9wYWdlcykgewomIzQzOwkJY2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcywKJiM0MzsJCQkgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTsKJiM0MzsJCXJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCSAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpOwomIzQzOwkJaWYgKCFyZXQpIHsKJiM0MzsJCQl0Y3BfemNfbWVtX3VuY2hhcmdlKHNrLCBjaGFyZ2VkKTsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCX0KJiM0MzsJCWNoYXJnZWQgJiM0Mzs9IGNodW5rOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7emNfdm1hLSZndDtyZWZjbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQpKSB7CiYjNDM7CQl0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIHpjX3ZtYS0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0gewomIzQzOwkub3BlbiA9IHRjcF96Y192bWFfb3BlbiwKJiM0MzsJLmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSwKIH07CiAKIGludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewomIzQzOwlzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9XUklURSB8IFZNX0VYRUMpKQogCQlyZXR1cm4gLUVQRVJNOwogCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKTsKIAogCS8qIEluc3RydWN0IHZtX2luc2VydF9wYWdlKCkgdG8gbm90IG1tYXBfcmVhZF9sb2NrKG1tKSAqLwotCXZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTsKJiM0MzsJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTUlYRURNQVApOwomIzQzOwomIzQzOwlucl9wYWdlcyA9ICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghemNfdm1hKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXpjX3ZtYS0mZ3Q7bnJfcGFnZXMgPSBucl9wYWdlczsKJiM0MzsJemNfdm1hLSZndDttbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CXpjX3ZtYS0mZ3Q7c2sgPSBzb2NrLSZndDtzazsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQsIDEpOwomIzQzOwltbWdyYWIoemNfdm1hLSZndDttbSk7CiYjNDM7CXNvY2tfaG9sZCh6Y192bWEtJmd0O3NrKTsKJiM0MzsJaWYgKHRjcF96Y19tZW1fY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIG5yX3BhZ2VzKSkgewomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt0Y3Bfdm1fb3BzOwomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHpjX3ZtYTsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtYS0mZ3Q7dm1fb3BzID09ICZhbXA7dGNwX3ZtX29wcyAmYW1wOyZhbXA7IHpjX3ZtYSAmYW1wOyZhbXA7IHpjX3ZtYS0mZ3Q7bW0gPT0gbW07CiYjNDM7fQomIzQzOwogc3RhdGljIHNrYl9mcmFnX3QgKnNrYl9hZHZhbmNlX3RvX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldF9za2IsCiAJCQkJICAgICAgIHUzMiAqb2Zmc2V0X2ZyYWcpCiB7CkBAIC0yMTczLDcgJiM0MzsyMjY5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAogCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwkJaWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7CiAJCQl2bWFfZW5kX3JlYWQodm1hKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yMTgzLDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJbW1hcF9yZWFkX2xvY2sobW0pOwogCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpOwotCWlmICghdm1hIHx8IHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwlpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlplcm8tQ29weSBSZWNlaXZlIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc29tZSBjaGFuZ2VzIHRoYXQgSSBuZWVkIHRvIGRpc3NlY3QuIEZpcnN0IG9mZiwgaXQmIzM5O3MgYWRkaW5nIGBTS19NRU1fUkVDVl9aRVJPQ09QWWAgYXMgYSBuZXcgbWVtb3J5IGtpbmQsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAgYW5kIHRoZW4gcmVmZXJlbmNlZCBpbiB0aGUgdHJhY2UgZXZlbnRzIGluIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWVhbnMgaXQmIzM5O3MgcmVsYXRlZCB0byB0cmFja2luZyBtZW1vcnkgdXNhZ2UgZm9yIHplcm8tY29weSByZWNlaXZlcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpJbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGZ1bmN0aW9uIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2UgaGVyZSBpcyBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQ6IHRoZSBgZWxzZWAgYmxvY2sgZm9yIGBTS19NRU1fU0VORGAgaXMgbm93IGV4cGxpY2l0bHkgY2hlY2tlZC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgbm93IGhhbmRsaW5nIHRoZSBuZXcgYFNLX01FTV9SRUNWX1pFUk9DT1BZYCBraW5kIG1vcmUgZXhwbGljaXRseSBpbiB0aGlzIGZ1bmN0aW9uIHdoaWNoIGNvdWxkIGJlIGNydWNpYWwgZm9yIGFjY291bnRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdHJhY2tpbmcgaGFzIGJlZW4gbW9kaWZpZWQuCgpOb3cgZm9yIHRoZSBtZWF0IG9mIGl0OiB0aGUgYG5ldC9pcHY0L3RjcC5jYCBjaGFuZ2VzLCBhbGwgdW5kZXIgdGhlIGAjaWZkZWYgQ09ORklHX01NVWAgZ3VhcmQuIFRoaXMgc2NyZWFtcyAmIzM0O21lbW9yeSBtYW5hZ2VtZW50JiMzNDsgYW5kIHplcm8tY29weSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGVhcmxpZXIgYWRkaXRpb25zLiBBIG5ldyBgc3RydWN0IHRjcF96Y192bWFgIGlzIGRlZmluZWQsIHdpdGggcmVmY291bnRpbmcsIGFuZCByZWZlcmVuY2VzIHRvIHBhZ2VzLCBtZW1vcnkgbWFwcGluZywgYW5kIHRoZSBzb2NrZXQuIFdlIGhhdmUgY2hhcmdlL3VuY2hhcmdlIGZ1bmN0aW9ucyAoYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgKSBhbmQgb3Blbi9jbG9zZSBmdW5jdGlvbnMgZm9yIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgKS4gVGhpcyBtYWtlcyBtZSB0aGluayB0aGlzIHBhdGNoIGlzIGRpcmVjdGx5IGltcGxlbWVudGluZyB6ZXJvLWNvcHkgbW1hcCBzdXBwb3J0LgoKVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHRjcF9tbWFwYCBhcmUgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYFZNX0RPTlRDT1BZYCwgYFZNX0RPTlRFWFBBTkRgLCBhbmQgYFZNX01JWEVETUFQYCBhcmUgYmVpbmcgc2V0IG9uIHRoZSBWTUEuIFRoaXMgaXMgdmVyeSBzdGFuZGFyZCBmb3IgYSB6ZXJvLWNvcHkgaW1wbGVtZW50YXRpb24uIEEgYHpjX3ZtYWAgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBzb2NrZXQgbWVtb3J5IGNoYXJnZWQgdmlhIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGFuZCBtb3N0IGltcG9ydGFudGx5IGBtbWAgYW5kIGBza2AgYXJlIGJlaW5nIGhlbGQgd2l0aGluIHRoZSBgdm1hYCwgcHJlc3VtYWJseSBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuCgpGaW5hbGx5LCBgdGNwX3pjX3ZtYV92YWxpZGAgYW5kIHRoZSB1cGRhdGVzIHRvIGBmaW5kX3RjcF92bWFgIGFyZSBhZGRlZC4gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgdmFsaWQgZmxhZyBpcyBjaGVja2VkLgoKVG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB0Y3BfbW1hcGAgYW5kIGBmaW5kX3RjcF92bWFgIGFyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGBuZXQvaXB2NC90Y3AuY2AuIEl0JiMzOTtzIHRpbWUgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgVENQIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX3RjcF92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMjM5PXN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyNjQtXG5uZXQvaXB2NC90Y3AuYzoyMjY1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm5ldC9pcHY0L3RjcC5jLTIyNjYtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMjkxPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIzMzEtXG5uZXQvaXB2NC90Y3AuYzoyMzMyOlx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXHUwMDNlbW0sIGFkZHJlc3MsIFx1MDAyNm1tYXBfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTIzMzMtXHRpZiAoIXZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9pcHY0L3RjcC5jYCBhbmQgc3BlY2lmaWNhbGx5IGhvbmUgaW4gYXJvdW5kIGxpbmUgMjI5MS4gTXkgYWltIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIGltcGxlbWVudGVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLCB0aGUgb3B0aW1pemF0aW9ucywgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4uLiBhbGwgdGhlIGp1aWN5IGRldGFpbHMgYmVoaW5kIHRoZSBzY2VuZXMuIFplcm8tY29weSBpcyBhIHBlcmZvcm1hbmNlIGdhbWUtY2hhbmdlciwgc28gdW5kZXJzdGFuZGluZyBpdHMgVENQIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGVmZmljaWVudCBuZXR3b3JrIHByb2dyYW1taW5nLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IGRhdGEgYnVmZmVycyBhcmUgbWFuYWdlZCwgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdXNlciBzcGFjZSwgdGhlIHJvbGUgb2YgRE1BLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29tcGxleGl0aWVzIGluIHRoZSBzeW5jaHJvbml6YXRpb24uIFRoaXMgd2lsbCB0ZWxsIG1lIGEgbG90IG1vcmUgdGhhbiBhbnkgYWJzdHJhY3QgZGVzY3JpcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI4NTpcdFx0fVxuMjI4NjpcdFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcbjIyODc6XHRcdHJldHVybiB2bWE7XG4yMjg4Olx0fVxuMjI4OTpcdFxuMjI5MDpcdCNkZWZpbmUgVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRSAzMlxuMjI5MTpcdHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuMjI5MjpcdFx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcbjIyOTM6XHRcdFx0XHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXG4yMjk0Olx0e1xuMjI5NTpcdFx0dTMyIGxlbmd0aCA9IDAsIG9mZnNldCwgdm1hX2xlbiwgYXZhaWxfbGVuLCBjb3B5bGVuID0gMDtcbjIyOTY6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXpjLVx1MDAzZWFkZHJlc3M7XG4yMjk3Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZXNbVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRV07XG4yMjk4Olx0XHRzMzIgY29weWJ1Zl9sZW4gPSB6Yy1cdTAwM2Vjb3B5YnVmX2xlbjtcbjIyOTk6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMjMwMDpcdFx0Y29uc3Qgc2tiX2ZyYWdfdCAqZnJhZ3MgPSBOVUxMO1xuMjMwMTpcdFx0dW5zaWduZWQgaW50IHBhZ2VzX3RvX21hcCA9IDA7XG4yMzAyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbjIzMDM6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuMjMwNDpcdFx0dTMyIHNlcSA9IHRwLVx1MDAzZWNvcGllZF9zZXE7XG4yMzA1Olx0XHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xuMjMwNjpcdFx0aW50IGlucSA9IHRjcF9pbnEoc2spO1xuMjMwNzpcdFx0Ym9vbCBtbWFwX2xvY2tlZDtcbjIzMDg6XHRcdGludCByZXQ7XG4yMzA5Olx0XG4yMzEwOlx0XHR6Yy1cdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XG4yMzExOlx0XHR6Yy1cdTAwM2Vtc2dfZmxhZ3MgPSAwO1xuMjMxMjpcdFxuMjMxMzpcdFx0aWYgKGFkZHJlc3MgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fCBhZGRyZXNzICE9IHpjLVx1MDAzZWFkZHJlc3MpXG4yMzE0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMxNTpcdFxuMjMxNjpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pXG4yMzE3Olx0XHRcdHJldHVybiAtRU5PVENPTk47XG4yMzE4Olx0XG4yMzE5Olx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4yMzIwOlx0XG4yMzIxOlx0XHRpZiAoaW5xIFx1MDAyNlx1MDAyNiBpbnEgXHUwMDNjPSBjb3B5YnVmX2xlbilcbjIzMjI6XHRcdFx0cmV0dXJuIHJlY2VpdmVfZmFsbGJhY2tfdG9fY29weShzaywgemMsIGlucSwgdHNzKTtcbjIzMjM6XHRcbjIzMjQ6XHRcdGlmIChpbnEgXHUwMDNjIFBBR0VfU0laRSkge1xuMjMyNTpcdFx0XHR6Yy1cdTAwM2VsZW5ndGggPSAwO1xuMjMyNjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGlucTtcbjIzMjc6XHRcdFx0aWYgKCFpbnEgXHUwMDI2XHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbjIzMjg6XHRcdFx0XHRyZXR1cm4gLUVJTztcbjIzMjk6XHRcdFx0cmV0dXJuIDA7XG4yMzMwOlx0XHR9XG4yMzMxOlx0XG4yMzMyOlx0XHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cdTAwM2VtbSwgYWRkcmVzcywgXHUwMDI2bW1hcF9sb2NrZWQpO1xuMjMzMzpcdFx0aWYgKCF2bWEpXG4yMzM0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMzNTpcdFxuMjMzNjpcdFx0dm1hX2xlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpjLVx1MDAzZWxlbmd0aCwgdm1hLVx1MDAzZXZtX2VuZCAtIGFkZHJlc3MpO1xuMjMzNzpcdFx0YXZhaWxfbGVuID0gbWluX3QodTMyLCB2bWFfbGVuLCBpbnEpO1xuMjMzODpcdFx0dG90YWxfYnl0ZXNfdG9fbWFwID0gYXZhaWxfbGVuIFx1MDAyNiB+KFBBR0VfU0laRSAtIDEpO1xuMjMzOTpcdFx0aWYgKHRvdGFsX2J5dGVzX3RvX21hcCkge1xuMjM0MDpcdFx0XHRpZiAoISh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgVENQX1JFQ0VJVkVfWkVST0NPUFlfRkxBR19UTEJfQ0xFQU5fSElOVCkpXG4yMzQxOlx0XHRcdFx0emFwX3ZtYV9yYW5nZSh2bWEsIGFkZHJlc3MsIHRvdGFsX2J5dGVzX3RvX21hcCk7XG4yMzQyOlx0XHRcdHpjLVx1MDAzZWxlbmd0aCA9IHRvdGFsX2J5dGVzX3RvX21hcDtcbjIzNDM6XHRcdFx0emMtXHUwMDNlcmVjdl9za2lwX2hpbnQgPSAwO1xuMjM0NDpcdFx0fSBlbHNlIHtcbjIzNDU6XHRcdFx0emMtXHUwMDNlbGVuZ3RoID0gYXZhaWxfbGVuO1xuMjM0NjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGF2YWlsX2xlbjtcbjIzNDc6XHRcdH1cbjIzNDg6XHRcdHJldCA9IDA7XG4yMzQ5Olx0XHR3aGlsZSAobGVuZ3RoICYjNDM7IFBBR0VfU0laRSBcdTAwM2M9IHpjLVx1MDAzZWxlbmd0aCkge1xuMjM1MDpcdFx0XHRpbnQgbWFwcGFibGVfb2Zmc2V0O1xuMjM1MTpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjIzNTI6XHRcbjIzNTM6XHRcdFx0aWYgKHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50IFx1MDAzYyBQQUdFX1NJWkUpIHtcbjIzNTQ6XHRcdFx0XHR1MzIgb2Zmc2V0X2ZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFplcm9jb3B5IFJlY2VpdmUqKgoKT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgdGNwX21tYXBgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHNvbWVvbmUgY2FsbHMgYG1tYXAoZmQpYCBvbiBhIFRDUCBzb2NrZXQuIFRoYXQgbWFrZXMgc2Vuc2UsIGNvbm5lY3RzIHRoZSBzeXN0ZW0gY2FsbCB0byB0aGUgcmlnaHQga2VybmVsIGZ1bmN0aW9uLiBBbmQgdGhlIGNvbnRleHQgaW1tZWRpYXRlbHkgY2xhcmlmaWVzIHRoYXQgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIFRDUCB6ZXJvY29weSByZWNlaXZlLiBJJiMzOTttIHJlY2FsbGluZyBub3cgdGhhdCB0aGlzIDAtY29weSByZWNlaXZlIGZlYXR1cmUgaXMgZW5hYmxlZCB2aWEgYGdldHNvY2tvcHQoLi4uLCBTT0xfVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgLi4uKWAuIFRoYXQgdHJpZ2dlcnMgYHRjcF9tbWFwYCwgcmlnaHQ/IEdvdCBpdC4gTm93IEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc29ja2V0IG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzIGF0IGEgbG93ZXIgbGV2ZWwuIExldCBtZSBjaGVjayBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBhY3R1YWxseSBnZXRzIHRyYW5zZmVycmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XG4zMzcxOlx0XHQvKiBHdWFyYW50ZWUgbWluaW11bSBidWZmZXIgc2l6ZSB1bmRlciBwcmVzc3VyZSAoZWl0aGVyIGdsb2JhbFxuMzM3MjpcdFx0ICogb3IgbWVtY2cpIHRvIG1ha2Ugc3VyZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gUkZDIDczMjMgKFRDUFxuMzM3MzpcdFx0ICogRXh0ZW5zaW9ucyBmb3IgSGlnaCBQZXJmb3JtYW5jZSkgd29yayBwcm9wZXJseS5cbjMzNzQ6XHRcdCAqXG4zMzc1Olx0XHQgKiBUaGlzIHJ1bGUgZG9lcyBOT1Qgc3RhbmQgd2hlbiBleGNlZWRzIGdsb2JhbCBvciBtZW1jZyYjMzk7cyBoYXJkXG4zMzc2Olx0XHQgKiBsaW1pdCwgb3IgZWxzZSBhIERvUyBhdHRhY2sgY2FuIGJlIHRha2VuIHBsYWNlIGJ5IHNwYXduaW5nXG4zMzc3Olx0XHQgKiBsb3RzIG9mIHNvY2tldHMgd2hvc2UgdXNhZ2UgYXJlIHVuZGVyIG1pbmltdW0gYnVmZmVyIHNpemUuXG4zMzc4Olx0XHQgKi9cbjMzNzk6XHRcdGlmIChraW5kID09IFNLX01FTV9SRUNWKSB7XG4zMzgwOlx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2Mgc2tfZ2V0X3JtZW0wKHNrLCBwcm90KSlcbjMzODE6XHRcdFx0XHRyZXR1cm4gMTtcbjMzODI6XHRcbjMzODM6XHRcdH0gZWxzZSBpZiAoa2luZCA9PSBTS19NRU1fU0VORCkge1xuMzM4NDpcdFx0XHRpbnQgd21lbTAgPSBza19nZXRfd21lbTAoc2ssIHByb3QpO1xuMzM4NTpcdFxuMzM4NjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuMzM4NzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza193bWVtX3F1ZXVlZCBcdTAwM2Mgd21lbTApXG4zMzg4Olx0XHRcdFx0XHRyZXR1cm4gMTtcbjMzODk6XHRcdFx0fSBlbHNlIGlmIChyZWZjb3VudF9yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3dtZW1fYWxsb2MpIFx1MDAzYyB3bWVtMCkge1xuMzM5MDpcdFx0XHRcdFx0cmV0dXJuIDE7XG4zMzkxOlx0XHRcdH1cbjMzOTI6XHRcdH1cbjMzOTM6XHRcbjMzOTQ6XHRcdGlmIChza19oYXNfbWVtb3J5X3ByZXNzdXJlKHNrKSkge1xuMzM5NTpcdFx0XHR1NjQgYWxsb2M7XG4zMzk2Olx0XG4zMzk3Olx0XHRcdC8qIFRoZSBmb2xsb3dpbmcgJiMzOTthdmVyYWdlJiMzOTsgaGV1cmlzdGljIGlzIHdpdGhpbiB0aGVcbjMzOTg6XHRcdFx0ICogc2NvcGUgb2YgZ2xvYmFsIGFjY291bnRpbmcsIHNvIGl0IG9ubHkgbWFrZXNcbjMzOTk6XHRcdFx0ICogc2Vuc2UgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUuXG4zNDAwOlx0XHRcdCAqL1xuMzQwMTpcdFx0XHRpZiAoIXNrX3VuZGVyX2dsb2JhbF9tZW1vcnlfcHJlc3N1cmUoc2spKVxuMzQwMjpcdFx0XHRcdHJldHVybiAxO1xuMzQwMzpcdFxuMzQwNDpcdFx0XHQvKiBUcnkgdG8gYmUgZmFpciBhbW9uZyBhbGwgdGhlIHNvY2tldHMgdW5kZXIgZ2xvYmFsXG4zNDA1Olx0XHRcdCAqIHByZXNzdXJlIGJ5IGFsbG93aW5nIHRoZSBvbmVzIHRoYXQgYmVsb3cgYXZlcmFnZVxuMzQwNjpcdFx0XHQgKiB1c2FnZSB0byByYWlzZS5cbjM0MDc6XHRcdFx0ICovXG4zNDA4Olx0XHRcdGFsbG9jID0gc2tfc29ja2V0c19hbGxvY2F0ZWRfcmVhZF9wb3NpdGl2ZShzayk7XG4zNDA5Olx0XHRcdGlmIChza19wcm90X21lbV9saW1pdHMoc2ssIDIpIFx1MDAzZSBhbGxvYyAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWmVyby1Db3B5IFRDUCBtbWFwOiBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzIGFuZCBGdXp6aW5nIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkmIzM5O3ZlIGdvdCBzb21lIGNvbmNlcm5zIGFib3V0IGhvdyB6ZXJvLWNvcHkgaXMgYmVpbmcgaW1wbGVtZW50ZWQgZm9yIFRDUCBzb2NrZXRzLiBJdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBsb2dpYyBpbiBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCBjaGVja2VkIGVpdGhlciByZWNlaXZlIG9yIHNlbmQgbWVtb3J5IGxpbWl0cyBiYXNlZCBvbiB0aGUgc29ja2V0JiMzOTtzIHJlY2VpdmUgb3Igc2VuZCBmbGFncy4gQnV0IG5vdywgd2l0aCBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCBpdCBieXBhc3NlcyB0aG9zZSBjaGVja3MgZW50aXJlbHkhIFRoYXQgZmVlbHMuLi4gcmlza3kuCgpUaGVuLCB0aGVyZSYjMzk7cyBgdGNwX21tYXBgLiBJdCBzZXRzIHRoZXNlIGBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9NSVhFRE1BUGAgZmxhZ3Mgb24gdGhlIFZNQSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHplcm8tY29weS4gVGhlIGNvZGUgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBhbGxvY2F0ZXMgYSBgemNfdm1hYCBzdHJ1Y3R1cmUsIGFuZCBjaGFyZ2VzIHNvY2tldCBtZW1vcnkgdXNpbmcgYHRjcF96Y19tZW1fY2hhcmdlYC4gVGhhdCBtdWNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIFZNQSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tYCkgYW5kIHRoZSBzb2NrZXQgKGBza2ApLiAgV2hlbiB0aGUgVk1BIGlzIGNsb3NlZCBieSB0aGUgdXNlciwgdGhlIHJlZmNvdW50IGdldHMgZGVjcmVtZW50ZWQsIHRoZSBtZW1vcnkgdW5jaGFyZ2VkLCBhbmQgdGhlbiBhbGwgdGhlIG1lbW9yeSB1c2VkIGlzIGZyZWVkLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGF0IGlmIHRoZSBWTUEgaXMgc3BsaXQsIGxpa2UgYnkgYG11bm1hcGAgb3IgYG1wcm90ZWN0YD8gIGB0Y3BfemNfdm1hX29wZW5gIGlzIGNhbGxlZCB0byBpbmNyZW1lbnQgdGhlIHJlZmNvdW50IHdoZW4gdGhlIFZNQSBpcyBzcGxpdC9jbG9uZWQuICBIZXJlJiMzOTtzIHRoZSBwcm9ibGVtOiBUaGUgaW5pdGlhbCBjaGFyZ2UgaGFwcGVucyBvbmx5IG9uY2UgaW4gYHRjcF9tbWFwYC4gSG93ZXZlciwgaWYgSSBzcGxpdCB0aGUgVk1BIGluIGFueSB3YXkgYnkgYG11bm1hcGAsIGBtcHJvdGVjdGAsIG9yIGV2ZW4gYG1hZHZpc2VgLCB0aGVuIGJvdGggVk1BJiMzOTtzIHBvaW50IHRvIHRoZSBzYW1lIGB6Y192bWFgIGFuZCB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgZm9yIGJvdGguICBJZiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIFZNQSBpcyBjbG9zZWQsIHRoZSByZWZjb3VudCBpcyBkZWNyZW1lbnRlZC4gVGhlbiB0aGUgZmluYWwgY2xvc2Ugb2YgdGhlIG9yaWdpbmFsIFZNQSB1bmNoYXJnZXMgdGhlIG9yaWdpbmFsIGFtb3VudCBvZiBwYWdlcyEgVGhpcyBtZWFucyBtZW1vcnkgY291bGQgYmUgb3ZlcmNoYXJnZWQuCgpXYWl0IGEgc2Vjb25kIC0gd2hhdCBpZiBJIGBtdW5tYXBgICpwYXJ0KiBvZiBpdD8gSWYgSSB1bm1hcCB0aGUgbWlkZGxlIG9mIHRoZSBWTUEsIHRoZW4gdGhlIFZNQSBzcGxpdHMgaW50byB0aHJlZSBwYXJ0cy4gSSAqdGhpbmsqIHRoZSBWTUEgb3BlcmF0aW9ucyBhcmUgY2FsbGVkIGFnYWluIGZvciB0aGUgb3BlbiBhbmQgY2xvc2luZyBvZiBlYWNoIG5ldyBWTUEuIFRoaXMgaXMgdmVyeSBjb21wbGljYXRlZCwgYW5kIEkmIzM5O20gbG9zaW5nIHRyYWNrIG9mIHJlZmNvdW50cyEgIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGlmIGB6Y192bWEtJmd0O3JlZmNudGAgZHJvcHM/ICBUaGlzIGlzIGFsbCBnZXR0aW5nIHZlcnkgbWVzc3khCgpBbHNvLCBpdCBsb29rcyBsaWtlIGBWTV9XUklURWAgYW5kIGBWTV9FWEVDYCBhcmUgZXhwbGljaXRseSByZWplY3RlZCwgd2hpY2ggaXMgZ29vZC4KCkJ1dCB3YWl0LCB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgdGhlIGNvcmUgTU0gKG1lbW9yeSBtYW5hZ2VtZW50KSBhbmQgbmV0d29ya2luZyBzdGFjayEgIFRoaXMgaXMgaW1wb3J0YW50LiAgQW5kIHRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gIEkgY2FuIGRlZmluaXRlbHkgcmVhY2ggdGhpcyBjb2RlIGZyb20gdXNlcnNwYWNlIHdpdGggc3RhbmRhcmQgc3lzY2FsbHMsIGxpa2UgYHNvY2tldGAsIGBtbWFwYCwgYG11bm1hcGAsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYCwgYW5kIGBnZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfWkVST0NPUFlfUkVDRUlWRWAuICBUaGlzIGlzIGFsbCBlYXNpbHkgYWNjZXNzaWJsZSBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIHN5emthbGxlci4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueSBzcGVjaWFsIGNvbmZpZ3MgYXJlIG5lZWRlZC4gSSYjMzk7bGwgY2hlY2sgYENPTkZJR19NTVVgIGFuZCB0aGUgVENQIGNvbmZpZ3MuICBPbiB4ODZfNjQsIHRoZSBNTVUgaXMgYWx3YXlzIG9uLCBzbyB0aGF0JiMzOTtzIGdvb2QuICBJIGFsc28gbmVlZCB0byBzZWFyY2ggdGhlIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnQgYnVncy4gSSBzdXNwZWN0IHRoaXMgaXMgd29ydGggZnV6emluZyBoZWF2aWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfemNfdm1hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTE4NTg9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTg2My0jaWZkZWYgQ09ORklHX01NVVxubmV0L2lwdjQvdGNwLmM6MTg2NDpzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG5uZXQvaXB2NC90Y3AuYy0xODY1LVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbi0tXG5uZXQvaXB2NC90Y3AuYz0xODg2PXN0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE5MDctXG5uZXQvaXB2NC90Y3AuYzoxOTA4OnN0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm5ldC9pcHY0L3RjcC5jLTE5MDkte1xubmV0L2lwdjQvdGNwLmM6MTkxMDpcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xubmV0L2lwdjQvdGNwLmMtMTkxMS1cbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTE0LVxubmV0L2lwdjQvdGNwLmM6MTkxNTpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubmV0L2lwdjQvdGNwLmMtMTkxNi17XG5uZXQvaXB2NC90Y3AuYzoxOTE3Olx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG5uZXQvaXB2NC90Y3AuYy0xOTE4LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTE5Mjc9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0ge1xubmV0L2lwdjQvdGNwLmM6MTkyODpcdC5vcGVuID0gdGNwX3pjX3ZtYV9vcGVuLFxubmV0L2lwdjQvdGNwLmM6MTkyOTpcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG5uZXQvaXB2NC90Y3AuYy0xOTMwLX07XG4tLVxubmV0L2lwdjQvdGNwLmM9MTkzMj1pbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMTkzNC17XG5uZXQvaXB2NC90Y3AuYzoxOTM1Olx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYTtcbm5ldC9pcHY0L3RjcC5jLTE5MzYtXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE5NjctXG5uZXQvaXB2NC90Y3AuYzoxOTY4OnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5uZXQvaXB2NC90Y3AuYy0xOTY5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5uZXQvaXB2NC90Y3AuYy0xOTcwLXtcbm5ldC9pcHY0L3RjcC5jOjE5NzE6XHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbm5ldC9pcHY0L3RjcC5jLTE5NzItXG4tLVxubmV0L2lwdjQvdGNwLmM9MjI2NT1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjI3MS1cdGlmICh2bWEpIHtcbm5ldC9pcHY0L3RjcC5jOjIyNzI6XHRcdGlmICghdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xubmV0L2lwdjQvdGNwLmMtMjI3My1cdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMjgxLVx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcmVzcyk7XG5uZXQvaXB2NC90Y3AuYzoyMjgyOlx0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcbm5ldC9pcHY0L3RjcC5jLTIyODMtXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3RhY2sgUGVyZm9ybWFuY2UqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbmV0d29yayBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQ/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGFyZWFzIG1vc3QgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBkYXRhIHRyYW5zZmVyIGFuZCBoYW5kbGluZyDigJMgc28sIGB0Y3BfbW1hcGAgY2FsbGVycyBhcmUgYSBwcmltZSBzdXNwZWN0LiBNZW1vcnkgbWFwcGluZyB3aXRoaW4gVENQIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBrZXkuIEFsdGVybmF0aXZlbHksIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggdGhhdCwgdGhlIGBpbmV0X3N0cmVhbV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBjb250YWlucyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGRlZmluZSB0aGUgVENQIHNvY2tldCBvcGVyYXRpb25zIGF0IGEgdmVyeSBsb3cgbGV2ZWwuIFRoZXkgaGFuZGxlIHNlbmQsIHJlY2VpdmUsIGFuZCBvdGhlciBjcml0aWNhbCBmdW5jdGlvbnMuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgdGhvc2UgYXMgd2VsbC4gRWl0aGVyIG9uZSBvZiB0aGVzZSBhcmVhcyBpcyBsaWtlbHkgdG8geWllbGQgY2x1ZXMgdG8gdGhlIG5hdHVyZSBvZiBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIHdlJiMzOTtyZSBzZWVpbmcsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggYm90aCBvZiB0aGVzZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gZ2V0IHNvbWUgaW5zaWdodHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9tbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTUyOT12b2lkIHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaC01MzAtI2lmZGVmIENPTkZJR19NTVVcbmluY2x1ZGUvbmV0L3RjcC5oOjUzMTppbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5pbmNsdWRlL25ldC90Y3AuaC01MzItXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTA2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA3OC0jaWZkZWYgQ09ORklHX01NVVxubmV0L2lwdjQvYWZfaW5ldC5jOjEwNzk6XHQubW1hcFx0XHQgICA9IHRjcF9tbWFwLFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODAtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTkzMS1cbm5ldC9pcHY0L3RjcC5jOjE5MzI6aW50IHRjcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L2lwdjQvdGNwLmMtMTkzMy1cdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02NjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjc4LSNpZmRlZiBDT05GSUdfTU1VXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY3OTpcdC5tbWFwXHRcdCAgID0gdGNwX21tYXAsXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4MC0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZT00OD10Y3BfaW5xXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZTo0OTp0Y3BfbW1hcFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUtNTAtdGNwX3BvcnRfc2hhcmVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU9MTQ0PVRFU1RfR0VOX0ZJTEVTIDo9IFxcXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTE3MC1cdHRjcF9pbnEgXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZToxNzE6XHR0Y3BfbW1hcCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTE3Mi1cdHRmbyBcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZT0yMzk9JChPVVRQVVQpL3JldXNlcG9ydF9icGZfbnVtYTogTERMSUJTICYjNDM7PSAtbG51bWFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZToyNDA6JChPVVRQVVQpL3RjcF9tbWFwOiBMRExJQlMgJiM0Mzs9IC1scHRocmVhZCAtbGNyeXB0b1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTI0MS0kKE9VVFBVVCkvdGNwX2lucTogTERMSUJTICYjNDM7PSAtbHB0aHJlYWRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0xNC0gKiAgaWZjb25maWcgbG8gbXR1IDYxNTEyICAjIDE1KjQwOTYgJiM0MzsgNDAgKGlwdjYgaGVhZGVyKSAmIzQzOyAzMiAoVENQIHdpdGggVFMgb3B0aW9uIGhlYWRlcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjE1OiAqICB0Y3BfbW1hcCAtcyAteiBcdTAwMjZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjE2OiAqICB0Y3BfbW1hcCAtSCA6OjEgLXpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTE3LSAqXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMTktICogICAgICAoNDA5NiA6IHBhZ2Ugc2l6ZSBvbiB4ODYsIDEyOiBUQ1AgVFMgb3B0aW9uIGxlbmd0aClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjIwOiAqICB0Y3BfbW1hcCAtcyAteiAtTSAkKCg0MDk2JiM0MzsxMikpIFx1MDAyNlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MjE6ICogIHRjcF9tbWFwIC1IIDo6MSAteiAtTSAkKCg0MDk2JiM0MzsxMikpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yMi0gKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTI1LSAqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoyNjogKiAkIC4vdGNwX21tYXAgLXMgXHUwMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXRob3V0IG1tYXAoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6Mjc6ICogJCBmb3IgaSBpbiB7MS4uNH07IGRvIC4vdGNwX21tYXAgLUggOjoxIC16IDsgZG9uZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjgtICogcmVjZWl2ZWQgMzI3NjggTUIgKDAgJSBtbWFwJiMzOTtlZCkgaW4gMTQuMTE1NyBzLCAxOS40NzMyIEdiaXRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0zNS0gKiAgIGNwdSB1c2FnZSB1c2VyOjAuMDM2IHN5czo4LjE5MywgMjUxLjEyOSB1c2VjIHBlciBNQiwgNjU1MzAgYy1zd2l0Y2hlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MzY6ICogJCBraWxsICUxICAgIyBraWxsIHRjcF9tbWFwIHNlcnZlclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMzctICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM4OiAqICQgLi90Y3BfbW1hcCAtcyAteiBcdTAwMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdpdGggbW1hcCgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzozOTogKiAkIGZvciBpIGluIHsxLi40fTsgZG8gLi90Y3BfbW1hcCAtSCA6OjEgLXogOyBkb25lXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy00MC0gKiByZWNlaXZlZCAzMjc2OCBNQiAoOTkuOTkzOSAlIG1tYXAmIzM5O2VkKSBpbiA2LjczNzkyIHMsIDQwLjc5NTYgR2JpdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVENQIE1NQVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3BfbW1hcGAgYW5kIHdoZXJlIGl0JiMzOTtzIGltcGxlbWVudGVkLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQmIzM5O3MgdGllZCB0byBgaW5ldF9zdHJlYW1fb3BzYCBhbmQgYGluZXQ2X3N0cmVhbV9vcHNgLCBidXQgb25seSB3aGVuIGBDT05GSUdfTU1VYCBpcyBhY3RpdmUuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgYENPTkZJR19JTkVUYC4gSXQmIzM5O3MgZm91bmRhdGlvbmFsLCBzbyBJJiMzOTttIGV4cGVjdGluZyBpdCB0byBiZSBzZXQuIExvb2tpbmcgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AsIHllcCwgYENPTkZJR19JTkVUYCBpcyB0aGUgY29yZSBUQ1AvSVAgY29uZmlndXJhdGlvbi4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGBDT05GSUdfTU1VYCBpcyBwcmV0dHkgbXVjaCBzdGFuZGFyZCBvbiBhbWQ2NCwgYW5kIGBDT05GSUdfSU5FVD15YCBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBuZXR3b3JraW5nIHNldHVwcy4gSXQgc2VlbXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KClRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbnN0cmFpbnRzLCBJIHNob3VsZCBzcGVjaWZpY2FsbHkgY2hlY2sgZm9yIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIGVpdGhlciBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIG9yIGB0Y3BfbW1hcGAgaXRzZWxmLiBJdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgpGaW5hbGx5LCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgYG5ldC9pcHY0L3RjcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRjcF9tbWFwYCBkZWZpbml0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gaG93IGl0JiMzOTtzIGFjdHVhbGx5IHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTU6XHRcdHJldHVybiAwO1xuMTg1NjpcdH1cbjE4NTc6XHRcbjE4NTg6XHR2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbjE4NTk6XHR7XG4xODYwOlx0XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdGNwX3dpbl9mcm9tX3NwYWNlKHNrLCB2YWwpKTtcbjE4NjE6XHR9XG4xODYyOlx0XG4xODYzOlx0I2lmZGVmIENPTkZJR19NTVVcbjE4NjQ6XHRzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG4xODY1Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuMTg2NjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4xODY3Olx0XHRyZWZjb3VudF90IHJlZmNudDtcbjE4Njg6XHRcdHN0cnVjdCBzb2NrICpzaztcbjE4Njk6XHR9O1xuMTg3MDpcdFxuMTg3MTpcdC8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi9cbjE4NzI6XHQjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4xODczOlx0XG4xODc0Olx0c3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4xODc1Olx0e1xuMTg3NjpcdFx0dW5zaWduZWQgaW50IGNodW5rO1xuMTg3NzpcdFxuMTg3ODpcdFx0d2hpbGUgKG5yX3BhZ2VzKSB7XG4xODc5Olx0XHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4xODgwOlx0XHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4xODgxOlx0XHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbjE4ODI6XHRcdFx0bnJfcGFnZXMgLT0gY2h1bms7XG4xODgzOlx0XHR9XG4xODg0Olx0fVxuMTg4NTpcdFxuMTg4NjpcdHN0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuMTg4NzpcdHtcbjE4ODg6XHRcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XG4xODg5Olx0XHR1bnNpZ25lZCBpbnQgY2h1bms7XG4xODkwOlx0XHRpbnQgcmV0O1xuMTg5MTpcdFxuMTg5MjpcdFx0d2hpbGUgKG5yX3BhZ2VzKSB7XG4xODkzOlx0XHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4xODk0Olx0XHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVENQIFplcm8tQ29weSBSZWNlaXZlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L2lwdjQvdGNwLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGZpbmRfdGNwX3ZtYWAgYW5kIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuICBJIGtub3cgYGZpbmRfdGNwX3ZtYWAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXQgaGVscHMgbG9jYXRlIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLCBhbmQgZXNwZWNpYWxseSBob3cgaXQgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcmV2ZWFsIHRoZSBmbG93IG9mIGhvdyB0aGlzIHplcm8tY29weSBtZWNoYW5pc20gd29ya3MsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgZnVuY3Rpb24gY2FsbCBzZWFyY2guIEkgY2FuIGxvb2sgYXQgdGhlIGNhbGwgY2hhaW4gYW5kIHZlcmlmeSBpZiB0aGlzIGhhcyBiZWVuIHVwZGF0ZWQgcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTIwMzE9c3RhdGljIHZvaWQgdGNwX3plcm9jb3B5X3NldF9oaW50X2Zvcl9za2Ioc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwLmM6MjAzMjpcdFx0XHRcdFx0ICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxubmV0L2lwdjQvdGNwLmMtMjAzMy1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0KVxuLS1cbm5ldC9pcHY0L3RjcC5jPTIwNzE9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwLmM6MjA3MjpcdFx0XHRcdCAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLCBpbnQgaW5xLFxubmV0L2lwdjQvdGNwLmMtMjA3My1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTIxMDYtXG5uZXQvaXB2NC90Y3AuYzoyMTA3OnN0YXRpYyBpbnQgdGNwX2NvcHlfc3RyYWdnbGVyX2RhdGEoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIxMDgtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY29weWxlbixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTMwLVxubmV0L2lwdjQvdGNwLmM6MjEzMTpzdGF0aWMgaW50IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIxMzItXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTU4PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTYzLVx0XHRcdFx0XHQgICAgICB1MzIgKnNlcSxcbm5ldC9pcHY0L3RjcC5jOjIxNjQ6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMTY1LVx0XHRcdFx0XHQgICAgICB1MzIgdG90YWxfYnl0ZXNfdG9fbWFwLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTIyMDY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyMTEtXHRcdFx0XHRcdHUzMiAqc2VxLFxubmV0L2lwdjQvdGNwLmM6MjIxMjpcdFx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIyMTMtXHRcdFx0XHRcdHUzMiB0b3RhbF9ieXRlc190b19tYXApXG4tLVxubmV0L2lwdjQvdGNwLmM9MjIzOT1zdGF0aWMgdm9pZCB0Y3BfemNfZmluYWxpemVfcnhfdHN0YW1wKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcC5jOjIyNDA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxubmV0L2lwdjQvdGNwLmMtMjI0MS1cdFx0XHRcdCAgICAgIHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXG4tLVxubmV0L2lwdjQvdGNwLmM9MjI2NT1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjI5MC0jZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcbm5ldC9pcHY0L3RjcC5jOjIyOTE6c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3AuYzoyMjkyOlx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIyOTMtXHRcdFx0XHRzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTQ1NzY9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NDgtXHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztcbm5ldC9pcHY0L3RjcC5jOjQ4NDk6XHRcdHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSB6YyA9IHt9O1xubmV0L2lwdjQvdGNwLmMtNDg1MC1cdFx0aW50IGVycjtcbi0tXG5uZXQvaXB2NC90Y3AuYy00ODU0LVx0XHRpZiAobGVuIFx1MDAzYyAwIHx8XG5uZXQvaXB2NC90Y3AuYzo0ODU1Olx0XHQgICAgbGVuIFx1MDAzYyBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGxlbmd0aCkpXG5uZXQvaXB2NC90Y3AuYy00ODU2LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NzItXHRcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjQ4NzM6XHRcdGVyciA9IHRjcF96ZXJvY29weV9yZWNlaXZlKHNrLCBcdTAwMjZ6YywgXHUwMDI2dHNzKTtcbm5ldC9pcHY0L3RjcC5jLTQ4NzQtXHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNrLCBsZXZlbCwgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy00ODc2LVx0XHRzb2Nrb3B0X3JlbGVhc2Vfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzo0ODc3Olx0XHRpZiAobGVuIFx1MDAzZT0gb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpKVxubmV0L2lwdjQvdGNwLmMtNDg3OC1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xubmV0L2lwdjQvdGNwLmMtNDg3OS1cdFx0c3dpdGNoIChsZW4pIHtcbm5ldC9pcHY0L3RjcC5jOjQ4ODA6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpOlxubmV0L2lwdjQvdGNwLmMtNDg4MS1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xubmV0L2lwdjQvdGNwLmM6NDg4MjpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIG1zZ19jb250cm9sbGVuKTpcbm5ldC9pcHY0L3RjcC5jOjQ4ODM6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbCk6XG5uZXQvaXB2NC90Y3AuYzo0ODg0Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgZmxhZ3MpOlxubmV0L2lwdjQvdGNwLmM6NDg4NTpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGNvcHlidWZfbGVuKTpcbm5ldC9pcHY0L3RjcC5jOjQ4ODY6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2FkZHJlc3MpOlxubmV0L2lwdjQvdGNwLmM6NDg4NzpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGVycik6XG5uZXQvaXB2NC90Y3AuYy00ODg4LVx0XHRcdGdvdG8gemVyb2NvcHlfcmN2X3NrX2Vycjtcbm5ldC9pcHY0L3RjcC5jOjQ4ODk6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBpbnEpOlxubmV0L2lwdjQvdGNwLmMtNDg5MC1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9pbnE7XG5uZXQvaXB2NC90Y3AuYzo0ODkxOlx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKTpcbm5ldC9pcHY0L3RjcC5jLTQ4OTItXHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTc1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFplcm9Db3B5IFJlY2VpdmUgZm9yIFN5emthbGxlciBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVENQIFplcm9Db3B5IHJlY2VpdmUgcGF0Y2gsIGFuZCBteSBtYWluIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZnVuY3Rpb25zIHRvIHRhcmdldCB3aXRoIFN5emthbGxlciYjMzk7cyBGb2N1c1N5bWJvbHMuIEkgc2VlIHRoYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpcyBjYWxsZWQgZnJvbSBgZG9fdGNwX2dldHNvY2tvcHRgLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbCBlbnRyeSBwb2ludC4gQWRkaXRpb25hbGx5LCBgdGNwX21tYXBgIGlzIGNhbGxlZCBkdXJpbmcgc29ja2V0IG1tYXBwaW5nLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoOiBgdGNwX3pjX21lbV91bmNoYXJnZWAsIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGB0Y3BfemNfdm1hX29wZW5gLCBgdGNwX3pjX3ZtYV9jbG9zZWAsIGB0Y3BfbW1hcGAsIGB0Y3BfemNfdm1hX3ZhbGlkYCwgYW5kIGBmaW5kX3RjcF92bWFgLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXNlIHN0YXRpYyBvciBub24tc3RhdGljPyAgYHRjcF9tbWFwYCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMgYmVjYXVzZSBpdCYjMzk7cyBzdG9yZWQgaW4gYGluZXRfc3RyZWFtX29wc2AgYW5kIGBpbmV0Nl9zdHJlYW1fb3BzYC4gYHRjcF96Y192bWFfb3BlbmAgYW5kIGB0Y3BfemNfdm1hX2Nsb3NlYCBhcmUgc3RhdGljLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBzdG9yZWQgaW4gYHRjcF92bV9vcHNgLCBzbyB0aGV5ICpjYW5ub3QqIGJlIGlubGluZWQuIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBhbmQgYHRjcF96Y19tZW1fY2hhcmdlYCBhcmUgYWxzbyBzdGF0aWMuIGBmaW5kX3RjcF92bWFgIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFyZSBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBkb190Y3BfZ2V0c29ja29wdGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIEZpbmFsbHksIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGlzIG5vbi1zdGF0aWMuCgpOb3csIHRoZSBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55IG9mIHRoZXNlIGFyZSB0b28gZ2VuZXJpYy4gYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgKnNlZW1zKiBsaWtlIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYWxtb3N0IGV2ZXJ5IHNvY2tldCBzZW5kL3JlY2VpdmUgYWxsb2NhdGlvbi4gVGhhdCBtZWFucyBpdCBtaWdodCBkaWx1dGUgdGhlIGZvY3VzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHRjcF9tbWFwYCwgYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhcmUgdmVyeSBzcGVjaWZpYyB0byBUQ1AgemVyb2NvcHkgYW5kIG1tYXAuICBUaGV5IHNlZW0gbXVjaCBtb3JlIGFwcHJvcHJpYXRlIGZvciB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYy4KCkxvb2tpbmcgYXQgdGhlIEZvY3VzU3ltYm9sIGd1aWRlbGluZXMsIGB0Y3BfbW1hcGAgaXMgYSBkaXJlY3QgQVBJIGVudHJ5cG9pbnQgZm9yIG1tYXAuIGB0Y3BfemNfdm1hX29wZW5gIGFuZCBgdGNwX3pjX3ZtYV9jbG9zZWAgYXJlIHZtX29wcyBjYWxsYmFja3MuIGB0Y3BfemNfbWVtX2NoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBoYW5kbGUgdGhlIGNvcmUgbWVtb3J5IGFjY291bnRpbmcgZm9yIHplcm9jb3B5IHJlY2VpdmUuIEFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIHRoZSBnZXRzb2Nrb3B0IGVudHJ5cG9pbnQgdGhhdCBmaW5kcyB0aGUgVENQIFZNQS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGB0Y3BfemNfbWVtX2NoYXJnZWAgaXMgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXRzIHNpemUgc3VnZ2VzdHMgaXQmIzM5O3MgdW5saWtlbHkuIEJ1dCBldmVuIGlmIGl0IGlzLCBgdGNwX21tYXBgLCBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhcmUgZGVmaW5pdGVseSBnb29kIGZvY3VzIHN5bWJvbHMuCgpDb25zaWRlcmluZyBhbGwgdGhpcywgaXQgc2VlbXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvaXB2NC90Y3AuY2AgYW5kIGBuZXQvY29yZS9zb2NrLmNgLiBJdCYjMzk7cyBtb2RpZnlpbmcgVENQIHNvY2tldCBtbWFwIGFuZCB6ZXJvY29weSBtZW1vcnkgYWNjb3VudGluZy4gVGhlcmUmIzM5O3MgbmV3IGB0Y3BfemNfdm1hYCB0cmFja2luZyBtbSwgc2ssIG5yX3BhZ2VzIHdpdGggYC5vcGVuYCBhbmQgYC5jbG9zZWAgdm1fb3BzLCBpbmNsdWRpbmcgc29jayBhbmQgbW0gc3RydWN0cywgYXMgd2VsbCBhcyBtb2RpZmljYXRpb25zIHRvIGB2bV9mbGFnc2AuICBJdCYjMzk7cyBhbHNvIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbHMuCgpGb3IgdGhlIHJlcXVpcmVkIGNvbmZpZywgSSYjMzk7bGwgbmVlZCBgSU5FVGAgZm9yIFRDUCBhbmQgYE1NVWAgZHVlIHRvIGAjaWZkZWYgQ09ORklHX01NVWAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gIEkmIzM5O2xsIGFsc28gaGF2ZSB0byBjaGVjayBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLCBzdWNoIGFzIFRDUCB6ZXJvY29weSByeCwgb3IgYHRjcF9tbWFwYC4gTGV0JiMzOTtzIGxvb2sgYXJvdW5kIGBuZXQvaXB2NC9LY29uZmlnYCBvciBncmVwIGZvciBgVENQX1pFUk9DT1BZX1JFQ0VJVkVgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9aRVJPQ09QWV9SRUNFSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0PTg5OD1LZXJuZWwgcmVzcG9uc2UgY29udGVudHM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtOTIzLWBgRVRIVE9PTF9BX1JJTkdTX1RDUF9EQVRBX1NQTElUYGAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRldmljZSBpcyB1c2FibGUgd2l0aFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q6OTI0OnBhZ2UtZmxpcHBpbmcgVENQIHplcm8tY29weSByZWNlaXZlIChgYGdldHNvY2tvcHQoVENQX1pFUk9DT1BZX1JFQ0VJVkUpYGApLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtOTI1LUlmIGVuYWJsZWQgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIHRvIHBsYWNlIGZyYW1lIGhlYWRlcnMgYW5kIGRhdGEgaW50b1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pb3UtemNyeC5yc3Q9MTE9dGhlIG5ldHdvcmsgcmVjZWl2ZSBwYXRoLCBhbGxvd2luZyBwYWNrZXQgZGF0YSB0byBiZSByZWNlaXZlZCBkaXJlY3RseSBpbnRvXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaW91LXpjcngucnN0OjEyOnVzZXJzcGFjZSBtZW1vcnkuIFRoaXMgZmVhdHVyZSBpcyBkaWZmZXJlbnQgdG8gVENQX1pFUk9DT1BZX1JFQ0VJVkUgaW4gdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lvdS16Y3J4LnJzdC0xMy10aGVyZSBhcmUgbm8gc3RyaWN0IGFsaWdubWVudCByZXF1aXJlbWVudHMgYW5kIG5vIG5lZWQgdG8gbW1hcCgpL211bm1hcCgpLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaD03ND1lbnVtIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTI3LSNkZWZpbmUgVENQX0ZBU1RPUEVOX05PX0NPT0tJRVx0MzRcdC8qIEVuYWJsZSBURk8gd2l0aG91dCBhIFRGTyBjb29raWUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaDoxMjg6I2RlZmluZSBUQ1BfWkVST0NPUFlfUkVDRUlWRVx0MzVcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjktI2RlZmluZSBUQ1BfSU5RXHRcdFx0MzZcdC8qIE5vdGlmeSBieXRlcyBhdmFpbGFibGUgdG8gcmVhZCBhcyBhIGNtc2cgb24gcmVhZCAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaD01MDA9c3RydWN0IHRjcF9hb19yZXBhaXIgeyAvKiB7cyxnfWV0c29ja29wdChUQ1BfQU9fUkVQQUlSKSAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC01MDYtXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg6NTA3Oi8qIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgLi4uKSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTUwOC1cbi0tXG5uZXQvaXB2NC90Y3AuYz00NTc2PWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi0tXG5uZXQvaXB2NC90Y3AuYy00ODQ2LSNpZmRlZiBDT05GSUdfTU1VXG5uZXQvaXB2NC90Y3AuYzo0ODQ3Olx0Y2FzZSBUQ1BfWkVST0NPUFlfUkVDRUlWRToge1xubmV0L2lwdjQvdGNwLmMtNDg0OC1cdFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgdHNzO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ5NTE9Ym9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXG4tLVxubmV0L2lwdjQvdGNwLmMtNDk1My1cdC8qIFRDUCBkb190Y3BfZ2V0c29ja29wdCBoYXMgb3B0aW1pemVkIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25cbm5ldC9pcHY0L3RjcC5jOjQ5NTQ6XHQgKiB0byBhdm9pZCBleHRyYSBzb2NrZXQgbG9jayBmb3IgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXG5uZXQvaXB2NC90Y3AuYy00OTU1LVx0ICovXG5uZXQvaXB2NC90Y3AuYzo0OTU2Olx0aWYgKGxldmVsID09IFNPTF9UQ1AgXHUwMDI2XHUwMDI2IG9wdG5hbWUgPT0gVENQX1pFUk9DT1BZX1JFQ0VJVkUpXG5uZXQvaXB2NC90Y3AuYy00OTU3LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg9NzI9ZW51bSB7IFxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjQtI2RlZmluZSBUQ1BfRkFTVE9QRU5fTk9fQ09PS0lFXHQzNFx0LyogRW5hYmxlIFRGTyB3aXRob3V0IGEgVEZPIGNvb2tpZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjEyNTojZGVmaW5lIFRDUF9aRVJPQ09QWV9SRUNFSVZFXHQzNVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyNi0jZGVmaW5lIFRDUF9JTlFcdFx0XHQzNlx0LyogTm90aWZ5IGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGFzIGEgY21zZyBvbiByZWFkICovXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTMzNj1zdHJ1Y3QgdGNwX2RpYWdfbWQ1c2lnIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMzQzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjM0NDovKiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLikgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0zNDUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEwNjU9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3pjKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTExMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTEyMjpcdGVyciA9IGdldHNvY2tvcHQocDEsIElQUFJPVE9fVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgXHUwMDI2emMsIFx1MDAyNnpjX2xlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTEyMy1cdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Z2V0c29ja29wdFwmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jPTI1PXN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMtMjg3LVx0e1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jOjI4ODpcdFx0LmRlc2NyID0gXCYjMzQ7Z2V0c29ja29wdDogZGVueSBuZWdhdGl2ZSBjdHgtXHUwMDNlb3B0bGVuIGluIFRDUF9aRVJPQ09QWV9SRUNFSVZFXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jLTI4OS1cdFx0Lmluc25zID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYy0zMDItXHRcdC5nZXRfbGV2ZWwgPSBJUFBST1RPX1RDUCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYzozMDM6XHRcdC5nZXRfb3B0bmFtZSA9IFRDUF9aRVJPQ09QWV9SRUNFSVZFLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jLTMwNC1cdFx0LmdldF9vcHRsZW4gPSBzaXplb2Yoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM9MTU9c3RhdGljIGludCBnZXRzZXRzb2Nrb3B0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE2NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNjY6XHQvKiBUQ1BfWkVST0NPUFlfUkVDRUlWRSB0cmlnZ2VycyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE2Ny1cdG1lbXNldChcdTAwMjZidWYsIDAsIHNpemVvZihidWYpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYy0xNjgtXHRvcHRsZW4gPSBzaXplb2YoYnVmLnpjKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNjk6XHRlcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgXHUwMDI2YnVmLCBcdTAwMjZvcHRsZW4pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE3MC1cdGlmIChlcnIpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNzE6XHRcdGxvZ19lcnIoXCYjMzQ7VW5leHBlY3RlZCBnZXRzb2Nrb3B0KFRDUF9aRVJPQ09QWV9SRUNFSVZFKSBlcnI9JWQgZXJybm89JWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTcyLVx0XHRcdGVyciwgZXJybm8pO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYy0xNzktXHRlcnJubyA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTgwOlx0ZXJyID0gZ2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIFx1MDAyNmJ1ZiwgXHUwMDI2b3B0bGVuKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYy0xODEtXHRpZiAoZXJybm8gIT0gRUlOVkFMKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTgyOlx0XHRsb2dfZXJyKFwmIzM0O1VuZXhwZWN0ZWQgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSkgZXJyPSVkIGVycm5vPSVkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE4My1cdFx0XHRlcnIsIGVycm5vKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jPTMwPWludCBfZ2V0c29ja29wdChzdHJ1Y3QgYnBmX3NvY2tvcHQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jLTczLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYzo3NDpcdGlmIChjdHgtXHUwMDNlbGV2ZWwgPT0gU09MX1RDUCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wdG5hbWUgPT0gVENQX1pFUk9DT1BZX1JFQ0VJVkUpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2Nrb3B0X3NrLmM6NzU6XHRcdC8qIFZlcmlmeSB0aGF0IFRDUF9aRVJPQ09QWV9SRUNFSVZFIHRyaWdnZXJzLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYy03Ni1cdFx0ICogSXQgaGFzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBwZXJmb3JtYW5jZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jPTE2OT12b2lkICpjaGlsZF90aHJlYWQodm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTIyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjIyNjpcdFx0XHRyZXMgPSBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yMjctXHRcdFx0XHRcdCBcdTAwMjZ6YywgXHUwMDI2emNfbGVuKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yMzgtXHRcdFx0XHQvKiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byB1bm1hcCB0aGUgcGFnZXMgcmlnaHQgbm93LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MjM5Olx0XHRcdFx0ICogaW5zdGVhZCBvZiBkb2luZyB0aGlzIGluIG5leHQgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yNDAtXHRcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX01NVWAg4oCTIHRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwsIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gU3RhbmRhcmQgb3B0aW9ucywgbGlrZWx5IGVuYWJsZWQgb24gcHJldHR5IG11Y2ggYW55IG1haW5zdHJlYW0gYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zLCBzdGFydGluZyB3aXRoIGBDT05GSUdfSU5FVGAuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGRldGFpbHMgc3Vycm91bmRpbmcgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzM4LVxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzkzLVxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXG5uZXQvaXB2NC9LY29uZmlnLTM5NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cbm5ldC9pcHY0L0tjb25maWc6NDA0OmNvbmZpZyBJTkVUX1RBQkxFX1BFUlRVUkJfT1JERVJcbm5ldC9pcHY0L0tjb25maWctNDA1LVx0aW50IFwmIzM0O0lORVQ6IFNvdXJjZSBwb3J0IHBlcnR1cmJhdGlvbiB0YWJsZSBzaXplIChhcyBwb3dlciBvZiAyKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTgtXG5uZXQvaXB2NC9LY29uZmlnOjQxOTpjb25maWcgSU5FVF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDIwLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDI0LVx0dHJpc3RhdGUgXCYjMzQ7SU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzQtXG5uZXQvaXB2NC9LY29uZmlnOjQzNTpjb25maWcgSU5FVF9UQ1BfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MzYtXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM4LVxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQwLVx0dHJpc3RhdGUgXCYjMzQ7VURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cbm5ldC9pcHY0L0tjb25maWc6NDQ3OmNvbmZpZyBJTkVUX1JBV19ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cdHRyaXN0YXRlIFwmIzM0O1JBVzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzg1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtjb25maWcgZm9yIElORVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElORVRgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEkmIzM5O2xsIGJlIGRpdmluZyBzdHJhaWdodCBpbnRvIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBvZiBjb3Vyc2UuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgSU5FVGAgZmVhdHVyZS4gTW9yZSBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jbHVzaW9uIG9mIGBJTkVUYCBhZmZlY3RzIG90aGVyIG5ldHdvcmsgZmVhdHVyZXMgb3IgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyBpdC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciB0cmFjaW5nIGhvdyB0aGUgZmVhdHVyZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIEkgY2FuIHByZWRpY3QgYW55IGlzc3VlcyBkb3duc3RyZWFtIGlmIEkgbW9kaWZ5IGFueSBvZiB0aGUgZmxhZ3MgYW5kIHRoZSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCBgY29uZmlnIElORVRgIGF0IHRoZSByb290LCBvciBwb3NzaWJseSBuZXN0ZWQgdW5kZXIgc29tZSBwYXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb24sIGRlcGVuZGluZyBvbiBpdHMgc2NvcGUuIE15IGdvYWwgaGVyZSBpc24mIzM5O3QganVzdCB0byAqZmluZCogdGhlIGVudHJ5LCBidXQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgaXRzIGltcGFjdCBvbiB0aGUgbGFyZ2VyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcyMAoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVENQL0lQIFplcm9jb3B5IEZlYXR1cmUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19JTkVUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFRDUC9JUCBuZXR3b3JraW5nLCBhbmQgYENPTkZJR19NTVVgIGlzIHRoZSBvbmUgZW5hYmxpbmcgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBzdXBwb3J0LiBHb29kLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgRm9jdXNTeW1ib2xzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGFzIGl0IHNob3VsZCBiZS4KClRoZSBsaXN0ZWQgc3ltYm9scywgYHRjcF9tbWFwYCwgYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYWxsIGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgemVyby1jb3B5IHJlY2VpdmUgYW5kIFRDUCBtbWFwIGFjY291bnRpbmcgZmVhdHVyZXMsIGFzIGV4cGVjdGVkLiBUaGV5JiMzOTtyZSBhbGwgdmVyeSBmb2N1c2VkIG9uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5LiBFeGNlbGxlbnQhIFRoZSB1c2Ugb2YgdGhlc2Ugc3ltYm9scyBzcGVjaWZpY2FsbHkgYXZvaWRzIGFueSByZWxpYW5jZSBvbiBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzIG9yIGdlbmVyYWwgbWVtb3J5IGhlbHBlcnMuCgpCYXNlZCBvbiBteSByZXZpZXcsIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBsb2dpY2FsbHkgc291bmQsIGNsZWFybHkgZGVmaW5lZCwgYW5kLCBpbXBvcnRhbnRseSwgY29tcGxpYW50IHdpdGggYWxsIHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzIGFuZCBkZXNpZ24gcHJpbmNpcGxlcyBmb3IgdGhpcyB0eXBlIG9mIGZlYXR1cmUgaW50ZWdyYXRpb24uIEkgc2VlIG5vIHJlZCBmbGFncyBvciBwb3RlbnRpYWwgaXNzdWVzLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBldmFsdWF0aW9uLiBJJiMzOTtsbCBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX21tYXAmIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9vcGVuJiMzNDssCiAgICAmIzM0O3RjcF96Y192bWFfY2xvc2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV9jaGFyZ2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV91bmNoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemVyb2NvcHlfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBtZW1vcnkgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgZm9yIFRDUCB6ZXJvY29weSByZWNlaXZlIFZNQXMgKHZpYSB0Y3BfbW1hcCwgdGNwX3pjX3ZtYV9vcGVuLCBhbmQgdGNwX3pjX3ZtYV9jbG9zZSksIHRyYWNraW5nIG1tX3N0cnVjdCBhbmQgc29jayByZWZlcmVuY2VzLCBhbmQgdXBkYXRlcyBtZW1vcnkgcmFpc2UgYWNjb3VudGluZyBpbiBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQgd2l0aCB0aGUgbmV3IFNLX01FTV9SRUNWX1pFUk9DT1BZIGtpbmQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIE1NIGludGVyYWN0aW9uIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSBzb2NrZXQgc3lzY2FsbHMgKG1tYXAsIGdldHNvY2tvcHQgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIG11bm1hcCwgZXRjLiksIG1ha2luZyBpdCBpbXBvcnRhbnQgdG8gZnV6eiBmb3IgbWVtb3J5IGFjY291bnRpbmcsIHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfbW1hcCYjMzQ7LAogICAgJiMzNDt0Y3BfemNfdm1hX29wZW4mIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9jbG9zZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX2NoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZWN5Y2xlIHRyYWNraW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzIChzdHJ1Y3QgdGNwX3pjX3ZtYSkuIFRoZSBvbmx5IG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZSBpcyBzdHJ1Y3QgdGNwX3pjX3ZtYSwgd2hlcmUgYWxsIG1lbWJlciBmaWVsZHMgKG5yX3BhZ2VzLCBtbSwgc2ssIHJlZmNudCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEga21hbGxvY19vYmouIFRoZSBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGtlcm5lbC1pbnRlcm5hbCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1vcnkgYWNjb3VudGluZywgb3IgVk1BIGxpZmVjeWNsZS91c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGQ4ZjZjMGI1OTMxYTQ4YTE0MDdjZDU0YjZhMmE3ZGQ1MjZkYmM2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAzOjMxOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmNmMTkwNTVhOWM0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTE1NTYsNiAmIzQzOzE1NTYsNyBAQCB2b2lkIF9fc2tfbWVtX3JlY2xhaW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgYW1vdW50KTsKIAogI2RlZmluZSBTS19NRU1fU0VORAkwCiAjZGVmaW5lIFNLX01FTV9SRUNWCTEKJiM0MzsjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZCTB4MTAwCiAKIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqLwogc3RhdGljIGlubGluZSBsb25nIHNrX3Byb3RfbWVtX2xpbWl0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBpbmRleCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaAppbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oCkBAIC0zOCw3ICYjNDM7MzgsOCBAQAogCiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXMJCQlcCiAJCUVNKFNLX01FTV9TRU5EKQkJCVwKLQkJRU1lKFNLX01FTV9SRUNWKQomIzQzOwkJRU0oU0tfTUVNX1JFQ1YpCQkJXAomIzQzOwkJRU1lKFNLX01FTV9SRUNWX1pFUk9DT1BZKQogCiAvKiBlbnVtcyBuZWVkIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgKi8KICN1bmRlZiBFTQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGZhNjBiNzQ5NGM1ODYuLjNkODVjMTM4ZTFjNzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTMzODAsNyAmIzQzOzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKQogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtzay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmx0OyBza19nZXRfcm1lbTAoc2ssIHByb3QpKQogCQkJcmV0dXJuIDE7CiAKLQl9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqLwomIzQzOwl9IGVsc2UgaWYgKGtpbmQgPT0gU0tfTUVNX1NFTkQpIHsKIAkJaW50IHdtZW0wID0gc2tfZ2V0X3dtZW0wKHNrLCBwcm90KTsKIAogCQlpZiAoc2stJmd0O3NrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI2Nyw2ICYjNDM7MjY3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0YXRpY19rZXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2luZXRfY29tbW9uLmgmZ3Q7CkBAIC0xODYwLDIzICYjNDM7MTg2MSwxMTggQEAgdm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpCiB9CiAKICNpZmRlZiBDT05GSUdfTU1VCiYjNDM7c3RydWN0IHRjcF96Y192bWEgewomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJcmVmY291bnRfdCByZWZjbnQ7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi8KJiM0MzsjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggJmd0OyZndDsgUEFHRV9TSElGVCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjaHVuazsKJiM0MzsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzKSB7CiYjNDM7CQljaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAomIzQzOwkJCSAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspOwomIzQzOwkJX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZChzaywgY2h1bmspOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNoYXJnZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgY2h1bms7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlIChucl9wYWdlcykgewomIzQzOwkJY2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcywKJiM0MzsJCQkgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTsKJiM0MzsJCXJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCSAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpOwomIzQzOwkJaWYgKCFyZXQpIHsKJiM0MzsJCQl0Y3BfemNfbWVtX3VuY2hhcmdlKHNrLCBjaGFyZ2VkKTsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCX0KJiM0MzsJCWNoYXJnZWQgJiM0Mzs9IGNodW5rOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7emNfdm1hLSZndDtyZWZjbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQpKSB7CiYjNDM7CQl0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIHpjX3ZtYS0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0gewomIzQzOwkub3BlbiA9IHRjcF96Y192bWFfb3BlbiwKJiM0MzsJLmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSwKIH07CiAKIGludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewomIzQzOwlzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9XUklURSB8IFZNX0VYRUMpKQogCQlyZXR1cm4gLUVQRVJNOwogCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKTsKIAogCS8qIEluc3RydWN0IHZtX2luc2VydF9wYWdlKCkgdG8gbm90IG1tYXBfcmVhZF9sb2NrKG1tKSAqLwotCXZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTsKJiM0MzsJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTUlYRURNQVApOwomIzQzOwomIzQzOwlucl9wYWdlcyA9ICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghemNfdm1hKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXpjX3ZtYS0mZ3Q7bnJfcGFnZXMgPSBucl9wYWdlczsKJiM0MzsJemNfdm1hLSZndDttbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CXpjX3ZtYS0mZ3Q7c2sgPSBzb2NrLSZndDtzazsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQsIDEpOwomIzQzOwltbWdyYWIoemNfdm1hLSZndDttbSk7CiYjNDM7CXNvY2tfaG9sZCh6Y192bWEtJmd0O3NrKTsKJiM0MzsJaWYgKHRjcF96Y19tZW1fY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIG5yX3BhZ2VzKSkgewomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt0Y3Bfdm1fb3BzOwomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHpjX3ZtYTsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtYS0mZ3Q7dm1fb3BzID09ICZhbXA7dGNwX3ZtX29wcyAmYW1wOyZhbXA7IHpjX3ZtYSAmYW1wOyZhbXA7IHpjX3ZtYS0mZ3Q7bW0gPT0gbW07CiYjNDM7fQomIzQzOwogc3RhdGljIHNrYl9mcmFnX3QgKnNrYl9hZHZhbmNlX3RvX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldF9za2IsCiAJCQkJICAgICAgIHUzMiAqb2Zmc2V0X2ZyYWcpCiB7CkBAIC0yMTczLDcgJiM0MzsyMjY5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAogCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwkJaWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7CiAJCQl2bWFfZW5kX3JlYWQodm1hKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yMTgzLDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJbW1hcF9yZWFkX2xvY2sobW0pOwogCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpOwotCWlmICghdm1hIHx8IHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwlpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogVENQIFplcm8tQ29weSBQYXRjaGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgdGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzLgoKRmlyc3QsIEkgc2VlIGFkZGl0aW9ucyB0byBgaW5jbHVkZS9uZXQvc29jay5oYCBhbmQgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaGAgcmVsYXRlZCB0byBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLiBTdGFuZGFyZCBzdHVmZiwgZGVmaW5pbmcgYSBmbGFnIGFuZCBhZGRpbmcgaXQgdG8gdHJhY2UgZXZlbnRzLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLCBidXQgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG9uIGhvdyBpdCYjMzk7cyAqdXNlZCouCgpOZXh0LCBgbmV0L2NvcmUvc29jay5jYCBtb2RpZmllcyB0aGUgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgZnVuY3Rpb24uIEFoLCB0aGlzIGlzIHdoZXJlIGl0JiMzOTtzIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIGNoYW5nZXMgZnJvbSBhIHNpbXBsZSBgZWxzZWAgYmxvY2sgdG8gYW4gYGVsc2UgaWZgIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSBga2luZGAgdmFyaWFibGUuICpDcnVjaWFsbHkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGtpbmRgIGlzIHNldCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGlzIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGZsYWcuIEkgc2hvdWxkIGNoZWNrIGBuZXQvY29yZS9zb2NrLmNgIGFyb3VuZCBsaW5lIDMzODAsIGp1c3QgdG8gYmUgc3VyZS4KClRoZSBtZWF0IG9mIHRoZSBwYXRjaCwgaG93ZXZlciwgaXMgaW4gYG5ldC9pcHY0L3RjcC5jYC4gSGVyZSB3ZSBoYXZlIGEgYHN0cnVjdCB0Y3BfemNfdm1hYCBiZWluZyBpbnRyb2R1Y2VkLCBhbG9uZyB3aXRoIG5ldyBmdW5jdGlvbnM6IGB0Y3BfemNfbWVtX3VuY2hhcmdlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYW5kIGEgYHRjcF92bV9vcHNgIHN0cnVjdHVyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgemVyby1jb3B5IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBgdGNwX21tYXBgLiBUaGUgY29kZSBzZWVtcyB0byBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGB6Y192bWFgLCB0cmFja2luZyB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBtZW1vcnkgbWFwLCBzb2NrZXQsIGFuZCByZWZjb3VudHMuIGB0Y3BfemNfbWVtX2NoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBhcmUgaW1wb3J0YW50IGFzIHRoZXkgbXVzdCBiZSB0aGUgYm9va2tlZXBpbmcgb3BlcmF0aW9ucyB0byB0cmFjayByZXNvdXJjZXMgdGhhdCBhcmUgbWFuYWdlZCBieSB0aGlzIGNvZGUuCgpJIHNlZSByZWZlcmVuY2VzIHRvIGB2bWFgIGFuZCBgbW1gIChtZW1vcnkgbWFwKS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIHZtYSBpbiBgdGNwX3pjX3ZtYV92YWxpZGAsIGFuZCB1cGRhdGVzIGBmaW5kX3RjcF92bWFgIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHVzZSBvZiBga21hbGxvY19vYmpgLCB0aGUgcmVmY291bnRpbmcsIGFuZCBtZW1vcnkgbWFwIG1hbmlwdWxhdGlvbiBhcmUgcmVkIGZsYWdzIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgc2NlbmFyaW9zLiAqVGhpcyBpcyB3aGVyZSBLTVNBTiB3aWxsIHNoaW5lKi4gVGhlIHplcm8tY29weSBmdW5jdGlvbmFsaXR5IGxpa2VseSBpbnZvbHZlcyBkaXJlY3RseSBtYXBwaW5nIHVzZXItc3BhY2UgYnVmZmVycyBpbnRvIGtlcm5lbCBzcGFjZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBzaXR1YXRpb25zIGlmIG5vdCBoYW5kbGVkIG1ldGljdWxvdXNseS4KCkJhc2VkIG9uIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIChgdGNwX3pjX3ZtYWApLCBuZXcgbWVtb3J5LXJlbGF0ZWQgZnVuY3Rpb25zLCBhbmQgdGhlIGludHJpY2FjaWVzIG9mIHplcm8tY29weSBtZWNoYW5pc21zLCAqdGhpcyBwYXRjaCBzZXJpZXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGZvY3VzZWQgS01TQU4gZnV6emluZyBzZXNzaW9uKi4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBpcyBlbGV2YXRlZCBkdWUgdG8gdGhlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGFuZCB0aGUgY29tcGxleCBpbnRlcnBsYXkgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuIEkgbXVzdCBjaGVjayB0aGUgcmVmZXJlbmNlIGNvdW50IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHNldCBvZiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jPTMzMTk9RVhQT1JUX1NZTUJPTChza193YWl0X2RhdGEpO1xuLS1cbm5ldC9jb3JlL3NvY2suYy0zMzIxLS8qKlxubmV0L2NvcmUvc29jay5jOjMzMjI6ICpcdF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCAtIGluY3JlYXNlIG1lbW9yeV9hbGxvY2F0ZWRcbm5ldC9jb3JlL3NvY2suYy0zMzIzLSAqXHRAc2s6IHNvY2tldFxuLS1cbm5ldC9jb3JlL3NvY2suYy0zMzM1LSAqL1xubmV0L2NvcmUvc29jay5jOjMzMzY6aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcbm5ldC9jb3JlL3NvY2suYy0zMzM3LXtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MzQ1ND1pbnQgX19za19tZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGtpbmQpXG4tLVxubmV0L2NvcmUvc29jay5jLTM0NTgtXHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgYW10IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbm5ldC9jb3JlL3NvY2suYzozNDU5Olx0cmV0ID0gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHNrLCBzaXplLCBhbXQsIGtpbmQpO1xubmV0L2NvcmUvc29jay5jLTM0NjAtXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9zb2NrLmNgIC0gU29ja2V0IExpZmVjeWNsZSAmYW1wOyBTdGF0ZSBUcmFuc2l0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGxpbmVzIDMzMzYtMzQ0MCBvZiBgbmV0L2NvcmUvc29jay5jYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgc2VjdGlvbiBkZWFsaW5nIHdpdGggc29ja2V0IG1hbmFnZW1lbnQsIHByb2JhYmx5IGZvY3VzaW5nIG9uIHRoZSBsaWZlY3ljbGUgb2YgYSBzb2NrZXQgYW5kIGhvdyBpdHMgc3RhdGUgdHJhbnNpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVlcGx5IHRvIG9wdGltaXplIGhvdyBJIHdvcmsgd2l0aCBzb2NrZXQgY29ubmVjdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaW5lciBwb2ludHMgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBJIGltYWdpbmUgdGhlcmUmIzM5O2xsIGJlIGEgbG90IG9mIGNvbmRpdGlvbmFsIGxvZ2ljIGhlcmUsIHJlYWN0aW5nIHRvIGRpZmZlcmVudCBldmVudHMgYW5kIHNvY2tldCBmbGFncy4gUGVyaGFwcyB0aGlzIHNlY3Rpb24gaGFuZGxlcyB0aGUgc2V0dGluZyBvZiBwYXJhbWV0ZXJzIGZvciBzb2NrZXQgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGhhbmRsZXMgYm90aCBUQ1AgYW5kIFVEUCAtIEkga25vdyB0aGVyZSBhcmUgdmFyaWF0aW9ucyBpbiBoYW5kbGluZyBmb3IgY29ubmVjdGlvbi1vcmllbnRlZCB2cyBjb25uZWN0aW9ubGVzcyBwcm90b2NvbHMuIEkgYWxzbyB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBzaW5jZSBzb2NrZXQgb3BlcmF0aW9ucyBhcmUgb2J2aW91c2x5IHNoYXJlZC4gSG9wZWZ1bGx5LCB0aGVyZSBpcyBhIGNsZWFyIGJyZWFrZG93biBvZiB0aGUgc29ja2V0JiMzOTtzIGRpZmZlcmVudCBzdGF0ZXMgKGUuZy4sIExJU1RFTiwgQ09OTkVDVEVELCBFU1RBQkxJU0hFRCwgQ0xPU0VELCBldGMuKS4gQW5kLCBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgaXQgcmVzcG9uZHMgdG8gZHJvcHBlZCBjb25uZWN0aW9ucyBvciBuZXR3b3JrIGZhaWx1cmVzLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMzY6XHRpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKVxuMzMzNzpcdHtcbjMzMzg6XHRcdGJvb2wgbWVtY2dfZW5hYmxlZCA9IGZhbHNlLCBjaGFyZ2VkID0gZmFsc2U7XG4zMzM5Olx0XHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cdTAwM2Vza19wcm90O1xuMzM0MDpcdFx0bG9uZyBhbGxvY2F0ZWQgPSAwO1xuMzM0MTpcdFxuMzM0MjpcdFx0aWYgKCFzay1cdTAwM2Vza19ieXBhc3NfcHJvdF9tZW0pIHtcbjMzNDM6XHRcdFx0c2tfbWVtb3J5X2FsbG9jYXRlZF9hZGQoc2ssIGFtdCk7XG4zMzQ0Olx0XHRcdGFsbG9jYXRlZCA9IHNrX21lbW9yeV9hbGxvY2F0ZWQoc2spO1xuMzM0NTpcdFx0fVxuMzM0NjpcdFxuMzM0NzpcdFx0aWYgKG1lbV9jZ3JvdXBfc2tfZW5hYmxlZChzaykpIHtcbjMzNDg6XHRcdFx0bWVtY2dfZW5hYmxlZCA9IHRydWU7XG4zMzQ5Olx0XHRcdGNoYXJnZWQgPSBtZW1fY2dyb3VwX3NrX2NoYXJnZShzaywgYW10LCBnZnBfbWVtY2dfY2hhcmdlKCkpO1xuMzM1MDpcdFx0XHRpZiAoIWNoYXJnZWQpXG4zMzUxOlx0XHRcdFx0Z290byBzdXBwcmVzc19hbGxvY2F0aW9uO1xuMzM1MjpcdFx0fVxuMzM1MzpcdFxuMzM1NDpcdFx0aWYgKCFhbGxvY2F0ZWQpXG4zMzU1Olx0XHRcdHJldHVybiAxO1xuMzM1NjpcdFxuMzM1NzpcdFx0LyogVW5kZXIgbGltaXQuICovXG4zMzU4Olx0XHRpZiAoYWxsb2NhdGVkIFx1MDAzYz0gc2tfcHJvdF9tZW1fbGltaXRzKHNrLCAwKSkge1xuMzM1OTpcdFx0XHRza19sZWF2ZV9tZW1vcnlfcHJlc3N1cmUoc2spO1xuMzM2MDpcdFx0XHRyZXR1cm4gMTtcbjMzNjE6XHRcdH1cbjMzNjI6XHRcbjMzNjM6XHRcdC8qIFVuZGVyIHByZXNzdXJlLiAqL1xuMzM2NDpcdFx0aWYgKGFsbG9jYXRlZCBcdTAwM2Ugc2tfcHJvdF9tZW1fbGltaXRzKHNrLCAxKSlcbjMzNjU6XHRcdFx0c2tfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHNrKTtcbjMzNjY6XHRcbjMzNjc6XHRcdC8qIE92ZXIgaGFyZCBsaW1pdC4gKi9cbjMzNjg6XHRcdGlmIChhbGxvY2F0ZWQgXHUwMDNlIHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMikpXG4zMzY5Olx0XHRcdGdvdG8gc3VwcHJlc3NfYWxsb2NhdGlvbjtcbjMzNzA6XHRcbjMzNzE6XHRcdC8qIEd1YXJhbnRlZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHVuZGVyIHByZXNzdXJlIChlaXRoZXIgZ2xvYmFsXG4zMzcyOlx0XHQgKiBvciBtZW1jZykgdG8gbWFrZSBzdXJlIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiBSRkMgNzMyMyAoVENQXG4zMzczOlx0XHQgKiBFeHRlbnNpb25zIGZvciBIaWdoIFBlcmZvcm1hbmNlKSB3b3JrIHByb3Blcmx5LlxuMzM3NDpcdFx0ICpcbjMzNzU6XHRcdCAqIFRoaXMgcnVsZSBkb2VzIE5PVCBzdGFuZCB3aGVuIGV4Y2VlZHMgZ2xvYmFsIG9yIG1lbWNnJiMzOTtzIGhhcmRcbjMzNzY6XHRcdCAqIGxpbWl0LCBvciBlbHNlIGEgRG9TIGF0dGFjayBjYW4gYmUgdGFrZW4gcGxhY2UgYnkgc3Bhd25pbmdcbjMzNzc6XHRcdCAqIGxvdHMgb2Ygc29ja2V0cyB3aG9zZSB1c2FnZSBhcmUgdW5kZXIgbWluaW11bSBidWZmZXIgc2l6ZS5cbjMzNzg6XHRcdCAqL1xuMzM3OTpcdFx0aWYgKGtpbmQgPT0gU0tfTUVNX1JFQ1YpIHtcbjMzODA6XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpIFx1MDAzYyBza19nZXRfcm1lbTAoc2ssIHByb3QpKVxuMzM4MTpcdFx0XHRcdHJldHVybiAxO1xuMzM4MjpcdFxuMzM4MzpcdFx0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4zMzg0Olx0XHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4zMzg1Olx0XG4zMzg2Olx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG4zMzg3Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3dtZW1fcXVldWVkIFx1MDAzYyB3bWVtMClcbjMzODg6XHRcdFx0XHRcdHJldHVybiAxO1xuMzM4OTpcdFx0XHR9IGVsc2UgaWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfd21lbV9hbGxvYykgXHUwMDNjIHdtZW0wKSB7XG4zMzkwOlx0XHRcdFx0XHRyZXR1cm4gMTtcbjMzOTE6XHRcdFx0fVxuMzM5MjpcdFx0fVxuMzM5MzpcdFxuMzM5NDpcdFx0aWYgKHNrX2hhc19tZW1vcnlfcHJlc3N1cmUoc2spKSB7XG4zMzk1Olx0XHRcdHU2NCBhbGxvYztcbjMzOTY6XHRcbjMzOTc6XHRcdFx0LyogVGhlIGZvbGxvd2luZyAmIzM5O2F2ZXJhZ2UmIzM5OyBoZXVyaXN0aWMgaXMgd2l0aGluIHRoZVxuMzM5ODpcdFx0XHQgKiBzY29wZSBvZiBnbG9iYWwgYWNjb3VudGluZywgc28gaXQgb25seSBtYWtlc1xuMzM5OTpcdFx0XHQgKiBzZW5zZSBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZS5cbjM0MDA6XHRcdFx0ICovXG4zNDAxOlx0XHRcdGlmICghc2tfdW5kZXJfZ2xvYmFsX21lbW9yeV9wcmVzc3VyZShzaykpXG4zNDAyOlx0XHRcdFx0cmV0dXJuIDE7XG4zNDAzOlx0XG4zNDA0Olx0XHRcdC8qIFRyeSB0byBiZSBmYWlyIGFtb25nIGFsbCB0aGUgc29ja2V0cyB1bmRlciBnbG9iYWxcbjM0MDU6XHRcdFx0ICogcHJlc3N1cmUgYnkgYWxsb3dpbmcgdGhlIG9uZXMgdGhhdCBiZWxvdyBhdmVyYWdlXG4zNDA2Olx0XHRcdCAqIHVzYWdlIHRvIHJhaXNlLlxuMzQwNzpcdFx0XHQgKi9cbjM0MDg6XHRcdFx0YWxsb2MgPSBza19zb2NrZXRzX2FsbG9jYXRlZF9yZWFkX3Bvc2l0aXZlKHNrKTtcbjM0MDk6XHRcdFx0aWYgKHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMikgXHUwMDNlIGFsbG9jICpcbjM0MTA6XHRcdFx0ICAgIHNrX21lbV9wYWdlcyhzay1cdTAwM2Vza193bWVtX3F1ZXVlZCAmIzQzO1xuMzQxMTpcdFx0XHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpICYjNDM7XG4zNDEyOlx0XHRcdFx0XHQgc2stXHUwMDNlc2tfZm9yd2FyZF9hbGxvYykpXG4zNDEzOlx0XHRcdFx0cmV0dXJuIDE7XG4zNDE0Olx0XHR9XG4zNDE1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB6ZXJvLWNvcHkgVENQIHJlY2VpdmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG1lY2hhbmljcywgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBgZmluZF90Y3Bfdm1hYCBmdW5jdGlvbiB3aXRoaW4gdGhpcyBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBwYXRoIHplcm8tY29weSB0YWtlcyBvbiB0aGUgcmVjZWl2aW5nIGVuZC4gSSBleHBlY3QgYGZpbmRfdGNwX3ZtYWAgaXMgY3JpdGljYWwgdG8gbG9jYXRpbmcgdGhlIHJlbGV2YW50IG1lbW9yeSBtYXAgb3IgdmlydHVhbCBtZW1vcnkgYXJlYSwgd2hpY2ggaXMgdGhlIGNydXggb2YgemVyby1jb3B5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX3RjcF92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMjM5PXN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyNjQtXG5uZXQvaXB2NC90Y3AuYzoyMjY1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm5ldC9pcHY0L3RjcC5jLTIyNjYtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMjkxPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIzMzEtXG5uZXQvaXB2NC90Y3AuYzoyMzMyOlx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXHUwMDNlbW0sIGFkZHJlc3MsIFx1MDAyNm1tYXBfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTIzMzMtXHRpZiAoIXZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHRjcF96ZXJvY29weV9yZWNlaXZlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgYXR0ZW50aW9uJiMzOTtzIGJlZW4gZHJhd24gdG8gYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIEkgd2FudCB0byBnZXQgYSBjbG9zZXIgbG9vayBhdCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZSAyMzMwLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHplcm8tY29weSBpcyBiZWluZyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjcml0aWNhbCBsb2dpYyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBoYW5kbGluZyBzY2F0dGVyLWdhdGhlciwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBidWZmZXIgcmVhc3NlbWJseSBlZmZpY2llbnRseSwgb3IgaWYgdGhlcmUgbWlnaHQgYmUgc29tZSBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCByZXF1aXJlIGNhcmVmdWwgZXhhbWluYXRpb24gb2YgbWVtb3J5IGFkZHJlc3NlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGF0IHBhcnRpY3VsYXIgc3BvdCBpbiB0aGUgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBiZWluZyBoYW5kbGVkIG9wdGltYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI4NTpcdFx0fVxuMjI4NjpcdFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcbjIyODc6XHRcdHJldHVybiB2bWE7XG4yMjg4Olx0fVxuMjI4OTpcdFxuMjI5MDpcdCNkZWZpbmUgVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRSAzMlxuMjI5MTpcdHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuMjI5MjpcdFx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcbjIyOTM6XHRcdFx0XHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXG4yMjk0Olx0e1xuMjI5NTpcdFx0dTMyIGxlbmd0aCA9IDAsIG9mZnNldCwgdm1hX2xlbiwgYXZhaWxfbGVuLCBjb3B5bGVuID0gMDtcbjIyOTY6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXpjLVx1MDAzZWFkZHJlc3M7XG4yMjk3Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZXNbVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRV07XG4yMjk4Olx0XHRzMzIgY29weWJ1Zl9sZW4gPSB6Yy1cdTAwM2Vjb3B5YnVmX2xlbjtcbjIyOTk6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMjMwMDpcdFx0Y29uc3Qgc2tiX2ZyYWdfdCAqZnJhZ3MgPSBOVUxMO1xuMjMwMTpcdFx0dW5zaWduZWQgaW50IHBhZ2VzX3RvX21hcCA9IDA7XG4yMzAyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbjIzMDM6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuMjMwNDpcdFx0dTMyIHNlcSA9IHRwLVx1MDAzZWNvcGllZF9zZXE7XG4yMzA1Olx0XHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xuMjMwNjpcdFx0aW50IGlucSA9IHRjcF9pbnEoc2spO1xuMjMwNzpcdFx0Ym9vbCBtbWFwX2xvY2tlZDtcbjIzMDg6XHRcdGludCByZXQ7XG4yMzA5Olx0XG4yMzEwOlx0XHR6Yy1cdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XG4yMzExOlx0XHR6Yy1cdTAwM2Vtc2dfZmxhZ3MgPSAwO1xuMjMxMjpcdFxuMjMxMzpcdFx0aWYgKGFkZHJlc3MgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fCBhZGRyZXNzICE9IHpjLVx1MDAzZWFkZHJlc3MpXG4yMzE0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMxNTpcdFxuMjMxNjpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pXG4yMzE3Olx0XHRcdHJldHVybiAtRU5PVENPTk47XG4yMzE4Olx0XG4yMzE5Olx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4yMzIwOlx0XG4yMzIxOlx0XHRpZiAoaW5xIFx1MDAyNlx1MDAyNiBpbnEgXHUwMDNjPSBjb3B5YnVmX2xlbilcbjIzMjI6XHRcdFx0cmV0dXJuIHJlY2VpdmVfZmFsbGJhY2tfdG9fY29weShzaywgemMsIGlucSwgdHNzKTtcbjIzMjM6XHRcbjIzMjQ6XHRcdGlmIChpbnEgXHUwMDNjIFBBR0VfU0laRSkge1xuMjMyNTpcdFx0XHR6Yy1cdTAwM2VsZW5ndGggPSAwO1xuMjMyNjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGlucTtcbjIzMjc6XHRcdFx0aWYgKCFpbnEgXHUwMDI2XHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbjIzMjg6XHRcdFx0XHRyZXR1cm4gLUVJTztcbjIzMjk6XHRcdFx0cmV0dXJuIDA7XG4yMzMwOlx0XHR9XG4yMzMxOlx0XG4yMzMyOlx0XHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cdTAwM2VtbSwgYWRkcmVzcywgXHUwMDI2bW1hcF9sb2NrZWQpO1xuMjMzMzpcdFx0aWYgKCF2bWEpXG4yMzM0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMzNTpcdFxuMjMzNjpcdFx0dm1hX2xlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpjLVx1MDAzZWxlbmd0aCwgdm1hLVx1MDAzZXZtX2VuZCAtIGFkZHJlc3MpO1xuMjMzNzpcdFx0YXZhaWxfbGVuID0gbWluX3QodTMyLCB2bWFfbGVuLCBpbnEpO1xuMjMzODpcdFx0dG90YWxfYnl0ZXNfdG9fbWFwID0gYXZhaWxfbGVuIFx1MDAyNiB+KFBBR0VfU0laRSAtIDEpO1xuMjMzOTpcdFx0aWYgKHRvdGFsX2J5dGVzX3RvX21hcCkge1xuMjM0MDpcdFx0XHRpZiAoISh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgVENQX1JFQ0VJVkVfWkVST0NPUFlfRkxBR19UTEJfQ0xFQU5fSElOVCkpXG4yMzQxOlx0XHRcdFx0emFwX3ZtYV9yYW5nZSh2bWEsIGFkZHJlc3MsIHRvdGFsX2J5dGVzX3RvX21hcCk7XG4yMzQyOlx0XHRcdHpjLVx1MDAzZWxlbmd0aCA9IHRvdGFsX2J5dGVzX3RvX21hcDtcbjIzNDM6XHRcdFx0emMtXHUwMDNlcmVjdl9za2lwX2hpbnQgPSAwO1xuMjM0NDpcdFx0fSBlbHNlIHtcbjIzNDU6XHRcdFx0emMtXHUwMDNlbGVuZ3RoID0gYXZhaWxfbGVuO1xuMjM0NjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGF2YWlsX2xlbjtcbjIzNDc6XHRcdH1cbjIzNDg6XHRcdHJldCA9IDA7XG4yMzQ5Olx0XHR3aGlsZSAobGVuZ3RoICYjNDM7IFBBR0VfU0laRSBcdTAwM2M9IHpjLVx1MDAzZWxlbmd0aCkge1xuMjM1MDpcdFx0XHRpbnQgbWFwcGFibGVfb2Zmc2V0O1xuMjM1MTpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjIzNTI6XHRcbjIzNTM6XHRcdFx0aWYgKHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50IFx1MDAzYyBQQUdFX1NJWkUpIHtcbjIzNTQ6XHRcdFx0XHR1MzIgb2Zmc2V0X2ZyYWc7XG4yMzU1Olx0XG4yMzU2Olx0XHRcdFx0aWYgKHNrYikge1xuMjM1NzpcdFx0XHRcdFx0aWYgKHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50IFx1MDAzZSAwKVxuMjM1ODpcdFx0XHRcdFx0XHRicmVhaztcbjIzNTk6XHRcdFx0XHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuMjM2MDpcdFx0XHRcdFx0b2Zmc2V0ID0gc2VxIC0gVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcTtcbjIzNjE6XHRcdFx0XHR9IGVsc2Uge1xuMjM2MjpcdFx0XHRcdFx0c2tiID0gdGNwX3JlY3Zfc2tiKHNrLCBzZXEsIFx1MDAyNm9mZnNldCk7XG4yMzYzOlx0XHRcdFx0fVxuMjM2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhbmQgWmVyby1Db3B5IFZNQXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBmaW5kX3RjcF92bWEoY3VycmVudC0mZ3Q7bW0sIGFkZHJlc3MsICZhbXA7bW1hcF9sb2NrZWQpYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGl0IG5lZWRzIHRvIGZpbmQgdGhlIHJlbGV2YW50IFZNQS4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gYGZpbmRfdGNwX3ZtYWAuIEFoYSwgaGVyZSYjMzk7cyBgdGNwX3pjX3ZtYV92YWxpZGA6CgpgYGBjCnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCgkJCSAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pCnsKCWNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKCglyZXR1cm4gdm1hLSZndDt2bV9vcHMgPT0gJmFtcDt0Y3Bfdm1fb3BzICZhbXA7JmFtcDsgemNfdm1hICZhbXA7JmFtcDsgemNfdm1hLSZndDttbSA9PSBtbTsKfQpgYGAKCldhaXQgYSBzZWNvbmTigKYgSSBzZWUgdGhhdCB0aGUgYHpjX3ZtYWAmIzM5O3MgYG1tYCBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGN1cnJlbnQgcHJvY2VzcyYjMzk7cyBtZW1vcnkgbWFuYWdlci4gQnV0LCBpcyB0aGUgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgVk1BIChgemNfdm1hLSZndDtza2ApIGdldHRpbmcgdmVyaWZpZWQgaGVyZT8gSG1tLCBubywgSSBkb24mIzM5O3Qgc2VlIGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBUaGUgY2hlY2sgZm9yIGB2bWEtJmd0O3ZtX29wcyA9PSAmYW1wO3RjcF92bV9vcHNgIGFuZCBgemNfdm1hICZhbXA7JmFtcDsgemNfdm1hLSZndDttbSA9PSBtbWAgaXMgaW4gcGxhY2UsIGJ1dCBzaG91bGQgd2UgYmUgYWxzbyBhc3NlcnRpbmcgdGhhdCBgemNfdm1hLSZndDtzayA9PSBza2AgdG8gZW5zdXJlIHRoaXMgVk1BIGJlbG9uZ3MgdG8gdGhpcyBzb2NrZXQ/IEl0IGZlZWxzIGxpa2Ugd2UgY291bGQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBpZiB0aGlzIGlzbiYjMzk7dCBjb3JyZWN0bHkgdmFsaWRhdGVkLgoKT2theSwgbGV0IG1lIGJyb2FkZW4gbXkgc2VhcmNoIG5vdy4gSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGB6Y192bWFgIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIGB6Y192bWFgIGFuZCBpdHMgbWVtYmVycywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgY29uZmlybSBpZiBzdWNoIGEgY2hlY2sgaXMgcmVhbGx5IG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGVyZSBpdCBuZWVkcyB0byBiZSBwbGFjZWQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYWxsIGRlZmluZWQgYW5kIHVzZWQgdG8gbWFwIHRoZSByZWxhdGlvbnNoaXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjX3ZtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xODU4PXZvaWQgdGNwX3NldF9yY3ZidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE4NjMtI2lmZGVmIENPTkZJR19NTVVcbm5ldC9pcHY0L3RjcC5jOjE4NjQ6c3RydWN0IHRjcF96Y192bWEge1xubmV0L2lwdjQvdGNwLmMtMTg2NS1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4tLVxubmV0L2lwdjQvdGNwLmM9MTg4Nj1zdGF0aWMgaW50IHRjcF96Y19tZW1fY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTA3LVxubmV0L2lwdjQvdGNwLmM6MTkwODpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5uZXQvaXB2NC90Y3AuYy0xOTA5LXtcbm5ldC9pcHY0L3RjcC5jOjE5MTA6XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbm5ldC9pcHY0L3RjcC5jLTE5MTEtXG5uZXQvaXB2NC90Y3AuYzoxOTEyOlx0cmVmY291bnRfaW5jKFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQpO1xubmV0L2lwdjQvdGNwLmMtMTkxMy19XG5uZXQvaXB2NC90Y3AuYy0xOTE0LVxubmV0L2lwdjQvdGNwLmM6MTkxNTpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubmV0L2lwdjQvdGNwLmMtMTkxNi17XG5uZXQvaXB2NC90Y3AuYzoxOTE3Olx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG5uZXQvaXB2NC90Y3AuYy0xOTE4LVxubmV0L2lwdjQvdGNwLmM6MTkxOTpcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbm5ldC9pcHY0L3RjcC5jOjE5MjA6XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCB6Y192bWEtXHUwMDNlbnJfcGFnZXMpO1xubmV0L2lwdjQvdGNwLmM6MTkyMTpcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG5uZXQvaXB2NC90Y3AuYzoxOTIyOlx0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xubmV0L2lwdjQvdGNwLmM6MTkyMzpcdFx0a2ZyZWUoemNfdm1hKTtcbm5ldC9pcHY0L3RjcC5jLTE5MjQtXHR9XG4tLVxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG5uZXQvaXB2NC90Y3AuYzoxOTI4Olx0Lm9wZW4gPSB0Y3BfemNfdm1hX29wZW4sXG5uZXQvaXB2NC90Y3AuYzoxOTI5Olx0LmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSxcbm5ldC9pcHY0L3RjcC5jLTE5MzAtfTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xOTMyPWludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTM0LXtcbm5ldC9pcHY0L3RjcC5jOjE5MzU6XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hO1xubmV0L2lwdjQvdGNwLmMtMTkzNi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTk0NS1cdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xubmV0L2lwdjQvdGNwLmM6MTk0NjpcdHpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5uZXQvaXB2NC90Y3AuYzoxOTQ3Olx0aWYgKCF6Y192bWEpXG5uZXQvaXB2NC90Y3AuYy0xOTQ4LVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9pcHY0L3RjcC5jLTE5NDktXG5uZXQvaXB2NC90Y3AuYzoxOTUwOlx0emNfdm1hLVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG5uZXQvaXB2NC90Y3AuYzoxOTUxOlx0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xubmV0L2lwdjQvdGNwLmM6MTk1MjpcdHpjX3ZtYS1cdTAwM2VzayA9IHNvY2stXHUwMDNlc2s7XG5uZXQvaXB2NC90Y3AuYzoxOTUzOlx0cmVmY291bnRfc2V0KFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQsIDEpO1xubmV0L2lwdjQvdGNwLmM6MTk1NDpcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xubmV0L2lwdjQvdGNwLmM6MTk1NTpcdHNvY2tfaG9sZCh6Y192bWEtXHUwMDNlc2spO1xubmV0L2lwdjQvdGNwLmM6MTk1NjpcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXHUwMDNlc2ssIG5yX3BhZ2VzKSkge1xubmV0L2lwdjQvdGNwLmM6MTk1NzpcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG5uZXQvaXB2NC90Y3AuYzoxOTU4Olx0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xubmV0L2lwdjQvdGNwLmM6MTk1OTpcdFx0a2ZyZWUoemNfdm1hKTtcbm5ldC9pcHY0L3RjcC5jLTE5NjAtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE5NjMtXHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dGNwX3ZtX29wcztcbm5ldC9pcHY0L3RjcC5jOjE5NjQ6XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xubmV0L2lwdjQvdGNwLmMtMTk2NS1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE5NjctXG5uZXQvaXB2NC90Y3AuYzoxOTY4OnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5uZXQvaXB2NC90Y3AuYy0xOTY5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5uZXQvaXB2NC90Y3AuYy0xOTcwLXtcbm5ldC9pcHY0L3RjcC5jOjE5NzE6XHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbm5ldC9pcHY0L3RjcC5jLTE5NzItXG5uZXQvaXB2NC90Y3AuYzoxOTczOlx0cmV0dXJuIHZtYS1cdTAwM2V2bV9vcHMgPT0gXHUwMDI2dGNwX3ZtX29wcyBcdTAwMjZcdTAwMjYgemNfdm1hIFx1MDAyNlx1MDAyNiB6Y192bWEtXHUwMDNlbW0gPT0gbW07XG5uZXQvaXB2NC90Y3AuYy0xOTc0LX1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yMjY1PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMjcxLVx0aWYgKHZtYSkge1xubmV0L2lwdjQvdGNwLmM6MjI3MjpcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG5uZXQvaXB2NC90Y3AuYy0yMjczLVx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTIyODEtXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbm5ldC9pcHY0L3RjcC5jOjIyODI6XHRpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xubmV0L2lwdjQvdGNwLmMtMjI4My1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODA5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgUGF0Y2ggYW5kIFNhbml0aXplciBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIG1ldGljdWxvdXNseS4gRmlyc3QsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiB3ZSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBjcnVjaWFsIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4gaXMgdGhlIGtleSBoZXJlLiBTdGFuZGFyZCBLQVNBTiBjb25maWd1cmF0aW9ucywgbGlrZSB0aGUgdXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnIHdlJiMzOTtyZSBsaWtlbHkgdXNpbmcsIGFyZSBhbHJlYWR5IHJvYnVzdC4gVGhleSBnaXZlIHVzIGEgZnVsbCBzdWl0ZSBvZiBkZWJ1ZyB0b29scyDigJMgS0FTQU4mIzM5O3Mgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4sIExPQ0tERVAgZm9yIGxvY2tpbmcgaXNzdWVzLCB0aGUgVUIgc2FuaXRpemVycywgYW5kIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBsYXNlci1mb2N1c2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlLgoKVGhlIGZ1bmRhbWVudGFsIHJ1bGUgdGhhdCBsZWFwcyBvdXQ6IGlmIEtBU0FOIG9yIGFueSBvZiB0aGUgb3RoZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIGNhbiBjYXRjaCB0aGUgYnVnLCBLTVNBTiBpcyBzdXBlcmZsdW91cy4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgcmVzb3VyY2VzLgoKTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBhYm91dCBzb2NrZXQgYWNjb3VudGluZyBhbmQgemVyby1jb3B5IHJlY2VpdmUgVk1Bcy4KCjEuICBJdCYjMzk7cyBpbnRyb2R1Y2luZyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhpcyBpcyBhYm91dCB0cmFja2luZy4gV2UmIzM5O3ZlIGdvdCB0aGUgYWRkaXRpb24gdG8gYHNvY2suaGAgYW5kIHRoZSByZWxldmFudCB0cmFjZSBldmVudHMuCgoyLiAgV2l0aGluIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgLCB0aGlzIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGlzIHNwZWNpZmljYWxseSAqYXZvaWRpbmcqIHRoZSBgU0tfTUVNX1NFTkRgIGJyYW5jaC4gSW50ZXJlc3RpbmcsIGl0JiMzOTtzIGRpdmVydGluZyBzb21lIHNvcnQgb2YgbG9naWMuCgozLiAgVGhlIGB0Y3BfbW1hcGAgZnVuY3Rpb24gaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgd2UmIzM5O3JlIHNlZWluZyBhbGxvY2F0aW9uIG9mIGEgYHN0cnVjdCB0Y3BfemNfdm1hYC4gSXQmIzM5O3MgdXNpbmcgYGttYWxsb2Nfb2JqYC4gV2FpdCBhIHNlY29uZCEgSSBuZWVkIHRvIGJlIHN1cmU7IGxldCBtZSBnbyBzdHJhaWdodCB0byB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgaG93IGBrbWFsbG9jX29iamAgd29ya3MuIFdoYXQgYXJlIHRoZSBhbGxvY2F0aW9uIGNoYXJhY3RlcmlzdGljcz8gSXMgaXQgZ29pbmcgdG8gZG8gc29tZXRoaW5nIHRoYXQgS0FTQU4gb3IgS01TQU4gd2lsbCBiZSB0cmlnZ2VyZWQgYnk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUga21hbGxvY19vYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9MTA3Mz12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyMy0gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMjQ6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyNS1cdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzNS0gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzY6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTM3LVx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgQ09VTlQpXG4tLVxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2My0jdW5kZWYgdmZyZWVcbmxpYi9kZWNvbXByZXNzX3VueHouYzoxNjQ6I2RlZmluZSBrbWFsbG9jX29iaih0eXBlKSBtYWxsb2Moc2l6ZW9mKHR5cGUpKVxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2NS0jZGVmaW5lIGtmcmVlKHB0cikgZnJlZShwdHIpXG4tLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19hcnJheSh1bnNpZ25lZCBuLCBzaXplX3QgcywgZ2ZwX3QgZ2ZwKVxuLS1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02Ny1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo2ODojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjktXHQoKHR5cGVvZihWQVJfT1JfVFlQRSkgKilrbWFsbG9jKHNpemVvZih0eXBlb2YoVkFSX09SX1RZUEUpKSwgMCkpXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzAtXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6NzE6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzItXHQoKHR5cGVvZihWQVJfT1JfVFlQRSkgKilrbWFsbG9jKHNpemVvZih0eXBlb2YoVkFSX09SX1RZUEUpKSAqIChDT1VOVCksIDApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGNwX3pjX3ZtYWAgU3RydWN0dXJlIGFuZCBaZXJvLUNvcHkgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGBzdHJ1Y3QgdGNwX3pjX3ZtYWAuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYG5yX3BhZ2VzYCwgYG1tYCwgYHJlZmNudGAsIGFuZCBgc2tgLiAgTm93LCBJJiMzOTttIGNoZWNraW5nIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBpbiBgdGNwX21tYXBgLiAgVGhlIGBrbWFsbG9jX29iamAgY2FsbCBzdWdnZXN0cyBhbGxvY2F0aW9uLCBhbmQgdGhlIHN1YnNlcXVlbnQgYXNzaWdubWVudHMgdG8gZWFjaCBmaWVsZCAoYG5yX3BhZ2VzYCwgYG1tYCwgYHNrYCkgYWxvbmcgd2l0aCB0aGUgYHJlZmNvdW50X3NldGAgY2FsbCBjb25maXJtcyBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiBhbGwgaXRzIG1lbWJlcnMhIFRoYXQmIzM5O3MgZ29vZC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUmIzM5O3MgcGFkZGluZywgd2hpY2ggY291bGQgbGVhZCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHVuaW5pdGlhbGl6ZWQgZGF0YSB3ZXJlIHJlYWQuIE9uIGFtZDY0LCBiYXNlZCBvbiB0aGUga25vd24gc2l6ZXMgb2YgdGhvc2UgbWVtYmVycywgSSBjYW4gc2VlOiBgbnJfcGFnZXNgIGlzIDggYnl0ZXMsIGBtbWAgaXMgOCBieXRlcywgYHJlZmNudGAgaXMgNCBieXRlcywgc28gdGhlcmUgaXMgcGFkZGluZyBvZiA0IGJ5dGVzLCBiZWZvcmUgdGhlIDggYnl0ZXMgb2YgYHNrYC4gVGhpcyBzdW1zIHVwIHRvIGEgdG90YWwgb2YgMzIgYnl0ZXMgZm9yIHRoZSBzdHJ1Y3QuCgpNeSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBhbnkgb2YgdGhpcyBgemNfdm1hYCBkYXRhIGdldHMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuICBJdCBhcHBlYXJzIHRoaXMgc3RydWN0dXJlIGlzIGVudGlyZWx5IGtlcm5lbC1pbnRlcm5hbC4gSXQmIzM5O3Mgc3RvcmVkIGluIGB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YWAsIHdoaWNoIHNlZW1zIHNhZmUsIGZyb20gYSBjdXJzb3J5IGluc3BlY3Rpb24uIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIGFjY2Vzc2VkIHdpdGhpbiBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBhbmQgYHRjcF96Y192bWFfdmFsaWRgLCBhbmQgdGhlIGNvZGUgSSYjMzk7bSByZXZpZXdpbmcgbWFrZXMgbm8gbWVudGlvbiBvZiBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdCB0byB1c2VyIHNwYWNlLiBUaGUgYWNjZXNzZXMgbG9vayBjb250cm9sbGVkLCBhbmQgdGhlIHJlZmNvdW50IG1hbmFnZW1lbnQgYW5kIGNsZWFudXAgaW4gYHRjcF96Y192bWFfY2xvc2VgIGxvb2sgY29ycmVjdC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaGVyZSEKCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHplcm8tY29weSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBzb2NrZXQgcmVjZWl2ZSBidWZmZXJzLiBJJiMzOTttIGxvb2tpbmcgYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgcGFnZXMgZ2V0IG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgdmlhIG1lY2hhbmlzbXMgbGlrZSBgemFwX3ZtYV9yYW5nZWAgYW5kIGB2bV9pbnNlcnRfcGFnZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZmluZF90Y3Bfdm1hYCBkb2VzIG5vdCBieXBhc3MgY2hlY2tzIGZvciB0aGlzIG1hcHBpbmcuCgpUaGUgY2hhbmdlIGluIGBmaW5kX3RjcF92bWFgIGlzIHRoZSBjcml0aWNhbCBwb2ludC4gIFRoZSBjb2RlIG5vdyB1c2VzIGB0Y3BfemNfdm1hX3ZhbGlkYC4gIFRoYXQmIzM5O3MgYSB2ZXJ5IGdvb2QgY2hlY2s6IGB2bWEtJmd0O3ZtX29wcyA9PSAmYW1wO3RjcF92bV9vcHMgJmFtcDsmYW1wOyB6Y192bWEgJmFtcDsmYW1wOyB6Y192bWEtJmd0O21tID09IG1tYC4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgVk1BIHR5cGUsIHRoYXQgd2UgaGF2ZSB2YWxpZCBwcml2YXRlIGRhdGEgKGB6Y192bWFgKSwgYW5kIHRoYXQgaXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBgbW1gLgoKQWxzbywgSSBzZWUgdGhlIGFkZGl0aW9uYWwgZmxhZ3MgYFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORGAgc2V0IGluIGB0Y3BfbW1hcGAsIHdoaWNoIGFyZSBnb29kIGZvciB6ZXJvLWNvcHkuCgpGaW5hbGx5LCByZWdhcmRpbmcgbWVtb3J5IGNoYXJnaW5nL3VuY2hhcmdpbmcsIGB0Y3BfemNfbWVtX2NoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBjYWxsIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGFuZCBgX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZGAuIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBJJiMzOTttIGNoZWNraW5nIHRoYXQgd2hlbiBga2luZCA9PSBTS19NRU1fUkVDVl9aRVJPQ09QWWAsIHRoZSBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgYnlwYXNzIGFueSBjaGVja3MuIFRoZXJlIGFyZSBubyByZWxldmFudCBicmFuY2ggY29uZGl0aW9ucyBJIHNlZSB0byBjaGVjayBmb3IgdGhpcyBzcGVjaWZpYyBjYXNlLiBJIHdpbGwgY2hlY2sgZm9yIGFueSB0cmFjZSBldmVudHMgZm9yIHRoZSBidWZmZXIgbGltaXRzIGluIHRoZSBrZXJuZWwuIEkgd2lsbCBzZWFyY2ggZm9yIHRoZSB1c2VzIG9mIGBza21lbV9raW5kX25hbWVzYCB0byBzZWUuIFRoaXMgY29uZmlybXMgdGhlIGxpbWl0cyBhcmUgYmVpbmcgcmVzcGVjdGVkLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGVybXMgb2YgbWVtb3J5IGV4cG9zdXJlLiBJJiMzOTt2ZSBmb2N1c2VkIG9uIHplcm8tY29weSBhc3BlY3RzIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBrZXkgY2hlY2tzIGFyZSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ttZW1fa2luZF9uYW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtMzgtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg6Mzk6I2RlZmluZSBza21lbV9raW5kX25hbWVzXHRcdFx0XFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC00MC1cdFx0RU0oU0tfTUVNX1NFTkQpXHRcdFx0XFxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg9NTI9dGNwX3N0YXRlX25hbWVzXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg6NTM6c2ttZW1fa2luZF9uYW1lc1xuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTU0LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC02OC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo2OTojZGVmaW5lIHNob3dfc2ttZW1fa2luZF9uYW1lcyh2YWwpXHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oOjcwOlx0X19wcmludF9zeW1ib2xpYyh2YWwsIHNrbWVtX2tpbmRfbmFtZXMpXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtNzEtXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oPTk0PVRSQUNFX0VWRU5UKHNvY2tfZXhjZWVkX2J1Zl9saW1pdCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtMTM2LVx0XHRfX2VudHJ5LVx1MDAzZXdtZW1fcXVldWVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oOjEzNzpcdFx0c2hvd19za21lbV9raW5kX25hbWVzKF9fZW50cnktXHUwMDNla2luZClcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC0xMzgtXHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjAxCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDc1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRyYWNlIGV2ZW50cyBhcmUgZGVmaW5lZCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmU7IG5vIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgZmFsbGluZyBpbnRvIGEgS01TQU4td29ydGh5IHNpdHVhdGlvbi4gV2UgbmVlZCB0byBjaGVjayB0aG9zZSBmb3VyIGNyaXRlcmlhLCBhbmQgSSBjYW4gc2F5IHdpdGggY29uZmlkZW5jZSB0aGF0IG5vbmUgb2YgdGhlbSBhcmUgdHJpZ2dlcmVkIGhlcmUuCgoqICAgKipDcml0ZXJpb24gMToqKiBObyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlOyBzbywgbm8gd29ycmllcyBhYm91dCB1bmluaXRpYWxpemVkIGZpZWxkcyBsZWFraW5nIG91dC4KKiAgICoqQ3JpdGVyaW9uIDI6KiogQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiB1c2UuIE5vIGRlcGVuZGVuY3kgb24gcG90ZW50aWFsbHkgZ2FyYmFnZSB2YWx1ZXMuCiogICAqKkNyaXRlcmlvbiAzOioqIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRlZCBpcyBgc3RydWN0IHRjcF96Y192bWFgLiBBbmQgaXQmIzM5O3MgdGhvcm91Z2hseSBpbml0aWFsaXplZCDigJMgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBzZXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbi4gTm8gY2hhbmNlIG9mIGxhdGVyIGNvZGUgcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBpdC4KKiAgICoqQ3JpdGVyaW9uIDQ6KiogVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhbHRlciBhbnkgYnVmZmVyIGFjY2VzcyBsb2dpYyBpbiBhIHdheSB0aGF0IHJpc2tzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1Bcy4KCldoYXQgYWJvdXQgb3RoZXIgcmlza3M/IFJlZmNvdW50aW5nLCBWTUEgbGlmZWN5Y2xlLCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcuIEJ1dCBJJiMzOTttIGNvbmZpZGVudCB0aG9zZSBhcmUgYmVpbmcgYWRkcmVzc2VkIGJ5IEtBU0FOLCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbG9ja2RlcCwgcGFnZSBhbGxvY2F0b3IgY2hlY2tzLCBhbmQgVUJTQU4vV0FSTl9PTi4gVGhlc2UgYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLiBLTVNBTiB3b3VsZG4mIzM5O3Qgb2ZmZXIgYW55IHNwZWNpZmljIGJlbmVmaXQgaGVyZSB0aGF0IEtBU0FOIHdvdWxkbiYjMzk7dCBhbHJlYWR5IGNvdmVyLgoKSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGV4cGxpY2l0IGd1aWRhbmNlOiBUaGVyZSYjMzk7cyBubyBwb2ludCBpbiBydW5uaW5nIGEgS01TQU4gc2Vzc2lvbiBpZiB0aGUgYnVncyBjYW4gYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBXZSBhcmUgc2FmZS4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCBWTUEgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZywgYW5kIHJlbGF0ZWQgaXNzdWVzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRob3NlIHRvb2xzLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHdlJiMzOTtyZSB0b3VjaGluZyBvciBpbnRyb2R1Y2luZyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGJlaW5nIGludHJvZHVjZWQgaGVyZS4KClNvLCAqTmVlZHNLTVNBTj1mYWxzZSogaXMgdGhlIGNvcnJlY3QgY2FsbC4gSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzE6NTMuOTAxMjEzMzYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NTc2ODUzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9tbWFwXCIsXG4gICAgXCJ0Y3BfemNfdm1hX29wZW5cIixcbiAgICBcInRjcF96Y192bWFfY2xvc2VcIixcbiAgICBcInRjcF96Y19tZW1fY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemNfbWVtX3VuY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZWN5Y2xlIHRyYWNraW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzIChzdHJ1Y3QgdGNwX3pjX3ZtYSkuIFRoZSBvbmx5IG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZSBpcyBzdHJ1Y3QgdGNwX3pjX3ZtYSwgd2hlcmUgYWxsIG1lbWJlciBmaWVsZHMgKG5yX3BhZ2VzLCBtbSwgc2ssIHJlZmNudCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEga21hbGxvY19vYmouIFRoZSBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGtlcm5lbC1pbnRlcm5hbCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1vcnkgYWNjb3VudGluZywgb3IgVk1BIGxpZmVjeWNsZS91c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMTo1My45MDEyMTgyMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzM4Mzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRkOGY2YzBiNTkzMWE0OGExNDA3Y2Q1NGI2YTJhN2RkNTI2ZGJjNjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MzE6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXFxuaW5kZXggNTExODUyMjJhYWMyOS4uY2YxOTA1NWE5YzQwMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9zb2NrLmhcXG4rKysgYi9pbmNsdWRlL25ldC9zb2NrLmhcXG5AQCAtMTU1Niw2ICsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XFxuIFxcbiAjZGVmaW5lIFNLX01FTV9TRU5EXFx0MFxcbiAjZGVmaW5lIFNLX01FTV9SRUNWXFx0MVxcbisjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZXFx0MHgxMDBcXG4gXFxuIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqL1xcbiBzdGF0aWMgaW5saW5lIGxvbmcgc2tfcHJvdF9tZW1fbGltaXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IGluZGV4KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhcXG5pbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxcbkBAIC0zOCw3ICszOCw4IEBAXFxuIFxcbiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXNcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdEVNKFNLX01FTV9TRU5EKVxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0RU1lKFNLX01FTV9SRUNWKVxcbitcXHRcXHRFTShTS19NRU1fUkVDVilcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdEVNZShTS19NRU1fUkVDVl9aRVJPQ09QWSlcXG4gXFxuIC8qIGVudW1zIG5lZWQgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSAqL1xcbiAjdW5kZWYgRU1cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXFxuaW5kZXggZmE2MGI3NDk0YzU4Ni4uM2Q4NWMxMzhlMWM3MSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcXG5AQCAtMzM4MCw3ICszMzgwLDcgQEAgaW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG4gXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgXFx1MDAzYyBza19nZXRfcm1lbTAoc2ssIHByb3QpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdH0gZWxzZSB7IC8qIFNLX01FTV9TRU5EICovXFxuK1xcdH0gZWxzZSBpZiAoa2luZCA9PSBTS19NRU1fU0VORCkge1xcbiBcXHRcXHRpbnQgd21lbTAgPSBza19nZXRfd21lbTAoc2ssIHByb3QpO1xcbiBcXG4gXFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCA1NjI3NTIzNTJhZmU0Li41Y2MyYmZjOGE5MGQwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtMjY3LDYgKzI2Nyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2tleS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG5AQCAtMTg2MCwyMyArMTg2MSwxMTggQEAgdm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfTU1VXFxuK3N0cnVjdCB0Y3BfemNfdm1hIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdHJlZmNvdW50X3QgcmVmY250O1xcbitcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK307XFxuK1xcbisvKiBLZWVwIHRoZSBzaXplIGFyZ3VtZW50IHRvIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCgpIHdpdGhpbiBpbnQuICovXFxuKyNkZWZpbmUgVENQX1pFUk9DT1BZX01FTV9DSFVOSyAoSU5UX01BWCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKVxcbitcXG4rc3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGNodW5rO1xcbitcXG4rXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxuK1xcdFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xcbitcXHRcXHRfX3NrX21lbV9yZWR1Y2VfYWxsb2NhdGVkKHNrLCBjaHVuayk7XFxuK1xcdFxcdG5yX3BhZ2VzIC09IGNodW5rO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBjaHVuaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHdoaWxlIChucl9wYWdlcykge1xcbitcXHRcXHRjaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHQgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTtcXG4rXFx0XFx0cmV0ID0gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHNrLCBjaHVuayBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY2h1bmssIFNLX01FTV9SRUNWX1pFUk9DT1BZKTtcXG4rXFx0XFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0XFx0dGNwX3pjX21lbV91bmNoYXJnZShzaywgY2hhcmdlZCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNoYXJnZWQgKz0gY2h1bms7XFxuK1xcdFxcdG5yX3BhZ2VzIC09IGNodW5rO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4rXFxuK1xcdHJlZmNvdW50X2luYyhcXHUwMDI2emNfdm1hLVxcdTAwM2VyZWZjbnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4rXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250KSkge1xcbitcXHRcXHR0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS1cXHUwMDNlc2ssIHpjX3ZtYS1cXHUwMDNlbnJfcGFnZXMpO1xcbitcXHRcXHRtbWRyb3AoemNfdm1hLVxcdTAwM2VtbSk7XFxuK1xcdFxcdHNvY2tfcHV0KHpjX3ZtYS1cXHUwMDNlc2spO1xcbitcXHRcXHRrZnJlZSh6Y192bWEpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdGNwX3ZtX29wcyA9IHtcXG4rXFx0Lm9wZW4gPSB0Y3BfemNfdm1hX29wZW4sXFxuK1xcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXFxuIH07XFxuIFxcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4rXFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFxuIFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcdHZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKTtcXG4gXFxuIFxcdC8qIEluc3RydWN0IHZtX2luc2VydF9wYWdlKCkgdG8gbm90IG1tYXBfcmVhZF9sb2NrKG1tKSAqL1xcbi1cXHR2bV9mbGFnc19zZXQodm1hLCBWTV9NSVhFRE1BUCk7XFxuK1xcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX01JWEVETUFQKTtcXG4rXFxuK1xcdG5yX3BhZ2VzID0gKHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0emNfdm1hID0ga21hbGxvY19vYmooKnpjX3ZtYSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCF6Y192bWEpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0emNfdm1hLVxcdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xcbitcXHR6Y192bWEtXFx1MDAzZW1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4rXFx0emNfdm1hLVxcdTAwM2VzayA9IHNvY2stXFx1MDAzZXNrO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250LCAxKTtcXG4rXFx0bW1ncmFiKHpjX3ZtYS1cXHUwMDNlbW0pO1xcbitcXHRzb2NrX2hvbGQoemNfdm1hLVxcdTAwM2Vzayk7XFxuK1xcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXFx1MDAzZXNrLCBucl9wYWdlcykpIHtcXG4rXFx0XFx0bW1kcm9wKHpjX3ZtYS1cXHUwMDNlbW0pO1xcbitcXHRcXHRzb2NrX3B1dCh6Y192bWEtXFx1MDAzZXNrKTtcXG4rXFx0XFx0a2ZyZWUoemNfdm1hKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnRjcF92bV9vcHM7XFxuK1xcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdGNwX3pjX3ZtYV92YWxpZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gdm1hLVxcdTAwM2V2bV9vcHMgPT0gXFx1MDAyNnRjcF92bV9vcHMgXFx1MDAyNlxcdTAwMjYgemNfdm1hIFxcdTAwMjZcXHUwMDI2IHpjX3ZtYS1cXHUwMDNlbW0gPT0gbW07XFxuK31cXG4rXFxuIHN0YXRpYyBza2JfZnJhZ190ICpza2JfYWR2YW5jZV90b19mcmFnKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXRfc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdTMyICpvZmZzZXRfZnJhZylcXG4ge1xcbkBAIC0yMTczLDcgKzIyNjksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG4gXFxuIFxcdGlmICh2bWEpIHtcXG4tXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzICE9IFxcdTAwMjZ0Y3Bfdm1fb3BzKSB7XFxuK1xcdFxcdGlmICghdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xcbiBcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdH1cXG5AQCAtMjE4Myw3ICsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbiBcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcXG4tXFx0aWYgKCF2bWEgfHwgdm1hLVxcdTAwM2V2bV9vcHMgIT0gXFx1MDAyNnRjcF92bV9vcHMpIHtcXG4rXFx0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMxOjU0LjM4NTM4OTI5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI1OTY0NzExNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9tbWFwXCIsXG4gICAgXCJ0Y3BfemNfdm1hX29wZW5cIixcbiAgICBcInRjcF96Y192bWFfY2xvc2VcIixcbiAgICBcInRjcF96Y19tZW1fY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemNfbWVtX3VuY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkOGY2YzBiNTkzMWE0OGExNDA3Y2Q1NGI2YTJhN2RkNTI2ZGJjNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMzozMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaFxuaW5kZXggNTExODUyMjJhYWMyOS4uY2YxOTA1NWE5YzQwMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvc29jay5oXG5AQCAtMTU1Niw2ICsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XG4gXG4gI2RlZmluZSBTS19NRU1fU0VORFx0MFxuICNkZWZpbmUgU0tfTUVNX1JFQ1ZcdDFcbisjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZXHQweDEwMFxuIFxuIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqL1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBza19wcm90X21lbV9saW1pdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG5pbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhcbkBAIC0zOCw3ICszOCw4IEBAXG4gXG4gI2RlZmluZSBza21lbV9raW5kX25hbWVzXHRcdFx0XFxcbiBcdFx0RU0oU0tfTUVNX1NFTkQpXHRcdFx0XFxcbi1cdFx0RU1lKFNLX01FTV9SRUNWKVxuK1x0XHRFTShTS19NRU1fUkVDVilcdFx0XHRcXFxuK1x0XHRFTWUoU0tfTUVNX1JFQ1ZfWkVST0NPUFkpXG4gXG4gLyogZW51bXMgbmVlZCB0byBiZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlICovXG4gI3VuZGVmIEVNXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCBmYTYwYjc0OTRjNTg2Li4zZDg1YzEzOGUxYzcxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0zMzgwLDcgKzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKVxuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNjIHNrX2dldF9ybWVtMChzaywgcHJvdCkpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG4tXHR9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqL1xuK1x0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4gXHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI2Nyw2ICsyNjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcdTAwM2VcbkBAIC0xODYwLDIzICsxODYxLDExOCBAQCB2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbitzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCBzb2NrICpzaztcbit9O1xuK1xuKy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi9cbisjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGNodW5rO1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbitcdFx0bnJfcGFnZXMgLT0gY2h1bms7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgY2h1bms7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdHJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRcdCAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpO1xuK1x0XHRpZiAoIXJldCkge1xuK1x0XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2Uoc2ssIGNoYXJnZWQpO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHR9XG4rXHRcdGNoYXJnZWQgKz0gY2h1bms7XG4rXHRcdG5yX3BhZ2VzIC09IGNodW5rO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJlZmNvdW50X2luYyhcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0dGNwX3pjX21lbV91bmNoYXJnZSh6Y192bWEtXHUwMDNlc2ssIHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyk7XG4rXHRcdG1tZHJvcCh6Y192bWEtXHUwMDNlbW0pO1xuK1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuK1x0XHRrZnJlZSh6Y192bWEpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG4rXHQub3BlbiA9IHRjcF96Y192bWFfb3BlbixcbitcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG4gfTtcbiBcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbitcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWE7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQyk7XG4gXG4gXHQvKiBJbnN0cnVjdCB2bV9pbnNlcnRfcGFnZSgpIHRvIG5vdCBtbWFwX3JlYWRfbG9jayhtbSkgKi9cbi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTtcbitcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX01JWEVETUFQKTtcbitcbitcdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0emNfdm1hID0ga21hbGxvY19vYmooKnpjX3ZtYSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghemNfdm1hKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xuK1x0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0emNfdm1hLVx1MDAzZXNrID0gc29jay1cdTAwM2VzaztcbitcdHJlZmNvdW50X3NldChcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250LCAxKTtcbitcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xuK1x0c29ja19ob2xkKHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRpZiAodGNwX3pjX21lbV9jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCBucl9wYWdlcykpIHtcbitcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4rXHRcdHNvY2tfcHV0KHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRcdGtmcmVlKHpjX3ZtYSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnRjcF92bV9vcHM7XG4rXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJldHVybiB2bWEtXHUwMDNldm1fb3BzID09IFx1MDAyNnRjcF92bV9vcHMgXHUwMDI2XHUwMDI2IHpjX3ZtYSBcdTAwMjZcdTAwMjYgemNfdm1hLVx1MDAzZW1tID09IG1tO1xuK31cbitcbiBzdGF0aWMgc2tiX2ZyYWdfdCAqc2tiX2FkdmFuY2VfdG9fZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0X3NrYixcbiBcdFx0XHRcdCAgICAgICB1MzIgKm9mZnNldF9mcmFnKVxuIHtcbkBAIC0yMTczLDcgKzIyNjksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXG4gXHRpZiAodm1hKSB7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbitcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG4gXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC0yMTgzLDcgKzIyNzksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuK1x0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzE6NTQuMzg1MzkwNzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyNTI3NTY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWmVyby1Db3B5IFJlY2VpdmUgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgY2hhbmdlcyB0aGF0IEkgbmVlZCB0byBkaXNzZWN0LiBGaXJzdCBvZmYsIGl0J3MgYWRkaW5nIGBTS19NRU1fUkVDVl9aRVJPQ09QWWAgYXMgYSBuZXcgbWVtb3J5IGtpbmQsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAgYW5kIHRoZW4gcmVmZXJlbmNlZCBpbiB0aGUgdHJhY2UgZXZlbnRzIGluIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtZWFucyBpdCdzIHJlbGF0ZWQgdG8gdHJhY2tpbmcgbWVtb3J5IHVzYWdlIGZvciB6ZXJvLWNvcHkgcmVjZWl2ZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5JbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGZ1bmN0aW9uIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2UgaGVyZSBpcyBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQ6IHRoZSBgZWxzZWAgYmxvY2sgZm9yIGBTS19NRU1fU0VORGAgaXMgbm93IGV4cGxpY2l0bHkgY2hlY2tlZC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBub3cgaGFuZGxpbmcgdGhlIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGtpbmQgbW9yZSBleHBsaWNpdGx5IGluIHRoaXMgZnVuY3Rpb24gd2hpY2ggY291bGQgYmUgY3J1Y2lhbCBmb3IgYWNjb3VudGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0cmFja2luZyBoYXMgYmVlbiBtb2RpZmllZC5cblxuTm93IGZvciB0aGUgbWVhdCBvZiBpdDogdGhlIGBuZXQvaXB2NC90Y3AuY2AgY2hhbmdlcywgYWxsIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19NTVVgIGd1YXJkLiBUaGlzIHNjcmVhbXMgXCJtZW1vcnkgbWFuYWdlbWVudFwiIGFuZCB6ZXJvLWNvcHksIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBlYXJsaWVyIGFkZGl0aW9ucy4gQSBuZXcgYHN0cnVjdCB0Y3BfemNfdm1hYCBpcyBkZWZpbmVkLCB3aXRoIHJlZmNvdW50aW5nLCBhbmQgcmVmZXJlbmNlcyB0byBwYWdlcywgbWVtb3J5IG1hcHBpbmcsIGFuZCB0aGUgc29ja2V0LiBXZSBoYXZlIGNoYXJnZS91bmNoYXJnZSBmdW5jdGlvbnMgKGB0Y3BfemNfbWVtX2NoYXJnZWAsIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCkgYW5kIG9wZW4vY2xvc2UgZnVuY3Rpb25zIGZvciB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSAoYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCkuIFRoaXMgbWFrZXMgbWUgdGhpbmsgdGhpcyBwYXRjaCBpcyBkaXJlY3RseSBpbXBsZW1lbnRpbmcgemVyby1jb3B5IG1tYXAgc3VwcG9ydC5cblxuVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHRjcF9tbWFwYCBhcmUgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYFZNX0RPTlRDT1BZYCwgYFZNX0RPTlRFWFBBTkRgLCBhbmQgYFZNX01JWEVETUFQYCBhcmUgYmVpbmcgc2V0IG9uIHRoZSBWTUEuIFRoaXMgaXMgdmVyeSBzdGFuZGFyZCBmb3IgYSB6ZXJvLWNvcHkgaW1wbGVtZW50YXRpb24uIEEgYHpjX3ZtYWAgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBzb2NrZXQgbWVtb3J5IGNoYXJnZWQgdmlhIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGFuZCBtb3N0IGltcG9ydGFudGx5IGBtbWAgYW5kIGBza2AgYXJlIGJlaW5nIGhlbGQgd2l0aGluIHRoZSBgdm1hYCwgcHJlc3VtYWJseSBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuXG5cbkZpbmFsbHksIGB0Y3BfemNfdm1hX3ZhbGlkYCBhbmQgdGhlIHVwZGF0ZXMgdG8gYGZpbmRfdGNwX3ZtYWAgYXJlIGFkZGVkLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSB2YWxpZCBmbGFnIGlzIGNoZWNrZWQuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdGNwX21tYXBgIGFuZCBgZmluZF90Y3Bfdm1hYCBhcmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBgbmV0L2lwdjQvdGNwLmNgLiBJdCdzIHRpbWUgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXQncyBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBUQ1AgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6MjAuNjM4MTUwMjg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIxMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfdGNwX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yMjM5PXN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI2NC1cXG5uZXQvaXB2NC90Y3AuYzoyMjY1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5uZXQvaXB2NC90Y3AuYy0yMjY2LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyOTE9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMzMxLVxcbm5ldC9pcHY0L3RjcC5jOjIzMzI6XFx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXFx1MDAzZW1tLCBhZGRyZXNzLCBcXHUwMDI2bW1hcF9sb2NrZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTIzMzMtXFx0aWYgKCF2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjIwLjY4MzM3NjYwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzcwMDUyNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgbmV0L2lwdjQvdGNwLmNgIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBhcm91bmQgbGluZSAyMjkxLiBNeSBhaW0gaGVyZSBpcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgaXMgaW1wbGVtZW50ZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBvcHRpbWl6YXRpb25zLCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzLi4uIGFsbCB0aGUganVpY3kgZGV0YWlscyBiZWhpbmQgdGhlIHNjZW5lcy4gWmVyby1jb3B5IGlzIGEgcGVyZm9ybWFuY2UgZ2FtZS1jaGFuZ2VyLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBUQ1AgaW1wbGVtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IG5ldHdvcmsgcHJvZ3JhbW1pbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyBkYXRhIGJ1ZmZlcnMgYXJlIG1hbmFnZWQsIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIHRoZSByb2xlIG9mIERNQSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbXBsZXhpdGllcyBpbiB0aGUgc3luY2hyb25pemF0aW9uLiBUaGlzIHdpbGwgdGVsbCBtZSBhIGxvdCBtb3JlIHRoYW4gYW55IGFic3RyYWN0IGRlc2NyaXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6NDEuMDUzNDMyMTQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODU6XFx0XFx0fVxcbjIyODY6XFx0XFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcXG4yMjg3OlxcdFxcdHJldHVybiB2bWE7XFxuMjI4ODpcXHR9XFxuMjI4OTpcXHRcXG4yMjkwOlxcdCNkZWZpbmUgVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRSAzMlxcbjIyOTE6XFx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuMjI5MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbjIyOTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4yMjk0OlxcdHtcXG4yMjk1OlxcdFxcdHUzMiBsZW5ndGggPSAwLCBvZmZzZXQsIHZtYV9sZW4sIGF2YWlsX2xlbiwgY29weWxlbiA9IDA7XFxuMjI5NjpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl6Yy1cXHUwMDNlYWRkcmVzcztcXG4yMjk3OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlc1tUQ1BfWkVST0NPUFlfUEFHRV9CQVRDSF9TSVpFXTtcXG4yMjk4OlxcdFxcdHMzMiBjb3B5YnVmX2xlbiA9IHpjLVxcdTAwM2Vjb3B5YnVmX2xlbjtcXG4yMjk5OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbjIzMDA6XFx0XFx0Y29uc3Qgc2tiX2ZyYWdfdCAqZnJhZ3MgPSBOVUxMO1xcbjIzMDE6XFx0XFx0dW5zaWduZWQgaW50IHBhZ2VzX3RvX21hcCA9IDA7XFxuMjMwMjpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4yMzAzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbjIzMDQ6XFx0XFx0dTMyIHNlcSA9IHRwLVxcdTAwM2Vjb3BpZWRfc2VxO1xcbjIzMDU6XFx0XFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcDtcXG4yMzA2OlxcdFxcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcXG4yMzA3OlxcdFxcdGJvb2wgbW1hcF9sb2NrZWQ7XFxuMjMwODpcXHRcXHRpbnQgcmV0O1xcbjIzMDk6XFx0XFxuMjMxMDpcXHRcXHR6Yy1cXHUwMDNlY29weWJ1Zl9sZW4gPSAwO1xcbjIzMTE6XFx0XFx0emMtXFx1MDAzZW1zZ19mbGFncyA9IDA7XFxuMjMxMjpcXHRcXG4yMzEzOlxcdFxcdGlmIChhZGRyZXNzIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpIHx8IGFkZHJlc3MgIT0gemMtXFx1MDAzZWFkZHJlc3MpXFxuMjMxNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzE1OlxcdFxcbjIzMTY6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKVxcbjIzMTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4yMzE4OlxcdFxcbjIzMTk6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbjIzMjA6XFx0XFxuMjMyMTpcXHRcXHRpZiAoaW5xIFxcdTAwMjZcXHUwMDI2IGlucSBcXHUwMDNjPSBjb3B5YnVmX2xlbilcXG4yMzIyOlxcdFxcdFxcdHJldHVybiByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc2ssIHpjLCBpbnEsIHRzcyk7XFxuMjMyMzpcXHRcXG4yMzI0OlxcdFxcdGlmIChpbnEgXFx1MDAzYyBQQUdFX1NJWkUpIHtcXG4yMzI1OlxcdFxcdFxcdHpjLVxcdTAwM2VsZW5ndGggPSAwO1xcbjIzMjY6XFx0XFx0XFx0emMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50ID0gaW5xO1xcbjIzMjc6XFx0XFx0XFx0aWYgKCFpbnEgXFx1MDAyNlxcdTAwMjYgc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxcbjIzMjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMjMyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMzMwOlxcdFxcdH1cXG4yMzMxOlxcdFxcbjIzMzI6XFx0XFx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXFx1MDAzZW1tLCBhZGRyZXNzLCBcXHUwMDI2bW1hcF9sb2NrZWQpO1xcbjIzMzM6XFx0XFx0aWYgKCF2bWEpXFxuMjMzNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzM1OlxcdFxcbjIzMzY6XFx0XFx0dm1hX2xlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpjLVxcdTAwM2VsZW5ndGgsIHZtYS1cXHUwMDNldm1fZW5kIC0gYWRkcmVzcyk7XFxuMjMzNzpcXHRcXHRhdmFpbF9sZW4gPSBtaW5fdCh1MzIsIHZtYV9sZW4sIGlucSk7XFxuMjMzODpcXHRcXHR0b3RhbF9ieXRlc190b19tYXAgPSBhdmFpbF9sZW4gXFx1MDAyNiB+KFBBR0VfU0laRSAtIDEpO1xcbjIzMzk6XFx0XFx0aWYgKHRvdGFsX2J5dGVzX3RvX21hcCkge1xcbjIzNDA6XFx0XFx0XFx0aWYgKCEoemMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENQX1JFQ0VJVkVfWkVST0NPUFlfRkxBR19UTEJfQ0xFQU5fSElOVCkpXFxuMjM0MTpcXHRcXHRcXHRcXHR6YXBfdm1hX3JhbmdlKHZtYSwgYWRkcmVzcywgdG90YWxfYnl0ZXNfdG9fbWFwKTtcXG4yMzQyOlxcdFxcdFxcdHpjLVxcdTAwM2VsZW5ndGggPSB0b3RhbF9ieXRlc190b19tYXA7XFxuMjM0MzpcXHRcXHRcXHR6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgPSAwO1xcbjIzNDQ6XFx0XFx0fSBlbHNlIHtcXG4yMzQ1OlxcdFxcdFxcdHpjLVxcdTAwM2VsZW5ndGggPSBhdmFpbF9sZW47XFxuMjM0NjpcXHRcXHRcXHR6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgPSBhdmFpbF9sZW47XFxuMjM0NzpcXHRcXHR9XFxuMjM0ODpcXHRcXHRyZXQgPSAwO1xcbjIzNDk6XFx0XFx0d2hpbGUgKGxlbmd0aCArIFBBR0VfU0laRSBcXHUwMDNjPSB6Yy1cXHUwMDNlbGVuZ3RoKSB7XFxuMjM1MDpcXHRcXHRcXHRpbnQgbWFwcGFibGVfb2Zmc2V0O1xcbjIzNTE6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMjM1MjpcXHRcXG4yMzUzOlxcdFxcdFxcdGlmICh6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgXFx1MDAzYyBQQUdFX1NJWkUpIHtcXG4yMzU0OlxcdFxcdFxcdFxcdHUzMiBvZmZzZXRfZnJhZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6NDEuMDUzNjQ4NDkxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM3MDU0OTU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVENQIFplcm9jb3B5IFJlY2VpdmUqKlxuXG5Pa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGB0Y3BfbW1hcGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gc29tZW9uZSBjYWxscyBgbW1hcChmZClgIG9uIGEgVENQIHNvY2tldC4gVGhhdCBtYWtlcyBzZW5zZSwgY29ubmVjdHMgdGhlIHN5c3RlbSBjYWxsIHRvIHRoZSByaWdodCBrZXJuZWwgZnVuY3Rpb24uIEFuZCB0aGUgY29udGV4dCBpbW1lZGlhdGVseSBjbGFyaWZpZXMgdGhhdCB0aGlzIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gVENQIHplcm9jb3B5IHJlY2VpdmUuIEknbSByZWNhbGxpbmcgbm93IHRoYXQgdGhpcyAwLWNvcHkgcmVjZWl2ZSBmZWF0dXJlIGlzIGVuYWJsZWQgdmlhIGBnZXRzb2Nrb3B0KC4uLiwgU09MX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLilgLiBUaGF0IHRyaWdnZXJzIGB0Y3BfbW1hcGAsIHJpZ2h0PyBHb3QgaXQuIE5vdyBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHNvY2tldCBtZW1vcnkgYWxsb2NhdGlvbiB3b3JrcyBhdCBhIGxvd2VyIGxldmVsLiBMZXQgbWUgY2hlY2sgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgaW4gYG5ldC9jb3JlL3NvY2suY2AgdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgYWN0dWFsbHkgZ2V0cyB0cmFuc2ZlcnJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjQzLjQyNDIwMDQzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM3MDpcXHRcXG4zMzcxOlxcdFxcdC8qIEd1YXJhbnRlZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHVuZGVyIHByZXNzdXJlIChlaXRoZXIgZ2xvYmFsXFxuMzM3MjpcXHRcXHQgKiBvciBtZW1jZykgdG8gbWFrZSBzdXJlIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiBSRkMgNzMyMyAoVENQXFxuMzM3MzpcXHRcXHQgKiBFeHRlbnNpb25zIGZvciBIaWdoIFBlcmZvcm1hbmNlKSB3b3JrIHByb3Blcmx5LlxcbjMzNzQ6XFx0XFx0ICpcXG4zMzc1OlxcdFxcdCAqIFRoaXMgcnVsZSBkb2VzIE5PVCBzdGFuZCB3aGVuIGV4Y2VlZHMgZ2xvYmFsIG9yIG1lbWNnJ3MgaGFyZFxcbjMzNzY6XFx0XFx0ICogbGltaXQsIG9yIGVsc2UgYSBEb1MgYXR0YWNrIGNhbiBiZSB0YWtlbiBwbGFjZSBieSBzcGF3bmluZ1xcbjMzNzc6XFx0XFx0ICogbG90cyBvZiBzb2NrZXRzIHdob3NlIHVzYWdlIGFyZSB1bmRlciBtaW5pbXVtIGJ1ZmZlciBzaXplLlxcbjMzNzg6XFx0XFx0ICovXFxuMzM3OTpcXHRcXHRpZiAoa2luZCA9PSBTS19NRU1fUkVDVikge1xcbjMzODA6XFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgXFx1MDAzYyBza19nZXRfcm1lbTAoc2ssIHByb3QpKVxcbjMzODE6XFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuMzM4MjpcXHRcXG4zMzgzOlxcdFxcdH0gZWxzZSBpZiAoa2luZCA9PSBTS19NRU1fU0VORCkge1xcbjMzODQ6XFx0XFx0XFx0aW50IHdtZW0wID0gc2tfZ2V0X3dtZW0wKHNrLCBwcm90KTtcXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuMzM4NzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3dtZW1fcXVldWVkIFxcdTAwM2Mgd21lbTApXFxuMzM4ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzg5OlxcdFxcdFxcdH0gZWxzZSBpZiAocmVmY291bnRfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3dtZW1fYWxsb2MpIFxcdTAwM2Mgd21lbTApIHtcXG4zMzkwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjMzOTE6XFx0XFx0XFx0fVxcbjMzOTI6XFx0XFx0fVxcbjMzOTM6XFx0XFxuMzM5NDpcXHRcXHRpZiAoc2tfaGFzX21lbW9yeV9wcmVzc3VyZShzaykpIHtcXG4zMzk1OlxcdFxcdFxcdHU2NCBhbGxvYztcXG4zMzk2OlxcdFxcbjMzOTc6XFx0XFx0XFx0LyogVGhlIGZvbGxvd2luZyAnYXZlcmFnZScgaGV1cmlzdGljIGlzIHdpdGhpbiB0aGVcXG4zMzk4OlxcdFxcdFxcdCAqIHNjb3BlIG9mIGdsb2JhbCBhY2NvdW50aW5nLCBzbyBpdCBvbmx5IG1ha2VzXFxuMzM5OTpcXHRcXHRcXHQgKiBzZW5zZSBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZS5cXG4zNDAwOlxcdFxcdFxcdCAqL1xcbjM0MDE6XFx0XFx0XFx0aWYgKCFza191bmRlcl9nbG9iYWxfbWVtb3J5X3ByZXNzdXJlKHNrKSlcXG4zNDAyOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjM0MDM6XFx0XFxuMzQwNDpcXHRcXHRcXHQvKiBUcnkgdG8gYmUgZmFpciBhbW9uZyBhbGwgdGhlIHNvY2tldHMgdW5kZXIgZ2xvYmFsXFxuMzQwNTpcXHRcXHRcXHQgKiBwcmVzc3VyZSBieSBhbGxvd2luZyB0aGUgb25lcyB0aGF0IGJlbG93IGF2ZXJhZ2VcXG4zNDA2OlxcdFxcdFxcdCAqIHVzYWdlIHRvIHJhaXNlLlxcbjM0MDc6XFx0XFx0XFx0ICovXFxuMzQwODpcXHRcXHRcXHRhbGxvYyA9IHNrX3NvY2tldHNfYWxsb2NhdGVkX3JlYWRfcG9zaXRpdmUoc2spO1xcbjM0MDk6XFx0XFx0XFx0aWYgKHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMikgXFx1MDAzZSBhbGxvYyAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjQzLjQyNDM5MDYyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNDAzNjk4NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlplcm8tQ29weSBUQ1AgbW1hcDogUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyBhbmQgRnV6emluZyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSd2ZSBnb3Qgc29tZSBjb25jZXJucyBhYm91dCBob3cgemVyby1jb3B5IGlzIGJlaW5nIGltcGxlbWVudGVkIGZvciBUQ1Agc29ja2V0cy4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgbG9naWMgaW4gYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgY2hlY2tlZCBlaXRoZXIgcmVjZWl2ZSBvciBzZW5kIG1lbW9yeSBsaW1pdHMgYmFzZWQgb24gdGhlIHNvY2tldCdzIHJlY2VpdmUgb3Igc2VuZCBmbGFncy4gQnV0IG5vdywgd2l0aCBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCBpdCBieXBhc3NlcyB0aG9zZSBjaGVja3MgZW50aXJlbHkhIFRoYXQgZmVlbHMuLi4gcmlza3kuXG5cblRoZW4sIHRoZXJlJ3MgYHRjcF9tbWFwYC4gSXQgc2V0cyB0aGVzZSBgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTUlYRURNQVBgIGZsYWdzIG9uIHRoZSBWTUEsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB6ZXJvLWNvcHkuIFRoZSBjb2RlIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBwYWdlcywgYWxsb2NhdGVzIGEgYHpjX3ZtYWAgc3RydWN0dXJlLCBhbmQgY2hhcmdlcyBzb2NrZXQgbWVtb3J5IHVzaW5nIGB0Y3BfemNfbWVtX2NoYXJnZWAuIFRoYXQgbXVjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBWTUEncyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tYCkgYW5kIHRoZSBzb2NrZXQgKGBza2ApLiAgV2hlbiB0aGUgVk1BIGlzIGNsb3NlZCBieSB0aGUgdXNlciwgdGhlIHJlZmNvdW50IGdldHMgZGVjcmVtZW50ZWQsIHRoZSBtZW1vcnkgdW5jaGFyZ2VkLCBhbmQgdGhlbiBhbGwgdGhlIG1lbW9yeSB1c2VkIGlzIGZyZWVkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgaWYgdGhlIFZNQSBpcyBzcGxpdCwgbGlrZSBieSBgbXVubWFwYCBvciBgbXByb3RlY3RgPyAgYHRjcF96Y192bWFfb3BlbmAgaXMgY2FsbGVkIHRvIGluY3JlbWVudCB0aGUgcmVmY291bnQgd2hlbiB0aGUgVk1BIGlzIHNwbGl0L2Nsb25lZC4gIEhlcmUncyB0aGUgcHJvYmxlbTogVGhlIGluaXRpYWwgY2hhcmdlIGhhcHBlbnMgb25seSBvbmNlIGluIGB0Y3BfbW1hcGAuIEhvd2V2ZXIsIGlmIEkgc3BsaXQgdGhlIFZNQSBpbiBhbnkgd2F5IGJ5IGBtdW5tYXBgLCBgbXByb3RlY3RgLCBvciBldmVuIGBtYWR2aXNlYCwgdGhlbiBib3RoIFZNQSdzIHBvaW50IHRvIHRoZSBzYW1lIGB6Y192bWFgIGFuZCB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgZm9yIGJvdGguICBJZiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIFZNQSBpcyBjbG9zZWQsIHRoZSByZWZjb3VudCBpcyBkZWNyZW1lbnRlZC4gVGhlbiB0aGUgZmluYWwgY2xvc2Ugb2YgdGhlIG9yaWdpbmFsIFZNQSB1bmNoYXJnZXMgdGhlIG9yaWdpbmFsIGFtb3VudCBvZiBwYWdlcyEgVGhpcyBtZWFucyBtZW1vcnkgY291bGQgYmUgb3ZlcmNoYXJnZWQuXG5cbldhaXQgYSBzZWNvbmQgLSB3aGF0IGlmIEkgYG11bm1hcGAgKnBhcnQqIG9mIGl0PyBJZiBJIHVubWFwIHRoZSBtaWRkbGUgb2YgdGhlIFZNQSwgdGhlbiB0aGUgVk1BIHNwbGl0cyBpbnRvIHRocmVlIHBhcnRzLiBJICp0aGluayogdGhlIFZNQSBvcGVyYXRpb25zIGFyZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBvcGVuIGFuZCBjbG9zaW5nIG9mIGVhY2ggbmV3IFZNQS4gVGhpcyBpcyB2ZXJ5IGNvbXBsaWNhdGVkLCBhbmQgSSdtIGxvc2luZyB0cmFjayBvZiByZWZjb3VudHMhICBXaGF0J3MgaGFwcGVuaW5nIGlmIGB6Y192bWEtXHUwMDNlcmVmY250YCBkcm9wcz8gIFRoaXMgaXMgYWxsIGdldHRpbmcgdmVyeSBtZXNzeSFcblxuQWxzbywgaXQgbG9va3MgbGlrZSBgVk1fV1JJVEVgIGFuZCBgVk1fRVhFQ2AgYXJlIGV4cGxpY2l0bHkgcmVqZWN0ZWQsIHdoaWNoIGlzIGdvb2QuXG5cbkJ1dCB3YWl0LCB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgdGhlIGNvcmUgTU0gKG1lbW9yeSBtYW5hZ2VtZW50KSBhbmQgbmV0d29ya2luZyBzdGFjayEgIFRoaXMgaXMgaW1wb3J0YW50LiAgQW5kIHRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gIEkgY2FuIGRlZmluaXRlbHkgcmVhY2ggdGhpcyBjb2RlIGZyb20gdXNlcnNwYWNlIHdpdGggc3RhbmRhcmQgc3lzY2FsbHMsIGxpa2UgYHNvY2tldGAsIGBtbWFwYCwgYG11bm1hcGAsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYCwgYW5kIGBnZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfWkVST0NPUFlfUkVDRUlWRWAuICBUaGlzIGlzIGFsbCBlYXNpbHkgYWNjZXNzaWJsZSBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIHN5emthbGxlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IHNwZWNpYWwgY29uZmlncyBhcmUgbmVlZGVkLiBJJ2xsIGNoZWNrIGBDT05GSUdfTU1VYCBhbmQgdGhlIFRDUCBjb25maWdzLiAgT24geDg2XzY0LCB0aGUgTU1VIGlzIGFsd2F5cyBvbiwgc28gdGhhdCdzIGdvb2QuICBJIGFsc28gbmVlZCB0byBzZWFyY2ggdGhlIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnQgYnVncy4gSSBzdXNwZWN0IHRoaXMgaXMgd29ydGggZnV6emluZyBoZWF2aWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjU1LjgyODA5MjQyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTUzMTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfemNfdm1hXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTE4NTg9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xODYzLSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjQvdGNwLmM6MTg2NDpzdHJ1Y3QgdGNwX3pjX3ZtYSB7XFxubmV0L2lwdjQvdGNwLmMtMTg2NS1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTg4Nj1zdGF0aWMgaW50IHRjcF96Y19tZW1fY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5MDctXFxubmV0L2lwdjQvdGNwLmM6MTkwODpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubmV0L2lwdjQvdGNwLmMtMTkwOS17XFxubmV0L2lwdjQvdGNwLmM6MTkxMDpcXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxubmV0L2lwdjQvdGNwLmMtMTkxMS1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5MTQtXFxubmV0L2lwdjQvdGNwLmM6MTkxNTpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm5ldC9pcHY0L3RjcC5jLTE5MTYte1xcbm5ldC9pcHY0L3RjcC5jOjE5MTc6XFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbm5ldC9pcHY0L3RjcC5jLTE5MTgtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdGNwX3ZtX29wcyA9IHtcXG5uZXQvaXB2NC90Y3AuYzoxOTI4OlxcdC5vcGVuID0gdGNwX3pjX3ZtYV9vcGVuLFxcbm5ldC9pcHY0L3RjcC5jOjE5Mjk6XFx0LmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSxcXG5uZXQvaXB2NC90Y3AuYy0xOTMwLX07XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xOTMyPWludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5MzQte1xcbm5ldC9pcHY0L3RjcC5jOjE5MzU6XFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYTtcXG5uZXQvaXB2NC90Y3AuYy0xOTM2LVxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTY3LVxcbm5ldC9pcHY0L3RjcC5jOjE5Njg6c3RhdGljIGJvb2wgdGNwX3pjX3ZtYV92YWxpZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5uZXQvaXB2NC90Y3AuYy0xOTY5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubmV0L2lwdjQvdGNwLmMtMTk3MC17XFxubmV0L2lwdjQvdGNwLmM6MTk3MTpcXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxubmV0L2lwdjQvdGNwLmMtMTk3Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyNjU9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI3MS1cXHRpZiAodm1hKSB7XFxubmV0L2lwdjQvdGNwLmM6MjI3MjpcXHRcXHRpZiAoIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcXG5uZXQvaXB2NC90Y3AuYy0yMjczLVxcdFxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI4MS1cXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcXG5uZXQvaXB2NC90Y3AuYzoyMjgyOlxcdGlmICghdm1hIHx8ICF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XFxubmV0L2lwdjQvdGNwLmMtMjI4My1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6NTcuNTk3NjMwODcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzOTU3Njg4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTdGFjayBQZXJmb3JtYW5jZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbmV0d29yayBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQ/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGFyZWFzIG1vc3QgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBkYXRhIHRyYW5zZmVyIGFuZCBoYW5kbGluZyDigJMgc28sIGB0Y3BfbW1hcGAgY2FsbGVycyBhcmUgYSBwcmltZSBzdXNwZWN0LiBNZW1vcnkgbWFwcGluZyB3aXRoaW4gVENQIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQncyBiZWluZyB1c2VkIGlzIGtleS4gQWx0ZXJuYXRpdmVseSwgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0LCB0aGUgYGluZXRfc3RyZWFtX29wc2Agc3RydWN0dXJlLiBUaGlzIGNvbnRhaW5zIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgZGVmaW5lIHRoZSBUQ1Agc29ja2V0IG9wZXJhdGlvbnMgYXQgYSB2ZXJ5IGxvdyBsZXZlbC4gVGhleSBoYW5kbGUgc2VuZCwgcmVjZWl2ZSwgYW5kIG90aGVyIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbGVycyBvZiB0aG9zZSBhcyB3ZWxsLiBFaXRoZXIgb25lIG9mIHRoZXNlIGFyZWFzIGlzIGxpa2VseSB0byB5aWVsZCBjbHVlcyB0byB0aGUgbmF0dXJlIG9mIGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMgd2UncmUgc2VlaW5nLCBzbyBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggYm90aCBvZiB0aGVzZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gZ2V0IHNvbWUgaW5zaWdodHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjM1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6MDMuOTkzNDAxNjk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5Mzc2OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9tbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTUyOT12b2lkIHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtNTMwLSNpZmRlZiBDT05GSUdfTU1VXFxuaW5jbHVkZS9uZXQvdGNwLmg6NTMxOmludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5pbmNsdWRlL25ldC90Y3AuaC01MzItXFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTA2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDc4LSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjQvYWZfaW5ldC5jOjEwNzk6XFx0Lm1tYXBcXHRcXHQgICA9IHRjcF9tbWFwLFxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDgwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTMxLVxcbm5ldC9pcHY0L3RjcC5jOjE5MzI6aW50IHRjcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC9pcHY0L3RjcC5jLTE5MzMtXFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjYwPWNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjc4LSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2Nzk6XFx0Lm1tYXBcXHRcXHQgICA9IHRjcF9tbWFwLFxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjgwLSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmU9NDg9dGNwX2lucVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlOjQ5OnRjcF9tbWFwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUtNTAtdGNwX3BvcnRfc2hhcmVcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZT0xNDQ9VEVTVF9HRU5fRklMRVMgOj0gXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTE3MC1cXHR0Y3BfaW5xIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU6MTcxOlxcdHRjcF9tbWFwIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUtMTcyLVxcdHRmbyBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU9MjM5PSQoT1VUUFVUKS9yZXVzZXBvcnRfYnBmX251bWE6IExETElCUyArPSAtbG51bWFcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU6MjQwOiQoT1VUUFVUKS90Y3BfbW1hcDogTERMSUJTICs9IC1scHRocmVhZCAtbGNyeXB0b1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZS0yNDEtJChPVVRQVVQpL3RjcF9pbnE6IExETElCUyArPSAtbHB0aHJlYWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTE0LSAqICBpZmNvbmZpZyBsbyBtdHUgNjE1MTIgICMgMTUqNDA5NiArIDQwIChpcHY2IGhlYWRlcikgKyAzMiAoVENQIHdpdGggVFMgb3B0aW9uIGhlYWRlcilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoxNTogKiAgdGNwX21tYXAgLXMgLXogXFx1MDAyNlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjE2OiAqICB0Y3BfbW1hcCAtSCA6OjEgLXpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0xNy0gKlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMTktICogICAgICAoNDA5NiA6IHBhZ2Ugc2l6ZSBvbiB4ODYsIDEyOiBUQ1AgVFMgb3B0aW9uIGxlbmd0aClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoyMDogKiAgdGNwX21tYXAgLXMgLXogLU0gJCgoNDA5NisxMikpIFxcdTAwMjZcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoyMTogKiAgdGNwX21tYXAgLUggOjoxIC16IC1NICQoKDQwOTYrMTIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTIyLSAqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yNS0gKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjI2OiAqICQgLi90Y3BfbW1hcCAtcyBcXHUwMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXRob3V0IG1tYXAoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjI3OiAqICQgZm9yIGkgaW4gezEuLjR9OyBkbyAuL3RjcF9tbWFwIC1IIDo6MSAteiA7IGRvbmVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yOC0gKiByZWNlaXZlZCAzMjc2OCBNQiAoMCAlIG1tYXAnZWQpIGluIDE0LjExNTcgcywgMTkuNDczMiBHYml0XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0zNS0gKiAgIGNwdSB1c2FnZSB1c2VyOjAuMDM2IHN5czo4LjE5MywgMjUxLjEyOSB1c2VjIHBlciBNQiwgNjU1MzAgYy1zd2l0Y2hlc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM2OiAqICQga2lsbCAlMSAgICMga2lsbCB0Y3BfbW1hcCBzZXJ2ZXJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0zNy0gKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM4OiAqICQgLi90Y3BfbW1hcCAtcyAteiBcXHUwMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXRoIG1tYXAoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM5OiAqICQgZm9yIGkgaW4gezEuLjR9OyBkbyAuL3RjcF9tbWFwIC1IIDo6MSAteiA7IGRvbmVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy00MC0gKiByZWNlaXZlZCAzMjc2OCBNQiAoOTkuOTkzOSAlIG1tYXAnZWQpIGluIDYuNzM3OTIgcywgNDAuNzk1NiBHYml0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjA1Ljc1Mjc4NDI5N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTk4Nzc2MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBUQ1AgTU1BUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0Y3BfbW1hcGAgYW5kIHdoZXJlIGl0J3MgaW1wbGVtZW50ZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIHRpZWQgdG8gYGluZXRfc3RyZWFtX29wc2AgYW5kIGBpbmV0Nl9zdHJlYW1fb3BzYCwgYnV0IG9ubHkgd2hlbiBgQ09ORklHX01NVWAgaXMgYWN0aXZlLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB2ZXJpZnkgYENPTkZJR19JTkVUYC4gSXQncyBmb3VuZGF0aW9uYWwsIHNvIEknbSBleHBlY3RpbmcgaXQgdG8gYmUgc2V0LiBMb29raW5nIGludG8gYG5ldC9pcHY0L0tjb25maWdgLCB5ZXAsIGBDT05GSUdfSU5FVGAgaXMgdGhlIGNvcmUgVENQL0lQIGNvbmZpZ3VyYXRpb24uIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBgQ09ORklHX01NVWAgaXMgcHJldHR5IG11Y2ggc3RhbmRhcmQgb24gYW1kNjQsIGFuZCBgQ09ORklHX0lORVQ9eWAgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3QgbmV0d29ya2luZyBzZXR1cHMuIEl0IHNlZW1zIGZhaXJseSBzdHJhaWdodGZvcndhcmQuXG5cblRvIGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gY29uc3RyYWludHMsIEkgc2hvdWxkIHNwZWNpZmljYWxseSBjaGVjayBmb3IgY29uZmlndXJhdGlvbnMgcmVsYXRpbmcgdG8gZWl0aGVyIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgb3IgYHRjcF9tbWFwYCBpdHNlbGYuIEl04oCZcyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuRmluYWxseSwgSSdsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgYG5ldC9pcHY0L3RjcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRjcF9tbWFwYCBkZWZpbml0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gaG93IGl0J3MgYWN0dWFsbHkgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6MDguNzUxNTYzNDA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODU1OlxcdFxcdHJldHVybiAwO1xcbjE4NTY6XFx0fVxcbjE4NTc6XFx0XFxuMTg1ODpcXHR2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4xODU5OlxcdHtcXG4xODYwOlxcdFxcdHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHZhbCkpO1xcbjE4NjE6XFx0fVxcbjE4NjI6XFx0XFxuMTg2MzpcXHQjaWZkZWYgQ09ORklHX01NVVxcbjE4NjQ6XFx0c3RydWN0IHRjcF96Y192bWEge1xcbjE4NjU6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4xODY2OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjE4Njc6XFx0XFx0cmVmY291bnRfdCByZWZjbnQ7XFxuMTg2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMTg2OTpcXHR9O1xcbjE4NzA6XFx0XFxuMTg3MTpcXHQvKiBLZWVwIHRoZSBzaXplIGFyZ3VtZW50IHRvIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCgpIHdpdGhpbiBpbnQuICovXFxuMTg3MjpcXHQjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4xODczOlxcdFxcbjE4NzQ6XFx0c3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuMTg3NTpcXHR7XFxuMTg3NjpcXHRcXHR1bnNpZ25lZCBpbnQgY2h1bms7XFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdHdoaWxlIChucl9wYWdlcykge1xcbjE4Nzk6XFx0XFx0XFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcXG4xODgwOlxcdFxcdFxcdFxcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xcbjE4ODE6XFx0XFx0XFx0X19za19tZW1fcmVkdWNlX2FsbG9jYXRlZChzaywgY2h1bmspO1xcbjE4ODI6XFx0XFx0XFx0bnJfcGFnZXMgLT0gY2h1bms7XFxuMTg4MzpcXHRcXHR9XFxuMTg4NDpcXHR9XFxuMTg4NTpcXHRcXG4xODg2OlxcdHN0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbjE4ODc6XFx0e1xcbjE4ODg6XFx0XFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkID0gMDtcXG4xODg5OlxcdFxcdHVuc2lnbmVkIGludCBjaHVuaztcXG4xODkwOlxcdFxcdGludCByZXQ7XFxuMTg5MTpcXHRcXG4xODkyOlxcdFxcdHdoaWxlIChucl9wYWdlcykge1xcbjE4OTM6XFx0XFx0XFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcXG4xODk0OlxcdFxcdFxcdFxcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzowOC43NTE4MDA3NjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE4NDQ5MjM0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVENQIFplcm8tQ29weSBSZWNlaXZlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9pcHY0L3RjcC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBmaW5kX3RjcF92bWFgIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiAgSSBrbm93IGBmaW5kX3RjcF92bWFgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB0aGF0IGhlbHBzIGxvY2F0ZSB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGZpdHMgaW50byB0aGUgcGljdHVyZSwgYW5kIGVzcGVjaWFsbHkgaG93IGl0IGlzIGNhbGxlZC4gVGhhdCB3aWxsIHJldmVhbCB0aGUgZmxvdyBvZiBob3cgdGhpcyB6ZXJvLWNvcHkgbWVjaGFuaXNtIHdvcmtzLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgZnVuY3Rpb24gY2FsbCBzZWFyY2guIEkgY2FuIGxvb2sgYXQgdGhlIGNhbGwgY2hhaW4gYW5kIHZlcmlmeSBpZiB0aGlzIGhhcyBiZWVuIHVwZGF0ZWQgcmVjZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzo0MC41OTY3MjcwNThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzk3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF96ZXJvY29weV9yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yMDMxPXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3AuYzoyMDMyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMDMzLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIwNzE9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjIwNzI6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsIGludCBpbnEsXFxubmV0L2lwdjQvdGNwLmMtMjA3My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMDYtXFxubmV0L2lwdjQvdGNwLmM6MjEwNzpzdGF0aWMgaW50IHRjcF9jb3B5X3N0cmFnZ2xlcl9kYXRhKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxubmV0L2lwdjQvdGNwLmMtMjEwOC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY29weWxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMzAtXFxubmV0L2lwdjQvdGNwLmM6MjEzMTpzdGF0aWMgaW50IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMTMyLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE1OD1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTYzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqc2VxLFxcbm5ldC9pcHY0L3RjcC5jOjIxNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMTY1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiB0b3RhbF9ieXRlc190b19tYXAsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMjA2PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyMTEtXFx0XFx0XFx0XFx0XFx0dTMyICpzZXEsXFxubmV0L2lwdjQvdGNwLmM6MjIxMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIyMTMtXFx0XFx0XFx0XFx0XFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyMzk9c3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwLmM6MjI0MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIyNDEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyNjU9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI5MC0jZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcXG5uZXQvaXB2NC90Y3AuYzoyMjkxOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjIyOTI6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMjkzLVxcdFxcdFxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NTc2PWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4NDgtXFx0XFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgdHNzO1xcbm5ldC9pcHY0L3RjcC5jOjQ4NDk6XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlIHpjID0ge307XFxubmV0L2lwdjQvdGNwLmMtNDg1MC1cXHRcXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg1NC1cXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L3RjcC5jOjQ4NTU6XFx0XFx0ICAgIGxlbiBcXHUwMDNjIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKSlcXG5uZXQvaXB2NC90Y3AuYy00ODU2LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg3Mi1cXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6NDg3MzpcXHRcXHRlcnIgPSB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzaywgXFx1MDAyNnpjLCBcXHUwMDI2dHNzKTtcXG5uZXQvaXB2NC90Y3AuYy00ODc0LVxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4NzYtXFx0XFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjQ4Nzc6XFx0XFx0aWYgKGxlbiBcXHUwMDNlPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIG1zZ19mbGFncykpXFxubmV0L2lwdjQvdGNwLmMtNDg3OC1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xcbm5ldC9pcHY0L3RjcC5jLTQ4NzktXFx0XFx0c3dpdGNoIChsZW4pIHtcXG5uZXQvaXB2NC90Y3AuYzo0ODgwOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpOlxcbm5ldC9pcHY0L3RjcC5jLTQ4ODEtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcXG5uZXQvaXB2NC90Y3AuYzo0ODgyOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbGxlbik6XFxubmV0L2lwdjQvdGNwLmM6NDg4MzpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2NvbnRyb2wpOlxcbm5ldC9pcHY0L3RjcC5jOjQ4ODQ6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGZsYWdzKTpcXG5uZXQvaXB2NC90Y3AuYzo0ODg1OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2xlbik6XFxubmV0L2lwdjQvdGNwLmM6NDg4NjpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgY29weWJ1Zl9hZGRyZXNzKTpcXG5uZXQvaXB2NC90Y3AuYzo0ODg3OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBlcnIpOlxcbm5ldC9pcHY0L3RjcC5jLTQ4ODgtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3Zfc2tfZXJyO1xcbm5ldC9pcHY0L3RjcC5jOjQ4ODk6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGlucSk6XFxubmV0L2lwdjQvdGNwLmMtNDg5MC1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9pbnE7XFxubmV0L2lwdjQvdGNwLmM6NDg5MTpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKTpcXG5uZXQvaXB2NC90Y3AuYy00ODkyLVxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjQwLjY0NzUzMDU0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTA1OTI0ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgWmVyb0NvcHkgUmVjZWl2ZSBmb3IgU3l6a2FsbGVyIEZvY3VzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVENQIFplcm9Db3B5IHJlY2VpdmUgcGF0Y2gsIGFuZCBteSBtYWluIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZnVuY3Rpb25zIHRvIHRhcmdldCB3aXRoIFN5emthbGxlcidzIEZvY3VzU3ltYm9scy4gSSBzZWUgdGhhdCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIGNhbGxlZCBmcm9tIGBkb190Y3BfZ2V0c29ja29wdGAsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIGVudHJ5IHBvaW50LiBBZGRpdGlvbmFsbHksIGB0Y3BfbW1hcGAgaXMgY2FsbGVkIGR1cmluZyBzb2NrZXQgbW1hcHBpbmcuIFRoaXMgbG9va3MgcHJvbWlzaW5nLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoOiBgdGNwX3pjX21lbV91bmNoYXJnZWAsIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGB0Y3BfemNfdm1hX29wZW5gLCBgdGNwX3pjX3ZtYV9jbG9zZWAsIGB0Y3BfbW1hcGAsIGB0Y3BfemNfdm1hX3ZhbGlkYCwgYW5kIGBmaW5kX3RjcF92bWFgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlc2Ugc3RhdGljIG9yIG5vbi1zdGF0aWM/ICBgdGNwX21tYXBgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBiZWNhdXNlIGl0J3Mgc3RvcmVkIGluIGBpbmV0X3N0cmVhbV9vcHNgIGFuZCBgaW5ldDZfc3RyZWFtX29wc2AuIGB0Y3BfemNfdm1hX29wZW5gIGFuZCBgdGNwX3pjX3ZtYV9jbG9zZWAgYXJlIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGluIGB0Y3Bfdm1fb3BzYCwgc28gdGhleSAqY2Fubm90KiBiZSBpbmxpbmVkLiBgdGNwX3pjX21lbV91bmNoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX2NoYXJnZWAgYXJlIGFsc28gc3RhdGljLiBgZmluZF90Y3Bfdm1hYCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhcmUgYWxzbyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgZG9fdGNwX2dldHNvY2tvcHRgLCB3aGljaCBpcyBub24tc3RhdGljLiBGaW5hbGx5LCBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCBpcyBub24tc3RhdGljLlxuXG5Ob3csIHRoZSBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55IG9mIHRoZXNlIGFyZSB0b28gZ2VuZXJpYy4gYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgKnNlZW1zKiBsaWtlIGl0J3MgY2FsbGVkIGR1cmluZyBhbG1vc3QgZXZlcnkgc29ja2V0IHNlbmQvcmVjZWl2ZSBhbGxvY2F0aW9uLiBUaGF0IG1lYW5zIGl0IG1pZ2h0IGRpbHV0ZSB0aGUgZm9jdXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgdGNwX21tYXBgLCBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBgdGNwX3pjX21lbV9jaGFyZ2VgLCBgdGNwX3pjX21lbV91bmNoYXJnZWAsIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFyZSB2ZXJ5IHNwZWNpZmljIHRvIFRDUCB6ZXJvY29weSBhbmQgbW1hcC4gIFRoZXkgc2VlbSBtdWNoIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRhcmdldGluZyBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLlxuXG5Mb29raW5nIGF0IHRoZSBGb2N1c1N5bWJvbCBndWlkZWxpbmVzLCBgdGNwX21tYXBgIGlzIGEgZGlyZWN0IEFQSSBlbnRyeXBvaW50IGZvciBtbWFwLiBgdGNwX3pjX3ZtYV9vcGVuYCBhbmQgYHRjcF96Y192bWFfY2xvc2VgIGFyZSB2bV9vcHMgY2FsbGJhY2tzLiBgdGNwX3pjX21lbV9jaGFyZ2VgIGFuZCBgdGNwX3pjX21lbV91bmNoYXJnZWAgaGFuZGxlIHRoZSBjb3JlIG1lbW9yeSBhY2NvdW50aW5nIGZvciB6ZXJvY29weSByZWNlaXZlLiBBbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpcyB0aGUgZ2V0c29ja29wdCBlbnRyeXBvaW50IHRoYXQgZmluZHMgdGhlIFRDUCBWTUEuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGB0Y3BfemNfbWVtX2NoYXJnZWAgaXMgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXRzIHNpemUgc3VnZ2VzdHMgaXQncyB1bmxpa2VseS4gQnV0IGV2ZW4gaWYgaXQgaXMsIGB0Y3BfbW1hcGAsIGB0Y3BfemNfdm1hX29wZW5gLCBgdGNwX3pjX3ZtYV9jbG9zZWAsIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scy5cblxuQ29uc2lkZXJpbmcgYWxsIHRoaXMsIGl0IHNlZW1zIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvdGNwLmNgIGFuZCBgbmV0L2NvcmUvc29jay5jYC4gSXQncyBtb2RpZnlpbmcgVENQIHNvY2tldCBtbWFwIGFuZCB6ZXJvY29weSBtZW1vcnkgYWNjb3VudGluZy4gVGhlcmUncyBuZXcgYHRjcF96Y192bWFgIHRyYWNraW5nIG1tLCBzaywgbnJfcGFnZXMgd2l0aCBgLm9wZW5gIGFuZCBgLmNsb3NlYCB2bV9vcHMsIGluY2x1ZGluZyBzb2NrIGFuZCBtbSBzdHJ1Y3RzLCBhcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgdG8gYHZtX2ZsYWdzYC4gIEl0J3MgYWxzbyBkaXJlY3RseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHN5c2NhbGxzLlxuXG5Gb3IgdGhlIHJlcXVpcmVkIGNvbmZpZywgSSdsbCBuZWVkIGBJTkVUYCBmb3IgVENQIGFuZCBgTU1VYCBkdWUgdG8gYCNpZmRlZiBDT05GSUdfTU1VYCBpbiBgbmV0L2lwdjQvdGNwLmNgLiAgSSdsbCBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3MgYXJlIG5lZWRlZCwgc3VjaCBhcyBUQ1AgemVyb2NvcHkgcngsIG9yIGB0Y3BfbW1hcGAuIExldCdzIGxvb2sgYXJvdW5kIGBuZXQvaXB2NC9LY29uZmlnYCBvciBncmVwIGZvciBgVENQX1pFUk9DT1BZX1JFQ0VJVkVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjU5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzo1MC4xNTM0NTg1OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE0MjUzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVENQX1pFUk9DT1BZX1JFQ0VJVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q9ODk4PUtlcm5lbCByZXNwb25zZSBjb250ZW50czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTkyMy1gYEVUSFRPT0xfQV9SSU5HU19UQ1BfREFUQV9TUExJVGBgIGluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgdXNhYmxlIHdpdGhcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdDo5MjQ6cGFnZS1mbGlwcGluZyBUQ1AgemVyby1jb3B5IHJlY2VpdmUgKGBgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSlgYCkuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtOTI1LUlmIGVuYWJsZWQgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIHRvIHBsYWNlIGZyYW1lIGhlYWRlcnMgYW5kIGRhdGEgaW50b1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lvdS16Y3J4LnJzdD0xMT10aGUgbmV0d29yayByZWNlaXZlIHBhdGgsIGFsbG93aW5nIHBhY2tldCBkYXRhIHRvIGJlIHJlY2VpdmVkIGRpcmVjdGx5IGludG9cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaW91LXpjcngucnN0OjEyOnVzZXJzcGFjZSBtZW1vcnkuIFRoaXMgZmVhdHVyZSBpcyBkaWZmZXJlbnQgdG8gVENQX1pFUk9DT1BZX1JFQ0VJVkUgaW4gdGhhdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pb3UtemNyeC5yc3QtMTMtdGhlcmUgYXJlIG5vIHN0cmljdCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZCBubyBuZWVkIHRvIG1tYXAoKS9tdW5tYXAoKS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaD03ND1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjctI2RlZmluZSBUQ1BfRkFTVE9QRU5fTk9fQ09PS0lFXFx0MzRcXHQvKiBFbmFibGUgVEZPIHdpdGhvdXQgYSBURk8gY29va2llICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjEyODojZGVmaW5lIFRDUF9aRVJPQ09QWV9SRUNFSVZFXFx0MzVcXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTI5LSNkZWZpbmUgVENQX0lOUVxcdFxcdFxcdDM2XFx0LyogTm90aWZ5IGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGFzIGEgY21zZyBvbiByZWFkICovXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg9NTAwPXN0cnVjdCB0Y3BfYW9fcmVwYWlyIHsgLyoge3MsZ31ldHNvY2tvcHQoVENQX0FPX1JFUEFJUikgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC01MDYtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjUwNzovKiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLikgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtNTA4LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDU3Nj1pbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00ODQ2LSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjQvdGNwLmM6NDg0NzpcXHRjYXNlIFRDUF9aRVJPQ09QWV9SRUNFSVZFOiB7XFxubmV0L2lwdjQvdGNwLmMtNDg0OC1cXHRcXHRzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCB0c3M7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00OTUxPWJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDk1My1cXHQvKiBUQ1AgZG9fdGNwX2dldHNvY2tvcHQgaGFzIG9wdGltaXplZCBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uXFxubmV0L2lwdjQvdGNwLmM6NDk1NDpcXHQgKiB0byBhdm9pZCBleHRyYSBzb2NrZXQgbG9jayBmb3IgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXFxubmV0L2lwdjQvdGNwLmMtNDk1NS1cXHQgKi9cXG5uZXQvaXB2NC90Y3AuYzo0OTU2OlxcdGlmIChsZXZlbCA9PSBTT0xfVENQIFxcdTAwMjZcXHUwMDI2IG9wdG5hbWUgPT0gVENQX1pFUk9DT1BZX1JFQ0VJVkUpXFxubmV0L2lwdjQvdGNwLmMtNDk1Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaD03Mj1lbnVtIHsgXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTI0LSNkZWZpbmUgVENQX0ZBU1RPUEVOX05PX0NPT0tJRVxcdDM0XFx0LyogRW5hYmxlIFRGTyB3aXRob3V0IGEgVEZPIGNvb2tpZSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaDoxMjU6I2RlZmluZSBUQ1BfWkVST0NPUFlfUkVDRUlWRVxcdDM1XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyNi0jZGVmaW5lIFRDUF9JTlFcXHRcXHRcXHQzNlxcdC8qIE5vdGlmeSBieXRlcyBhdmFpbGFibGUgdG8gcmVhZCBhcyBhIGNtc2cgb24gcmVhZCAqL1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTMzNj1zdHJ1Y3QgdGNwX2RpYWdfbWQ1c2lnIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0zNDMtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjM0NDovKiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLikgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMzQ1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEwNjU9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3pjKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTEyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTEyMjpcXHRlcnIgPSBnZXRzb2Nrb3B0KHAxLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIFxcdTAwMjZ6YywgXFx1MDAyNnpjX2xlbik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTExMjMtXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZ2V0c29ja29wdFxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jPTI1PXN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYy0yODctXFx0e1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYzoyODg6XFx0XFx0LmRlc2NyID0gXFxcImdldHNvY2tvcHQ6IGRlbnkgbmVnYXRpdmUgY3R4LVxcdTAwM2VvcHRsZW4gaW4gVENQX1pFUk9DT1BZX1JFQ0VJVkVcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYy0yODktXFx0XFx0Lmluc25zID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jLTMwMi1cXHRcXHQuZ2V0X2xldmVsID0gSVBQUk9UT19UQ1AsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jOjMwMzpcXHRcXHQuZ2V0X29wdG5hbWUgPSBUQ1BfWkVST0NPUFlfUkVDRUlWRSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMtMzA0LVxcdFxcdC5nZXRfb3B0bGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM9MTU9c3RhdGljIGludCBnZXRzZXRzb2Nrb3B0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTY1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNjY6XFx0LyogVENQX1pFUk9DT1BZX1JFQ0VJVkUgdHJpZ2dlcnMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTY3LVxcdG1lbXNldChcXHUwMDI2YnVmLCAwLCBzaXplb2YoYnVmKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE2OC1cXHRvcHRsZW4gPSBzaXplb2YoYnVmLnpjKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTY5OlxcdGVyciA9IGdldHNvY2tvcHQoZmQsIFNPTF9UQ1AsIFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBcXHUwMDI2YnVmLCBcXHUwMDI2b3B0bGVuKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTcwLVxcdGlmIChlcnIpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTcxOlxcdFxcdGxvZ19lcnIoXFxcIlVuZXhwZWN0ZWQgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSkgZXJyPSVkIGVycm5vPSVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTcyLVxcdFxcdFxcdGVyciwgZXJybm8pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE3OS1cXHRlcnJubyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jOjE4MDpcXHRlcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgXFx1MDAyNmJ1ZiwgXFx1MDAyNm9wdGxlbik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE4MS1cXHRpZiAoZXJybm8gIT0gRUlOVkFMKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jOjE4MjpcXHRcXHRsb2dfZXJyKFxcXCJVbmV4cGVjdGVkIGdldHNvY2tvcHQoVENQX1pFUk9DT1BZX1JFQ0VJVkUpIGVycj0lZCBlcnJubz0lZFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE4My1cXHRcXHRcXHRlcnIsIGVycm5vKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2Nrb3B0X3NrLmM9MzA9aW50IF9nZXRzb2Nrb3B0KHN0cnVjdCBicGZfc29ja29wdCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYy03My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jOjc0OlxcdGlmIChjdHgtXFx1MDAzZWxldmVsID09IFNPTF9UQ1AgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvcHRuYW1lID09IFRDUF9aRVJPQ09QWV9SRUNFSVZFKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYzo3NTpcXHRcXHQvKiBWZXJpZnkgdGhhdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSB0cmlnZ2Vycy5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jLTc2LVxcdFxcdCAqIEl0IGhhcyBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBmb3IgcGVyZm9ybWFuY2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jPTE2OT12b2lkICpjaGlsZF90aHJlYWQodm9pZCAqYXJnKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjIyNjpcXHRcXHRcXHRyZXMgPSBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjI3LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2emMsIFxcdTAwMjZ6Y19sZW4pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjM4LVxcdFxcdFxcdFxcdC8qIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVubWFwIHRoZSBwYWdlcyByaWdodCBub3csXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MjM5OlxcdFxcdFxcdFxcdCAqIGluc3RlYWQgb2YgZG9pbmcgdGhpcyBpbiBuZXh0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTI0MC1cXHRcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6NTEuNzQ0ODk2Nzk1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTgwNzM5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19NTVVgIOKAkyB0aG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsLCBub3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuIFN0YW5kYXJkIG9wdGlvbnMsIGxpa2VseSBlbmFibGVkIG9uIHByZXR0eSBtdWNoIGFueSBtYWluc3RyZWFtIGFyY2hpdGVjdHVyZS4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSdyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucywgc3RhcnRpbmcgd2l0aCBgQ09ORklHX0lORVRgLiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGRldGFpbHMgc3Vycm91bmRpbmcgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjUzLjcwMjk3NDY4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMDc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjUzLjc1MTk5NzQ2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDg2NTQzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgSU5FVCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJTkVUYCB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEknbGwgYmUgZGl2aW5nIHN0cmFpZ2h0IGludG8gYG5ldC9LY29uZmlnYC4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIG9mIGNvdXJzZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYElORVRgIGZlYXR1cmUuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluY2x1c2lvbiBvZiBgSU5FVGAgYWZmZWN0cyBvdGhlciBuZXR3b3JrIGZlYXR1cmVzIG9yIGlmIHRoZXJlIGFyZSBhbnkgcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgdHJhY2luZyBob3cgdGhlIGZlYXR1cmUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBJIGNhbiBwcmVkaWN0IGFueSBpc3N1ZXMgZG93bnN0cmVhbSBpZiBJIG1vZGlmeSBhbnkgb2YgdGhlIGZsYWdzIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGZpbmQgYGNvbmZpZyBJTkVUYCBhdCB0aGUgcm9vdCwgb3IgcG9zc2libHkgbmVzdGVkIHVuZGVyIHNvbWUgcGFyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBkZXBlbmRpbmcgb24gaXRzIHNjb3BlLiBNeSBnb2FsIGhlcmUgaXNuJ3QganVzdCB0byAqZmluZCogdGhlIGVudHJ5LCBidXQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgaXRzIGltcGFjdCBvbiB0aGUgbGFyZ2VyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzg1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6NTUuODM4NTQzNTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg1OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvS2NvbmZpZy0xMTMtXFxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXFxubmV0L0tjb25maWctMTE1LVxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzo1NS44ODU0MDc1MDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM5NTIxMjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AvSVAgWmVyb2NvcHkgRmVhdHVyZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19JTkVUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFRDUC9JUCBuZXR3b3JraW5nLCBhbmQgYENPTkZJR19NTVVgIGlzIHRoZSBvbmUgZW5hYmxpbmcgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBzdXBwb3J0LiBHb29kLiBOb3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBGb2N1c1N5bWJvbHMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBhcyBpdCBzaG91bGQgYmUuXG5cblRoZSBsaXN0ZWQgc3ltYm9scywgYHRjcF9tbWFwYCwgYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYWxsIGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgemVyby1jb3B5IHJlY2VpdmUgYW5kIFRDUCBtbWFwIGFjY291bnRpbmcgZmVhdHVyZXMsIGFzIGV4cGVjdGVkLiBUaGV5J3JlIGFsbCB2ZXJ5IGZvY3VzZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkuIEV4Y2VsbGVudCEgVGhlIHVzZSBvZiB0aGVzZSBzeW1ib2xzIHNwZWNpZmljYWxseSBhdm9pZHMgYW55IHJlbGlhbmNlIG9uIGdlbmVyaWMgZnVuY3Rpb25zIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3IgZ2VuZXJhbCBtZW1vcnkgaGVscGVycy5cblxuQmFzZWQgb24gbXkgcmV2aWV3LCBldmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgbG9naWNhbGx5IHNvdW5kLCBjbGVhcmx5IGRlZmluZWQsIGFuZCwgaW1wb3J0YW50bHksIGNvbXBsaWFudCB3aXRoIGFsbCB0aGUgZXN0YWJsaXNoZWQgZ3VpZGVsaW5lcyBhbmQgZGVzaWduIHByaW5jaXBsZXMgZm9yIHRoaXMgdHlwZSBvZiBmZWF0dXJlIGludGVncmF0aW9uLiBJIHNlZSBubyByZWQgZmxhZ3Mgb3IgcG90ZW50aWFsIGlzc3Vlcy5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIEknbGwgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzIwLCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDowMC4yODA2MjIzNzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ3NTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX21tYXBcIixcbiAgICBcInRjcF96Y192bWFfb3BlblwiLFxuICAgIFwidGNwX3pjX3ZtYV9jbG9zZVwiLFxuICAgIFwidGNwX3pjX21lbV9jaGFyZ2VcIixcbiAgICBcInRjcF96Y19tZW1fdW5jaGFyZ2VcIixcbiAgICBcInRjcF96ZXJvY29weV9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzICh2aWEgdGNwX21tYXAsIHRjcF96Y192bWFfb3BlbiwgYW5kIHRjcF96Y192bWFfY2xvc2UpLCB0cmFja2luZyBtbV9zdHJ1Y3QgYW5kIHNvY2sgcmVmZXJlbmNlcywgYW5kIHVwZGF0ZXMgbWVtb3J5IHJhaXNlIGFjY291bnRpbmcgaW4gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkIHdpdGggdGhlIG5ldyBTS19NRU1fUkVDVl9aRVJPQ09QWSBraW5kLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBNTSBpbnRlcmFjdGlvbiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2Ugc29ja2V0IHN5c2NhbGxzIChtbWFwLCBnZXRzb2Nrb3B0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBtdW5tYXAsIGV0Yy4pLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGZ1enogZm9yIG1lbW9yeSBhY2NvdW50aW5nLCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX21tYXBcIixcbiAgICBcInRjcF96Y192bWFfb3BlblwiLFxuICAgIFwidGNwX3pjX3ZtYV9jbG9zZVwiLFxuICAgIFwidGNwX3pjX21lbV9jaGFyZ2VcIixcbiAgICBcInRjcF96Y19tZW1fdW5jaGFyZ2VcIixcbiAgICBcInRjcF96ZXJvY29weV9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzICh2aWEgdGNwX21tYXAsIHRjcF96Y192bWFfb3BlbiwgYW5kIHRjcF96Y192bWFfY2xvc2UpLCB0cmFja2luZyBtbV9zdHJ1Y3QgYW5kIHNvY2sgcmVmZXJlbmNlcywgYW5kIHVwZGF0ZXMgbWVtb3J5IHJhaXNlIGFjY291bnRpbmcgaW4gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkIHdpdGggdGhlIG5ldyBTS19NRU1fUkVDVl9aRVJPQ09QWSBraW5kLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBNTSBpbnRlcmFjdGlvbiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2Ugc29ja2V0IHN5c2NhbGxzIChtbWFwLCBnZXRzb2Nrb3B0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBtdW5tYXAsIGV0Yy4pLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGZ1enogZm9yIG1lbW9yeSBhY2NvdW50aW5nLCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjAwLjM1MDEwMzY2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxMjc5NTM3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDowMC4zNTA1NDYwODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2ODEyNzUwNzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZWN5Y2xlIHRyYWNraW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzIChzdHJ1Y3QgdGNwX3pjX3ZtYSkuIFRoZSBvbmx5IG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZSBpcyBzdHJ1Y3QgdGNwX3pjX3ZtYSwgd2hlcmUgYWxsIG1lbWJlciBmaWVsZHMgKG5yX3BhZ2VzLCBtbSwgc2ssIHJlZmNudCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEga21hbGxvY19vYmouIFRoZSBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGtlcm5lbC1pbnRlcm5hbCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1vcnkgYWNjb3VudGluZywgb3IgVk1BIGxpZmVjeWNsZS91c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkOGY2YzBiNTkzMWE0OGExNDA3Y2Q1NGI2YTJhN2RkNTI2ZGJjNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMzozMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaFxuaW5kZXggNTExODUyMjJhYWMyOS4uY2YxOTA1NWE5YzQwMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvc29jay5oXG5AQCAtMTU1Niw2ICsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XG4gXG4gI2RlZmluZSBTS19NRU1fU0VORFx0MFxuICNkZWZpbmUgU0tfTUVNX1JFQ1ZcdDFcbisjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZXHQweDEwMFxuIFxuIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqL1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBza19wcm90X21lbV9saW1pdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG5pbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhcbkBAIC0zOCw3ICszOCw4IEBAXG4gXG4gI2RlZmluZSBza21lbV9raW5kX25hbWVzXHRcdFx0XFxcbiBcdFx0RU0oU0tfTUVNX1NFTkQpXHRcdFx0XFxcbi1cdFx0RU1lKFNLX01FTV9SRUNWKVxuK1x0XHRFTShTS19NRU1fUkVDVilcdFx0XHRcXFxuK1x0XHRFTWUoU0tfTUVNX1JFQ1ZfWkVST0NPUFkpXG4gXG4gLyogZW51bXMgbmVlZCB0byBiZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlICovXG4gI3VuZGVmIEVNXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCBmYTYwYjc0OTRjNTg2Li4zZDg1YzEzOGUxYzcxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0zMzgwLDcgKzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKVxuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNjIHNrX2dldF9ybWVtMChzaywgcHJvdCkpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG4tXHR9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqL1xuK1x0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4gXHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI2Nyw2ICsyNjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcdTAwM2VcbkBAIC0xODYwLDIzICsxODYxLDExOCBAQCB2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbitzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCBzb2NrICpzaztcbit9O1xuK1xuKy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi9cbisjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGNodW5rO1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbitcdFx0bnJfcGFnZXMgLT0gY2h1bms7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgY2h1bms7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdHJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRcdCAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpO1xuK1x0XHRpZiAoIXJldCkge1xuK1x0XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2Uoc2ssIGNoYXJnZWQpO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHR9XG4rXHRcdGNoYXJnZWQgKz0gY2h1bms7XG4rXHRcdG5yX3BhZ2VzIC09IGNodW5rO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJlZmNvdW50X2luYyhcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0dGNwX3pjX21lbV91bmNoYXJnZSh6Y192bWEtXHUwMDNlc2ssIHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyk7XG4rXHRcdG1tZHJvcCh6Y192bWEtXHUwMDNlbW0pO1xuK1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuK1x0XHRrZnJlZSh6Y192bWEpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG4rXHQub3BlbiA9IHRjcF96Y192bWFfb3BlbixcbitcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG4gfTtcbiBcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbitcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWE7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQyk7XG4gXG4gXHQvKiBJbnN0cnVjdCB2bV9pbnNlcnRfcGFnZSgpIHRvIG5vdCBtbWFwX3JlYWRfbG9jayhtbSkgKi9cbi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTtcbitcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX01JWEVETUFQKTtcbitcbitcdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0emNfdm1hID0ga21hbGxvY19vYmooKnpjX3ZtYSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghemNfdm1hKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xuK1x0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0emNfdm1hLVx1MDAzZXNrID0gc29jay1cdTAwM2VzaztcbitcdHJlZmNvdW50X3NldChcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250LCAxKTtcbitcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xuK1x0c29ja19ob2xkKHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRpZiAodGNwX3pjX21lbV9jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCBucl9wYWdlcykpIHtcbitcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4rXHRcdHNvY2tfcHV0KHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRcdGtmcmVlKHpjX3ZtYSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnRjcF92bV9vcHM7XG4rXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJldHVybiB2bWEtXHUwMDNldm1fb3BzID09IFx1MDAyNnRjcF92bV9vcHMgXHUwMDI2XHUwMDI2IHpjX3ZtYSBcdTAwMjZcdTAwMjYgemNfdm1hLVx1MDAzZW1tID09IG1tO1xuK31cbitcbiBzdGF0aWMgc2tiX2ZyYWdfdCAqc2tiX2FkdmFuY2VfdG9fZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0X3NrYixcbiBcdFx0XHRcdCAgICAgICB1MzIgKm9mZnNldF9mcmFnKVxuIHtcbkBAIC0yMTczLDcgKzIyNjksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXG4gXHRpZiAodm1hKSB7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbitcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG4gXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC0yMTgzLDcgKzIyNzksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuK1x0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MDAuMzUwNTQ3MzE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTE2MzA5NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBUQ1AgWmVyby1Db3B5IFBhdGNoZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyB0aW1lIHRvIGRlbHZlIGludG8gdGhlIGRldGFpbHMuXG5cbkZpcnN0LCBJIHNlZSBhZGRpdGlvbnMgdG8gYGluY2x1ZGUvbmV0L3NvY2suaGAgYW5kIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhgIHJlbGF0ZWQgdG8gYFNLX01FTV9SRUNWX1pFUk9DT1BZYC4gU3RhbmRhcmQgc3R1ZmYsIGRlZmluaW5nIGEgZmxhZyBhbmQgYWRkaW5nIGl0IHRvIHRyYWNlIGV2ZW50cy4gTm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyB0aGVyZSwgYnV0IGxldCdzIGtlZXAgYW4gZXllIG9uIGhvdyBpdCdzICp1c2VkKi5cblxuTmV4dCwgYG5ldC9jb3JlL3NvY2suY2AgbW9kaWZpZXMgdGhlIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGZ1bmN0aW9uLiBBaCwgdGhpcyBpcyB3aGVyZSBpdCdzIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIGNoYW5nZXMgZnJvbSBhIHNpbXBsZSBgZWxzZWAgYmxvY2sgdG8gYW4gYGVsc2UgaWZgIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSBga2luZGAgdmFyaWFibGUuICpDcnVjaWFsbHkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGtpbmRgIGlzIHNldCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGlzIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGZsYWcuIEkgc2hvdWxkIGNoZWNrIGBuZXQvY29yZS9zb2NrLmNgIGFyb3VuZCBsaW5lIDMzODAsIGp1c3QgdG8gYmUgc3VyZS5cblxuVGhlIG1lYXQgb2YgdGhlIHBhdGNoLCBob3dldmVyLCBpcyBpbiBgbmV0L2lwdjQvdGNwLmNgLiBIZXJlIHdlIGhhdmUgYSBgc3RydWN0IHRjcF96Y192bWFgIGJlaW5nIGludHJvZHVjZWQsIGFsb25nIHdpdGggbmV3IGZ1bmN0aW9uczogYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBgdGNwX3pjX21lbV9jaGFyZ2VgLCBhbmQgYSBgdGNwX3ZtX29wc2Agc3RydWN0dXJlLiBXZSdyZSBsb29raW5nIGF0IHplcm8tY29weSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggYHRjcF9tbWFwYC4gVGhlIGNvZGUgc2VlbXMgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBgemNfdm1hYCwgdHJhY2tpbmcgdGhlIG51bWJlciBvZiBwYWdlcywgbWVtb3J5IG1hcCwgc29ja2V0LCBhbmQgcmVmY291bnRzLiBgdGNwX3pjX21lbV9jaGFyZ2VgIGFuZCBgdGNwX3pjX21lbV91bmNoYXJnZWAgYXJlIGltcG9ydGFudCBhcyB0aGV5IG11c3QgYmUgdGhlIGJvb2trZWVwaW5nIG9wZXJhdGlvbnMgdG8gdHJhY2sgcmVzb3VyY2VzIHRoYXQgYXJlIG1hbmFnZWQgYnkgdGhpcyBjb2RlLlxuXG5JIHNlZSByZWZlcmVuY2VzIHRvIGB2bWFgIGFuZCBgbW1gIChtZW1vcnkgbWFwKS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIHZtYSBpbiBgdGNwX3pjX3ZtYV92YWxpZGAsIGFuZCB1cGRhdGVzIGBmaW5kX3RjcF92bWFgIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHVzZSBvZiBga21hbGxvY19vYmpgLCB0aGUgcmVmY291bnRpbmcsIGFuZCBtZW1vcnkgbWFwIG1hbmlwdWxhdGlvbiBhcmUgcmVkIGZsYWdzIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgc2NlbmFyaW9zLiAqVGhpcyBpcyB3aGVyZSBLTVNBTiB3aWxsIHNoaW5lKi4gVGhlIHplcm8tY29weSBmdW5jdGlvbmFsaXR5IGxpa2VseSBpbnZvbHZlcyBkaXJlY3RseSBtYXBwaW5nIHVzZXItc3BhY2UgYnVmZmVycyBpbnRvIGtlcm5lbCBzcGFjZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBzaXR1YXRpb25zIGlmIG5vdCBoYW5kbGVkIG1ldGljdWxvdXNseS5cblxuQmFzZWQgb24gdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUgKGB0Y3BfemNfdm1hYCksIG5ldyBtZW1vcnktcmVsYXRlZCBmdW5jdGlvbnMsIGFuZCB0aGUgaW50cmljYWNpZXMgb2YgemVyby1jb3B5IG1lY2hhbmlzbXMsICp0aGlzIHBhdGNoIHNlcmllcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgZm9jdXNlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24qLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlzIGVsZXZhdGVkIGR1ZSB0byB0aGUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgYW5kIHRoZSBjb21wbGV4IGludGVycGxheSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4gSSBtdXN0IGNoZWNrIHRoZSByZWZlcmVuY2UgY291bnQgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc2V0IG9mIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDoyNi40NjY4NTkzNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA4MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29jay5jPTMzMTk9RVhQT1JUX1NZTUJPTChza193YWl0X2RhdGEpO1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTMzMjEtLyoqXFxubmV0L2NvcmUvc29jay5jOjMzMjI6ICpcXHRfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQgLSBpbmNyZWFzZSBtZW1vcnlfYWxsb2NhdGVkXFxubmV0L2NvcmUvc29jay5jLTMzMjMtICpcXHRAc2s6IHNvY2tldFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTMzMzUtICovXFxubmV0L2NvcmUvc29jay5jOjMzMzY6aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG5uZXQvY29yZS9zb2NrLmMtMzMzNy17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MzQ1ND1pbnQgX19za19tZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGtpbmQpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMzQ1OC1cXHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgYW10IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbm5ldC9jb3JlL3NvY2suYzozNDU5OlxcdHJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgc2l6ZSwgYW10LCBraW5kKTtcXG5uZXQvY29yZS9zb2NrLmMtMzQ2MC1cXHRpZiAoIXJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MjYuNTE1Mjc0MDI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MjcwNDk3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYG5ldC9jb3JlL3NvY2suY2AgLSBTb2NrZXQgTGlmZWN5Y2xlIFx1MDAyNiBTdGF0ZSBUcmFuc2l0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gbGluZXMgMzMzNi0zNDQwIG9mIGBuZXQvY29yZS9zb2NrLmNgLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIHNlY3Rpb24gZGVhbGluZyB3aXRoIHNvY2tldCBtYW5hZ2VtZW50LCBwcm9iYWJseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIG9mIGEgc29ja2V0IGFuZCBob3cgaXRzIHN0YXRlIHRyYW5zaXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlZXBseSB0byBvcHRpbWl6ZSBob3cgSSB3b3JrIHdpdGggc29ja2V0IGNvbm5lY3Rpb25zLiBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaW5lciBwb2ludHMgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBJIGltYWdpbmUgdGhlcmUnbGwgYmUgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaGVyZSwgcmVhY3RpbmcgdG8gZGlmZmVyZW50IGV2ZW50cyBhbmQgc29ja2V0IGZsYWdzLiBQZXJoYXBzIHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBzZXR0aW5nIG9mIHBhcmFtZXRlcnMgZm9yIHNvY2tldCBiZWhhdmlvci4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBoYW5kbGVzIGJvdGggVENQIGFuZCBVRFAgLSBJIGtub3cgdGhlcmUgYXJlIHZhcmlhdGlvbnMgaW4gaGFuZGxpbmcgZm9yIGNvbm5lY3Rpb24tb3JpZW50ZWQgdnMgY29ubmVjdGlvbmxlc3MgcHJvdG9jb2xzLiBJIGFsc28gd2FudCB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSwgc2luY2Ugc29ja2V0IG9wZXJhdGlvbnMgYXJlIG9idmlvdXNseSBzaGFyZWQuIEhvcGVmdWxseSwgdGhlcmUgaXMgYSBjbGVhciBicmVha2Rvd24gb2YgdGhlIHNvY2tldCdzIGRpZmZlcmVudCBzdGF0ZXMgKGUuZy4sIExJU1RFTiwgQ09OTkVDVEVELCBFU1RBQkxJU0hFRCwgQ0xPU0VELCBldGMuKS4gQW5kLCBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucywgcGFydGljdWxhcmx5IGhvdyBpdCByZXNwb25kcyB0byBkcm9wcGVkIGNvbm5lY3Rpb25zIG9yIG5ldHdvcmsgZmFpbHVyZXMuIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjI4Ljk0MjMyNzMwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMzYsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMzY6XFx0aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG4zMzM3OlxcdHtcXG4zMzM4OlxcdFxcdGJvb2wgbWVtY2dfZW5hYmxlZCA9IGZhbHNlLCBjaGFyZ2VkID0gZmFsc2U7XFxuMzMzOTpcXHRcXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cXHUwMDNlc2tfcHJvdDtcXG4zMzQwOlxcdFxcdGxvbmcgYWxsb2NhdGVkID0gMDtcXG4zMzQxOlxcdFxcbjMzNDI6XFx0XFx0aWYgKCFzay1cXHUwMDNlc2tfYnlwYXNzX3Byb3RfbWVtKSB7XFxuMzM0MzpcXHRcXHRcXHRza19tZW1vcnlfYWxsb2NhdGVkX2FkZChzaywgYW10KTtcXG4zMzQ0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IHNrX21lbW9yeV9hbGxvY2F0ZWQoc2spO1xcbjMzNDU6XFx0XFx0fVxcbjMzNDY6XFx0XFxuMzM0NzpcXHRcXHRpZiAobWVtX2Nncm91cF9za19lbmFibGVkKHNrKSkge1xcbjMzNDg6XFx0XFx0XFx0bWVtY2dfZW5hYmxlZCA9IHRydWU7XFxuMzM0OTpcXHRcXHRcXHRjaGFyZ2VkID0gbWVtX2Nncm91cF9za19jaGFyZ2Uoc2ssIGFtdCwgZ2ZwX21lbWNnX2NoYXJnZSgpKTtcXG4zMzUwOlxcdFxcdFxcdGlmICghY2hhcmdlZClcXG4zMzUxOlxcdFxcdFxcdFxcdGdvdG8gc3VwcHJlc3NfYWxsb2NhdGlvbjtcXG4zMzUyOlxcdFxcdH1cXG4zMzUzOlxcdFxcbjMzNTQ6XFx0XFx0aWYgKCFhbGxvY2F0ZWQpXFxuMzM1NTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzU2OlxcdFxcbjMzNTc6XFx0XFx0LyogVW5kZXIgbGltaXQuICovXFxuMzM1ODpcXHRcXHRpZiAoYWxsb2NhdGVkIFxcdTAwM2M9IHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMCkpIHtcXG4zMzU5OlxcdFxcdFxcdHNrX2xlYXZlX21lbW9yeV9wcmVzc3VyZShzayk7XFxuMzM2MDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzYxOlxcdFxcdH1cXG4zMzYyOlxcdFxcbjMzNjM6XFx0XFx0LyogVW5kZXIgcHJlc3N1cmUuICovXFxuMzM2NDpcXHRcXHRpZiAoYWxsb2NhdGVkIFxcdTAwM2Ugc2tfcHJvdF9tZW1fbGltaXRzKHNrLCAxKSlcXG4zMzY1OlxcdFxcdFxcdHNrX2VudGVyX21lbW9yeV9wcmVzc3VyZShzayk7XFxuMzM2NjpcXHRcXG4zMzY3OlxcdFxcdC8qIE92ZXIgaGFyZCBsaW1pdC4gKi9cXG4zMzY4OlxcdFxcdGlmIChhbGxvY2F0ZWQgXFx1MDAzZSBza19wcm90X21lbV9saW1pdHMoc2ssIDIpKVxcbjMzNjk6XFx0XFx0XFx0Z290byBzdXBwcmVzc19hbGxvY2F0aW9uO1xcbjMzNzA6XFx0XFxuMzM3MTpcXHRcXHQvKiBHdWFyYW50ZWUgbWluaW11bSBidWZmZXIgc2l6ZSB1bmRlciBwcmVzc3VyZSAoZWl0aGVyIGdsb2JhbFxcbjMzNzI6XFx0XFx0ICogb3IgbWVtY2cpIHRvIG1ha2Ugc3VyZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gUkZDIDczMjMgKFRDUFxcbjMzNzM6XFx0XFx0ICogRXh0ZW5zaW9ucyBmb3IgSGlnaCBQZXJmb3JtYW5jZSkgd29yayBwcm9wZXJseS5cXG4zMzc0OlxcdFxcdCAqXFxuMzM3NTpcXHRcXHQgKiBUaGlzIHJ1bGUgZG9lcyBOT1Qgc3RhbmQgd2hlbiBleGNlZWRzIGdsb2JhbCBvciBtZW1jZydzIGhhcmRcXG4zMzc2OlxcdFxcdCAqIGxpbWl0LCBvciBlbHNlIGEgRG9TIGF0dGFjayBjYW4gYmUgdGFrZW4gcGxhY2UgYnkgc3Bhd25pbmdcXG4zMzc3OlxcdFxcdCAqIGxvdHMgb2Ygc29ja2V0cyB3aG9zZSB1c2FnZSBhcmUgdW5kZXIgbWluaW11bSBidWZmZXIgc2l6ZS5cXG4zMzc4OlxcdFxcdCAqL1xcbjMzNzk6XFx0XFx0aWYgKGtpbmQgPT0gU0tfTUVNX1JFQ1YpIHtcXG4zMzgwOlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2Mgc2tfZ2V0X3JtZW0wKHNrLCBwcm90KSlcXG4zMzgxOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjMzODI6XFx0XFxuMzM4MzpcXHRcXHR9IGVsc2UgaWYgKGtpbmQgPT0gU0tfTUVNX1NFTkQpIHtcXG4zMzg0OlxcdFxcdFxcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XFxuMzM4NTpcXHRcXG4zMzg2OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xcbjMzODc6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza193bWVtX3F1ZXVlZCBcXHUwMDNjIHdtZW0wKVxcbjMzODg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuMzM4OTpcXHRcXHRcXHR9IGVsc2UgaWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNnNrLVxcdTAwM2Vza193bWVtX2FsbG9jKSBcXHUwMDNjIHdtZW0wKSB7XFxuMzM5MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzkxOlxcdFxcdFxcdH1cXG4zMzkyOlxcdFxcdH1cXG4zMzkzOlxcdFxcbjMzOTQ6XFx0XFx0aWYgKHNrX2hhc19tZW1vcnlfcHJlc3N1cmUoc2spKSB7XFxuMzM5NTpcXHRcXHRcXHR1NjQgYWxsb2M7XFxuMzM5NjpcXHRcXG4zMzk3OlxcdFxcdFxcdC8qIFRoZSBmb2xsb3dpbmcgJ2F2ZXJhZ2UnIGhldXJpc3RpYyBpcyB3aXRoaW4gdGhlXFxuMzM5ODpcXHRcXHRcXHQgKiBzY29wZSBvZiBnbG9iYWwgYWNjb3VudGluZywgc28gaXQgb25seSBtYWtlc1xcbjMzOTk6XFx0XFx0XFx0ICogc2Vuc2UgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUuXFxuMzQwMDpcXHRcXHRcXHQgKi9cXG4zNDAxOlxcdFxcdFxcdGlmICghc2tfdW5kZXJfZ2xvYmFsX21lbW9yeV9wcmVzc3VyZShzaykpXFxuMzQwMjpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4zNDAzOlxcdFxcbjM0MDQ6XFx0XFx0XFx0LyogVHJ5IHRvIGJlIGZhaXIgYW1vbmcgYWxsIHRoZSBzb2NrZXRzIHVuZGVyIGdsb2JhbFxcbjM0MDU6XFx0XFx0XFx0ICogcHJlc3N1cmUgYnkgYWxsb3dpbmcgdGhlIG9uZXMgdGhhdCBiZWxvdyBhdmVyYWdlXFxuMzQwNjpcXHRcXHRcXHQgKiB1c2FnZSB0byByYWlzZS5cXG4zNDA3OlxcdFxcdFxcdCAqL1xcbjM0MDg6XFx0XFx0XFx0YWxsb2MgPSBza19zb2NrZXRzX2FsbG9jYXRlZF9yZWFkX3Bvc2l0aXZlKHNrKTtcXG4zNDA5OlxcdFxcdFxcdGlmIChza19wcm90X21lbV9saW1pdHMoc2ssIDIpIFxcdTAwM2UgYWxsb2MgKlxcbjM0MTA6XFx0XFx0XFx0ICAgIHNrX21lbV9wYWdlcyhzay1cXHUwMDNlc2tfd21lbV9xdWV1ZWQgK1xcbjM0MTE6XFx0XFx0XFx0XFx0XFx0IGF0b21pY19yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgK1xcbjM0MTI6XFx0XFx0XFx0XFx0XFx0IHNrLVxcdTAwM2Vza19mb3J3YXJkX2FsbG9jKSlcXG4zNDEzOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjM0MTQ6XFx0XFx0fVxcbjM0MTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjI4Ljk0MjYwOTM5N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTc0NjA5NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmV0L2lwdjQvdGNwLmNgIGZpbGUgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCB6ZXJvLWNvcHkgVENQIHJlY2VpdmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbWVjaGFuaWNzLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zLiBJJ2xsIHN0YXJ0IGJ5IHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgYGZpbmRfdGNwX3ZtYWAgZnVuY3Rpb24gd2l0aGluIHRoaXMgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgcGF0aCB6ZXJvLWNvcHkgdGFrZXMgb24gdGhlIHJlY2VpdmluZyBlbmQuIEkgZXhwZWN0IGBmaW5kX3RjcF92bWFgIGlzIGNyaXRpY2FsIHRvIGxvY2F0aW5nIHRoZSByZWxldmFudCBtZW1vcnkgbWFwIG9yIHZpcnR1YWwgbWVtb3J5IGFyZWEsIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHplcm8tY29weS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MzEuMTE3MjIyMDUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU5NjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX3RjcF92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MjIzOT1zdGF0aWMgdm9pZCB0Y3BfemNfZmluYWxpemVfcnhfdHN0YW1wKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyNjQtXFxubmV0L2lwdjQvdGNwLmM6MjI2NTpzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubmV0L2lwdjQvdGNwLmMtMjI2Ni1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMjkxPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjMzMS1cXG5uZXQvaXB2NC90Y3AuYzoyMzMyOlxcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVxcdTAwM2VtbSwgYWRkcmVzcywgXFx1MDAyNm1tYXBfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0yMzMzLVxcdGlmICghdm1hKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDozMS4xNjM4MjQ4NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcyNTQ5ODYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdGNwX3plcm9jb3B5X3JlY2VpdmVgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGF0dGVudGlvbidzIGJlZW4gZHJhd24gdG8gYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIEkgd2FudCB0byBnZXQgYSBjbG9zZXIgbG9vayBhdCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDIzMzAuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB6ZXJvLWNvcHkgaXMgYmVpbmcgaW1wbGVtZW50ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjcml0aWNhbCBsb2dpYyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuIExldCdzIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIHNjYXR0ZXItZ2F0aGVyLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGJ1ZmZlciByZWFzc2VtYmx5IGVmZmljaWVudGx5LCBvciBpZiB0aGVyZSBtaWdodCBiZSBzb21lIGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBleGFtaW5hdGlvbiBvZiBtZW1vcnkgYWRkcmVzc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgcGFydGljdWxhciBzcG90IGluIHRoZSBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgb3B0aW1hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MzUuODg5MzI2NjQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjg1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjg1OlxcdFxcdH1cXG4yMjg2OlxcdFxcdCptbWFwX2xvY2tlZCA9IHRydWU7XFxuMjI4NzpcXHRcXHRyZXR1cm4gdm1hO1xcbjIyODg6XFx0fVxcbjIyODk6XFx0XFxuMjI5MDpcXHQjZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcXG4yMjkxOlxcdHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbjIyOTI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG4yMjkzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXFxuMjI5NDpcXHR7XFxuMjI5NTpcXHRcXHR1MzIgbGVuZ3RoID0gMCwgb2Zmc2V0LCB2bWFfbGVuLCBhdmFpbF9sZW4sIGNvcHlsZW4gPSAwO1xcbjIyOTY6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpemMtXFx1MDAzZWFkZHJlc3M7XFxuMjI5NzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZXNbVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRV07XFxuMjI5ODpcXHRcXHRzMzIgY29weWJ1Zl9sZW4gPSB6Yy1cXHUwMDNlY29weWJ1Zl9sZW47XFxuMjI5OTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4yMzAwOlxcdFxcdGNvbnN0IHNrYl9mcmFnX3QgKmZyYWdzID0gTlVMTDtcXG4yMzAxOlxcdFxcdHVuc2lnbmVkIGludCBwYWdlc190b19tYXAgPSAwO1xcbjIzMDI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuMjMwMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4yMzA0OlxcdFxcdHUzMiBzZXEgPSB0cC1cXHUwMDNlY29waWVkX3NlcTtcXG4yMzA1OlxcdFxcdHUzMiB0b3RhbF9ieXRlc190b19tYXA7XFxuMjMwNjpcXHRcXHRpbnQgaW5xID0gdGNwX2lucShzayk7XFxuMjMwNzpcXHRcXHRib29sIG1tYXBfbG9ja2VkO1xcbjIzMDg6XFx0XFx0aW50IHJldDtcXG4yMzA5OlxcdFxcbjIzMTA6XFx0XFx0emMtXFx1MDAzZWNvcHlidWZfbGVuID0gMDtcXG4yMzExOlxcdFxcdHpjLVxcdTAwM2Vtc2dfZmxhZ3MgPSAwO1xcbjIzMTI6XFx0XFxuMjMxMzpcXHRcXHRpZiAoYWRkcmVzcyBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fCBhZGRyZXNzICE9IHpjLVxcdTAwM2VhZGRyZXNzKVxcbjIzMTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjMxNTpcXHRcXG4yMzE2OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTilcXG4yMzE3OlxcdFxcdFxcdHJldHVybiAtRU5PVENPTk47XFxuMjMxODpcXHRcXG4yMzE5OlxcdFxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG4yMzIwOlxcdFxcbjIzMjE6XFx0XFx0aWYgKGlucSBcXHUwMDI2XFx1MDAyNiBpbnEgXFx1MDAzYz0gY29weWJ1Zl9sZW4pXFxuMjMyMjpcXHRcXHRcXHRyZXR1cm4gcmVjZWl2ZV9mYWxsYmFja190b19jb3B5KHNrLCB6YywgaW5xLCB0c3MpO1xcbjIzMjM6XFx0XFxuMjMyNDpcXHRcXHRpZiAoaW5xIFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuMjMyNTpcXHRcXHRcXHR6Yy1cXHUwMDNlbGVuZ3RoID0gMDtcXG4yMzI2OlxcdFxcdFxcdHpjLVxcdTAwM2VyZWN2X3NraXBfaGludCA9IGlucTtcXG4yMzI3OlxcdFxcdFxcdGlmICghaW5xIFxcdTAwMjZcXHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4yMzI4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjIzMjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjMzMDpcXHRcXHR9XFxuMjMzMTpcXHRcXG4yMzMyOlxcdFxcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVxcdTAwM2VtbSwgYWRkcmVzcywgXFx1MDAyNm1tYXBfbG9ja2VkKTtcXG4yMzMzOlxcdFxcdGlmICghdm1hKVxcbjIzMzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjMzNTpcXHRcXG4yMzM2OlxcdFxcdHZtYV9sZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB6Yy1cXHUwMDNlbGVuZ3RoLCB2bWEtXFx1MDAzZXZtX2VuZCAtIGFkZHJlc3MpO1xcbjIzMzc6XFx0XFx0YXZhaWxfbGVuID0gbWluX3QodTMyLCB2bWFfbGVuLCBpbnEpO1xcbjIzMzg6XFx0XFx0dG90YWxfYnl0ZXNfdG9fbWFwID0gYXZhaWxfbGVuIFxcdTAwMjYgfihQQUdFX1NJWkUgLSAxKTtcXG4yMzM5OlxcdFxcdGlmICh0b3RhbF9ieXRlc190b19tYXApIHtcXG4yMzQwOlxcdFxcdFxcdGlmICghKHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUF9SRUNFSVZFX1pFUk9DT1BZX0ZMQUdfVExCX0NMRUFOX0hJTlQpKVxcbjIzNDE6XFx0XFx0XFx0XFx0emFwX3ZtYV9yYW5nZSh2bWEsIGFkZHJlc3MsIHRvdGFsX2J5dGVzX3RvX21hcCk7XFxuMjM0MjpcXHRcXHRcXHR6Yy1cXHUwMDNlbGVuZ3RoID0gdG90YWxfYnl0ZXNfdG9fbWFwO1xcbjIzNDM6XFx0XFx0XFx0emMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50ID0gMDtcXG4yMzQ0OlxcdFxcdH0gZWxzZSB7XFxuMjM0NTpcXHRcXHRcXHR6Yy1cXHUwMDNlbGVuZ3RoID0gYXZhaWxfbGVuO1xcbjIzNDY6XFx0XFx0XFx0emMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50ID0gYXZhaWxfbGVuO1xcbjIzNDc6XFx0XFx0fVxcbjIzNDg6XFx0XFx0cmV0ID0gMDtcXG4yMzQ5OlxcdFxcdHdoaWxlIChsZW5ndGggKyBQQUdFX1NJWkUgXFx1MDAzYz0gemMtXFx1MDAzZWxlbmd0aCkge1xcbjIzNTA6XFx0XFx0XFx0aW50IG1hcHBhYmxlX29mZnNldDtcXG4yMzUxOlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjIzNTI6XFx0XFxuMjM1MzpcXHRcXHRcXHRpZiAoemMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50IFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuMjM1NDpcXHRcXHRcXHRcXHR1MzIgb2Zmc2V0X2ZyYWc7XFxuMjM1NTpcXHRcXG4yMzU2OlxcdFxcdFxcdFxcdGlmIChza2IpIHtcXG4yMzU3OlxcdFxcdFxcdFxcdFxcdGlmICh6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgXFx1MDAzZSAwKVxcbjIzNTg6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjM1OTpcXHRcXHRcXHRcXHRcXHRza2IgPSBza2ItXFx1MDAzZW5leHQ7XFxuMjM2MDpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgPSBzZXEgLSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcTtcXG4yMzYxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM2MjpcXHRcXHRcXHRcXHRcXHRza2IgPSB0Y3BfcmVjdl9za2Ioc2ssIHNlcSwgXFx1MDAyNm9mZnNldCk7XFxuMjM2MzpcXHRcXHRcXHRcXHR9XFxuMjM2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MzUuODg5NjQyNTQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg5MTE1NzUxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFuZCBaZXJvLUNvcHkgVk1BcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIHRoZSBmaXJzdCB0aGluZyBpdCBkb2VzIGlzIGNhbGwgYGZpbmRfdGNwX3ZtYShjdXJyZW50LVx1MDAzZW1tLCBhZGRyZXNzLCBcdTAwMjZtbWFwX2xvY2tlZClgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQgbmVlZHMgdG8gZmluZCB0aGUgcmVsZXZhbnQgVk1BLiBOb3csIGxldCdzIGRpZyBpbnRvIGBmaW5kX3RjcF92bWFgLiBBaGEsIGhlcmUncyBgdGNwX3pjX3ZtYV92YWxpZGA6XG5cbmBgYGNcbnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxue1xuXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcblxuXHRyZXR1cm4gdm1hLVx1MDAzZXZtX29wcyA9PSBcdTAwMjZ0Y3Bfdm1fb3BzIFx1MDAyNlx1MDAyNiB6Y192bWEgXHUwMDI2XHUwMDI2IHpjX3ZtYS1cdTAwM2VtbSA9PSBtbTtcbn1cbmBgYFxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgc2VlIHRoYXQgdGhlIGB6Y192bWFgJ3MgYG1tYCBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGN1cnJlbnQgcHJvY2VzcydzIG1lbW9yeSBtYW5hZ2VyLiBCdXQsIGlzIHRoZSBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBWTUEgKGB6Y192bWEtXHUwMDNlc2tgKSBnZXR0aW5nIHZlcmlmaWVkIGhlcmU/IEhtbSwgbm8sIEkgZG9uJ3Qgc2VlIGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBUaGUgY2hlY2sgZm9yIGB2bWEtXHUwMDNldm1fb3BzID09IFx1MDAyNnRjcF92bV9vcHNgIGFuZCBgemNfdm1hIFx1MDAyNlx1MDAyNiB6Y192bWEtXHUwMDNlbW0gPT0gbW1gIGlzIGluIHBsYWNlLCBidXQgc2hvdWxkIHdlIGJlIGFsc28gYXNzZXJ0aW5nIHRoYXQgYHpjX3ZtYS1cdTAwM2VzayA9PSBza2AgdG8gZW5zdXJlIHRoaXMgVk1BIGJlbG9uZ3MgdG8gdGhpcyBzb2NrZXQ/IEl0IGZlZWxzIGxpa2Ugd2UgY291bGQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBpZiB0aGlzIGlzbid0IGNvcnJlY3RseSB2YWxpZGF0ZWQuXG5cbk9rYXksIGxldCBtZSBicm9hZGVuIG15IHNlYXJjaCBub3cuIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgemNfdm1hYCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSdsbCBzZWFyY2ggZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIGB6Y192bWFgIGFuZCBpdHMgbWVtYmVycywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgY29uZmlybSBpZiBzdWNoIGEgY2hlY2sgaXMgcmVhbGx5IG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGVyZSBpdCBuZWVkcyB0byBiZSBwbGFjZWQuIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoIHRvIHNlZSB3aGVyZSBpdCdzIGFsbCBkZWZpbmVkIGFuZCB1c2VkIHRvIG1hcCB0aGUgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQ4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6NDQuODAxMjIwMDk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUyMjM2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjX3ZtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xODU4PXZvaWQgdGNwX3NldF9yY3ZidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTg2My0jaWZkZWYgQ09ORklHX01NVVxcbm5ldC9pcHY0L3RjcC5jOjE4NjQ6c3RydWN0IHRjcF96Y192bWEge1xcbm5ldC9pcHY0L3RjcC5jLTE4NjUtXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE4ODY9c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTA3LVxcbm5ldC9pcHY0L3RjcC5jOjE5MDg6c3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm5ldC9pcHY0L3RjcC5jLTE5MDkte1xcbm5ldC9pcHY0L3RjcC5jOjE5MTA6XFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbm5ldC9pcHY0L3RjcC5jLTE5MTEtXFxubmV0L2lwdjQvdGNwLmM6MTkxMjpcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250KTtcXG5uZXQvaXB2NC90Y3AuYy0xOTEzLX1cXG5uZXQvaXB2NC90Y3AuYy0xOTE0LVxcbm5ldC9pcHY0L3RjcC5jOjE5MTU6c3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5uZXQvaXB2NC90Y3AuYy0xOTE2LXtcXG5uZXQvaXB2NC90Y3AuYzoxOTE3OlxcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG5uZXQvaXB2NC90Y3AuYy0xOTE4LVxcbm5ldC9pcHY0L3RjcC5jOjE5MTk6XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2emNfdm1hLVxcdTAwM2VyZWZjbnQpKSB7XFxubmV0L2lwdjQvdGNwLmM6MTkyMDpcXHRcXHR0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS1cXHUwMDNlc2ssIHpjX3ZtYS1cXHUwMDNlbnJfcGFnZXMpO1xcbm5ldC9pcHY0L3RjcC5jOjE5MjE6XFx0XFx0bW1kcm9wKHpjX3ZtYS1cXHUwMDNlbW0pO1xcbm5ldC9pcHY0L3RjcC5jOjE5MjI6XFx0XFx0c29ja19wdXQoemNfdm1hLVxcdTAwM2Vzayk7XFxubmV0L2lwdjQvdGNwLmM6MTkyMzpcXHRcXHRrZnJlZSh6Y192bWEpO1xcbm5ldC9pcHY0L3RjcC5jLTE5MjQtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XFxubmV0L2lwdjQvdGNwLmM6MTkyODpcXHQub3BlbiA9IHRjcF96Y192bWFfb3BlbixcXG5uZXQvaXB2NC90Y3AuYzoxOTI5OlxcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXFxubmV0L2lwdjQvdGNwLmMtMTkzMC19O1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTkzMj1pbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTM0LXtcXG5uZXQvaXB2NC90Y3AuYzoxOTM1OlxcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWE7XFxubmV0L2lwdjQvdGNwLmMtMTkzNi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTk0NS1cXHRucl9wYWdlcyA9ICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxubmV0L2lwdjQvdGNwLmM6MTk0NjpcXHR6Y192bWEgPSBrbWFsbG9jX29iaigqemNfdm1hLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm5ldC9pcHY0L3RjcC5jOjE5NDc6XFx0aWYgKCF6Y192bWEpXFxubmV0L2lwdjQvdGNwLmMtMTk0OC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvaXB2NC90Y3AuYy0xOTQ5LVxcbm5ldC9pcHY0L3RjcC5jOjE5NTA6XFx0emNfdm1hLVxcdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xcbm5ldC9pcHY0L3RjcC5jOjE5NTE6XFx0emNfdm1hLVxcdTAwM2VtbSA9IHZtYS1cXHUwMDNldm1fbW07XFxubmV0L2lwdjQvdGNwLmM6MTk1MjpcXHR6Y192bWEtXFx1MDAzZXNrID0gc29jay1cXHUwMDNlc2s7XFxubmV0L2lwdjQvdGNwLmM6MTk1MzpcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250LCAxKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU0OlxcdG1tZ3JhYih6Y192bWEtXFx1MDAzZW1tKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU1OlxcdHNvY2tfaG9sZCh6Y192bWEtXFx1MDAzZXNrKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU2OlxcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXFx1MDAzZXNrLCBucl9wYWdlcykpIHtcXG5uZXQvaXB2NC90Y3AuYzoxOTU3OlxcdFxcdG1tZHJvcCh6Y192bWEtXFx1MDAzZW1tKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU4OlxcdFxcdHNvY2tfcHV0KHpjX3ZtYS1cXHUwMDNlc2spO1xcbm5ldC9pcHY0L3RjcC5jOjE5NTk6XFx0XFx0a2ZyZWUoemNfdm1hKTtcXG5uZXQvaXB2NC90Y3AuYy0xOTYwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTk2My1cXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZ0Y3Bfdm1fb3BzO1xcbm5ldC9pcHY0L3RjcC5jOjE5NjQ6XFx0dm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSB6Y192bWE7XFxubmV0L2lwdjQvdGNwLmMtMTk2NS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5NjctXFxubmV0L2lwdjQvdGNwLmM6MTk2ODpzdGF0aWMgYm9vbCB0Y3BfemNfdm1hX3ZhbGlkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm5ldC9pcHY0L3RjcC5jLTE5NjktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5uZXQvaXB2NC90Y3AuYy0xOTcwLXtcXG5uZXQvaXB2NC90Y3AuYzoxOTcxOlxcdGNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG5uZXQvaXB2NC90Y3AuYy0xOTcyLVxcbm5ldC9pcHY0L3RjcC5jOjE5NzM6XFx0cmV0dXJuIHZtYS1cXHUwMDNldm1fb3BzID09IFxcdTAwMjZ0Y3Bfdm1fb3BzIFxcdTAwMjZcXHUwMDI2IHpjX3ZtYSBcXHUwMDI2XFx1MDAyNiB6Y192bWEtXFx1MDAzZW1tID09IG1tO1xcbm5ldC9pcHY0L3RjcC5jLTE5NzQtfVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjI2NT1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMjcxLVxcdGlmICh2bWEpIHtcXG5uZXQvaXB2NC90Y3AuYzoyMjcyOlxcdFxcdGlmICghdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xcbm5ldC9pcHY0L3RjcC5jLTIyNzMtXFx0XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMjgxLVxcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpO1xcbm5ldC9pcHY0L3RjcC5jOjIyODI6XFx0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcXG5uZXQvaXB2NC90Y3AuYy0yMjgzLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDo0Ni40NTM0NjU0NjFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE5NDA4NTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoIGFuZCBTYW5pdGl6ZXIgVXNhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LiBGaXJzdCwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IHdlIG5lZWQgdG8gYmUgcHJlY2lzZS4gVGhlIGNydWNpYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTiBpcyB0aGUga2V5IGhlcmUuIFN0YW5kYXJkIEtBU0FOIGNvbmZpZ3VyYXRpb25zLCBsaWtlIHRoZSB1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcgd2UncmUgbGlrZWx5IHVzaW5nLCBhcmUgYWxyZWFkeSByb2J1c3QuIFRoZXkgZ2l2ZSB1cyBhIGZ1bGwgc3VpdGUgb2YgZGVidWcgdG9vbHMg4oCTIEtBU0FOJ3Mgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4sIExPQ0tERVAgZm9yIGxvY2tpbmcgaXNzdWVzLCB0aGUgVUIgc2FuaXRpemVycywgYW5kIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBsYXNlci1mb2N1c2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlLlxuXG5UaGUgZnVuZGFtZW50YWwgcnVsZSB0aGF0IGxlYXBzIG91dDogaWYgS0FTQU4gb3IgYW55IG9mIHRoZSBvdGhlciBzdGFuZGFyZCBkZXRlY3RvcnMgY2FuIGNhdGNoIHRoZSBidWcsIEtNU0FOIGlzIHN1cGVyZmx1b3VzLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIHJlc291cmNlcy5cblxuTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGFib3V0IHNvY2tldCBhY2NvdW50aW5nIGFuZCB6ZXJvLWNvcHkgcmVjZWl2ZSBWTUFzLlxuXG4xLiAgSXQncyBpbnRyb2R1Y2luZyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhpcyBpcyBhYm91dCB0cmFja2luZy4gV2UndmUgZ290IHRoZSBhZGRpdGlvbiB0byBgc29jay5oYCBhbmQgdGhlIHJlbGV2YW50IHRyYWNlIGV2ZW50cy5cblxuMi4gIFdpdGhpbiBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCwgdGhpcyBuZXcgYFNLX01FTV9SRUNWX1pFUk9DT1BZYCBpcyBzcGVjaWZpY2FsbHkgKmF2b2lkaW5nKiB0aGUgYFNLX01FTV9TRU5EYCBicmFuY2guIEludGVyZXN0aW5nLCBpdCdzIGRpdmVydGluZyBzb21lIHNvcnQgb2YgbG9naWMuXG5cbjMuICBUaGUgYHRjcF9tbWFwYCBmdW5jdGlvbiBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB3ZSdyZSBzZWVpbmcgYWxsb2NhdGlvbiBvZiBhIGBzdHJ1Y3QgdGNwX3pjX3ZtYWAuIEl0J3MgdXNpbmcgYGttYWxsb2Nfb2JqYC4gV2FpdCBhIHNlY29uZCEgSSBuZWVkIHRvIGJlIHN1cmU7IGxldCBtZSBnbyBzdHJhaWdodCB0byB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgaG93IGBrbWFsbG9jX29iamAgd29ya3MuIFdoYXQgYXJlIHRoZSBhbGxvY2F0aW9uIGNoYXJhY3RlcmlzdGljcz8gSXMgaXQgZ29pbmcgdG8gZG8gc29tZXRoaW5nIHRoYXQgS0FTQU4gb3IgS01TQU4gd2lsbCBiZSB0cmlnZ2VyZWQgYnk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjUwLjY0NzU1MzU4M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTc4NzMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGttYWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzM9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyMy0gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTI0OiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjUtXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzUtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzNjojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzctXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgQ09VTlQpXFxuLS1cXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxcbmxpYi9kZWNvbXByZXNzX3VueHouYzoxNjQ6I2RlZmluZSBrbWFsbG9jX29iaih0eXBlKSBtYWxsb2Moc2l6ZW9mKHR5cGUpKVxcbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjUtI2RlZmluZSBrZnJlZShwdHIpIGZyZWUocHRyKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19hcnJheSh1bnNpZ25lZCBuLCBzaXplX3QgcywgZ2ZwX3QgZ2ZwKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo2ODojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjktXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSksIDApKVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6NzE6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzItXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSkgKiAoQ09VTlQpLCAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6NTIuMjAzMzQ1NTY3WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1MDA3MTA2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdGNwX3pjX3ZtYWAgU3RydWN0dXJlIGFuZCBaZXJvLUNvcHkgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBgc3RydWN0IHRjcF96Y192bWFgLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uLCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBucl9wYWdlc2AsIGBtbWAsIGByZWZjbnRgLCBhbmQgYHNrYC4gIE5vdywgSSdtIGNoZWNraW5nIGhvdyBpdCdzIGluaXRpYWxpemVkIGluIGB0Y3BfbW1hcGAuICBUaGUgYGttYWxsb2Nfb2JqYCBjYWxsIHN1Z2dlc3RzIGFsbG9jYXRpb24sIGFuZCB0aGUgc3Vic2VxdWVudCBhc3NpZ25tZW50cyB0byBlYWNoIGZpZWxkIChgbnJfcGFnZXNgLCBgbW1gLCBgc2tgKSBhbG9uZyB3aXRoIHRoZSBgcmVmY291bnRfc2V0YCBjYWxsIGNvbmZpcm1zIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGFsbCBpdHMgbWVtYmVycyEgVGhhdCdzIGdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUncyBwYWRkaW5nLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaWYgdW5pbml0aWFsaXplZCBkYXRhIHdlcmUgcmVhZC4gT24gYW1kNjQsIGJhc2VkIG9uIHRoZSBrbm93biBzaXplcyBvZiB0aG9zZSBtZW1iZXJzLCBJIGNhbiBzZWU6IGBucl9wYWdlc2AgaXMgOCBieXRlcywgYG1tYCBpcyA4IGJ5dGVzLCBgcmVmY250YCBpcyA0IGJ5dGVzLCBzbyB0aGVyZSBpcyBwYWRkaW5nIG9mIDQgYnl0ZXMsIGJlZm9yZSB0aGUgOCBieXRlcyBvZiBgc2tgLiBUaGlzIHN1bXMgdXAgdG8gYSB0b3RhbCBvZiAzMiBieXRlcyBmb3IgdGhlIHN0cnVjdC5cblxuTXkga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IG9mIHRoaXMgYHpjX3ZtYWAgZGF0YSBnZXRzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiAgSXQgYXBwZWFycyB0aGlzIHN0cnVjdHVyZSBpcyBlbnRpcmVseSBrZXJuZWwtaW50ZXJuYWwuIEl0J3Mgc3RvcmVkIGluIGB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhYCwgd2hpY2ggc2VlbXMgc2FmZSwgZnJvbSBhIGN1cnNvcnkgaW5zcGVjdGlvbi4gSSdtIHNlZWluZyBpdCdzIGFjY2Vzc2VkIHdpdGhpbiBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBhbmQgYHRjcF96Y192bWFfdmFsaWRgLCBhbmQgdGhlIGNvZGUgSSdtIHJldmlld2luZyBtYWtlcyBubyBtZW50aW9uIG9mIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0IHRvIHVzZXIgc3BhY2UuIFRoZSBhY2Nlc3NlcyBsb29rIGNvbnRyb2xsZWQsIGFuZCB0aGUgcmVmY291bnQgbWFuYWdlbWVudCBhbmQgY2xlYW51cCBpbiBgdGNwX3pjX3ZtYV9jbG9zZWAgbG9vayBjb3JyZWN0LiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBoZXJlIVxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJ20gZm9jdXNpbmcgb24gemVyby1jb3B5IG9wZXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gc29ja2V0IHJlY2VpdmUgYnVmZmVycy4gSSdtIGxvb2tpbmcgYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgcGFnZXMgZ2V0IG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgdmlhIG1lY2hhbmlzbXMgbGlrZSBgemFwX3ZtYV9yYW5nZWAgYW5kIGB2bV9pbnNlcnRfcGFnZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZmluZF90Y3Bfdm1hYCBkb2VzIG5vdCBieXBhc3MgY2hlY2tzIGZvciB0aGlzIG1hcHBpbmcuXG5cblRoZSBjaGFuZ2UgaW4gYGZpbmRfdGNwX3ZtYWAgaXMgdGhlIGNyaXRpY2FsIHBvaW50LiAgVGhlIGNvZGUgbm93IHVzZXMgYHRjcF96Y192bWFfdmFsaWRgLiAgVGhhdCdzIGEgdmVyeSBnb29kIGNoZWNrOiBgdm1hLVx1MDAzZXZtX29wcyA9PSBcdTAwMjZ0Y3Bfdm1fb3BzIFx1MDAyNlx1MDAyNiB6Y192bWEgXHUwMDI2XHUwMDI2IHpjX3ZtYS1cdTAwM2VtbSA9PSBtbWAuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IFZNQSB0eXBlLCB0aGF0IHdlIGhhdmUgdmFsaWQgcHJpdmF0ZSBkYXRhIChgemNfdm1hYCksIGFuZCB0aGF0IGl0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgYG1tYC5cblxuQWxzbywgSSBzZWUgdGhlIGFkZGl0aW9uYWwgZmxhZ3MgYFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORGAgc2V0IGluIGB0Y3BfbW1hcGAsIHdoaWNoIGFyZSBnb29kIGZvciB6ZXJvLWNvcHkuXG5cbkZpbmFsbHksIHJlZ2FyZGluZyBtZW1vcnkgY2hhcmdpbmcvdW5jaGFyZ2luZywgYHRjcF96Y19tZW1fY2hhcmdlYCBhbmQgYHRjcF96Y19tZW1fdW5jaGFyZ2VgIGNhbGwgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgYW5kIGBfX3NrX21lbV9yZWR1Y2VfYWxsb2NhdGVkYC4gSSdtIHZlcmlmeWluZyB0aGUgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gSSdtIGNoZWNraW5nIHRoYXQgd2hlbiBga2luZCA9PSBTS19NRU1fUkVDVl9aRVJPQ09QWWAsIHRoZSBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBieXBhc3MgYW55IGNoZWNrcy4gVGhlcmUgYXJlIG5vIHJlbGV2YW50IGJyYW5jaCBjb25kaXRpb25zIEkgc2VlIHRvIGNoZWNrIGZvciB0aGlzIHNwZWNpZmljIGNhc2UuIEkgd2lsbCBjaGVjayBmb3IgYW55IHRyYWNlIGV2ZW50cyBmb3IgdGhlIGJ1ZmZlciBsaW1pdHMgaW4gdGhlIGtlcm5lbC4gSSB3aWxsIHNlYXJjaCBmb3IgdGhlIHVzZXMgb2YgYHNrbWVtX2tpbmRfbmFtZXNgIHRvIHNlZS4gVGhpcyBjb25maXJtcyB0aGUgbGltaXRzIGFyZSBiZWluZyByZXNwZWN0ZWQuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGVybXMgb2YgbWVtb3J5IGV4cG9zdXJlLiBJJ3ZlIGZvY3VzZWQgb24gemVyby1jb3B5IGFzcGVjdHMgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGtleSBjaGVja3MgYXJlIGluIHBsYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzU6MDEuNzA0MDU5NTkyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza21lbV9raW5kX25hbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtMzgtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oOjM5OiNkZWZpbmUgc2ttZW1fa2luZF9uYW1lc1xcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtNDAtXFx0XFx0RU0oU0tfTUVNX1NFTkQpXFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oPTUyPXRjcF9zdGF0ZV9uYW1lc1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo1Mzpza21lbV9raW5kX25hbWVzXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTU0LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTY4LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo2OTojZGVmaW5lIHNob3dfc2ttZW1fa2luZF9uYW1lcyh2YWwpXFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo3MDpcXHRfX3ByaW50X3N5bWJvbGljKHZhbCwgc2ttZW1fa2luZF9uYW1lcylcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtNzEtXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg9OTQ9VFJBQ0VfRVZFTlQoc29ja19leGNlZWRfYnVmX2xpbWl0LFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTEzNi1cXHRcXHRfX2VudHJ5LVxcdTAwM2V3bWVtX3F1ZXVlZCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg6MTM3OlxcdFxcdHNob3dfc2ttZW1fa2luZF9uYW1lcyhfX2VudHJ5LVxcdTAwM2VraW5kKVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC0xMzgtXFx0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNTowMS43NTA1NDkwNzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjcyNzQ2ODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0cmFjZSBldmVudHMgYXJlIGRlZmluZWQsIHNvIHdlJ3JlIGdvb2QgdGhlcmU7IG5vIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIHdlJ3JlIG5vdCBmYWxsaW5nIGludG8gYSBLTVNBTi13b3J0aHkgc2l0dWF0aW9uLiBXZSBuZWVkIHRvIGNoZWNrIHRob3NlIGZvdXIgY3JpdGVyaWEsIGFuZCBJIGNhbiBzYXkgd2l0aCBjb25maWRlbmNlIHRoYXQgbm9uZSBvZiB0aGVtIGFyZSB0cmlnZ2VyZWQgaGVyZS5cblxuKiAgICoqQ3JpdGVyaW9uIDE6KiogTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZTsgc28sIG5vIHdvcnJpZXMgYWJvdXQgdW5pbml0aWFsaXplZCBmaWVsZHMgbGVha2luZyBvdXQuXG4qICAgKipDcml0ZXJpb24gMjoqKiBBbGwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHVzZS4gTm8gZGVwZW5kZW5jeSBvbiBwb3RlbnRpYWxseSBnYXJiYWdlIHZhbHVlcy5cbiogICAqKkNyaXRlcmlvbiAzOioqIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRlZCBpcyBgc3RydWN0IHRjcF96Y192bWFgLiBBbmQgaXQncyB0aG9yb3VnaGx5IGluaXRpYWxpemVkIOKAkyBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IHNldCBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uLiBObyBjaGFuY2Ugb2YgbGF0ZXIgY29kZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGl0LlxuKiAgICoqQ3JpdGVyaW9uIDQ6KiogVGhpcyBwYXRjaCBkb2Vzbid0IGFsdGVyIGFueSBidWZmZXIgYWNjZXNzIGxvZ2ljIGluIGEgd2F5IHRoYXQgcmlza3MgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBJdCBmb2N1c2VzIG9uIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzLlxuXG5XaGF0IGFib3V0IG90aGVyIHJpc2tzPyBSZWZjb3VudGluZywgVk1BIGxpZmVjeWNsZSwgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLiBCdXQgSSdtIGNvbmZpZGVudCB0aG9zZSBhcmUgYmVpbmcgYWRkcmVzc2VkIGJ5IEtBU0FOLCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbG9ja2RlcCwgcGFnZSBhbGxvY2F0b3IgY2hlY2tzLCBhbmQgVUJTQU4vV0FSTl9PTi4gVGhlc2UgYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLiBLTVNBTiB3b3VsZG4ndCBvZmZlciBhbnkgc3BlY2lmaWMgYmVuZWZpdCBoZXJlIHRoYXQgS0FTQU4gd291bGRuJ3QgYWxyZWFkeSBjb3Zlci5cblxuSSdtIGZvbGxvd2luZyB0aGUgZXhwbGljaXQgZ3VpZGFuY2U6IFRoZXJlJ3Mgbm8gcG9pbnQgaW4gcnVubmluZyBhIEtNU0FOIHNlc3Npb24gaWYgdGhlIGJ1Z3MgY2FuIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gV2UgYXJlIHNhZmUuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCByZWZjb3VudGluZywgVk1BIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIGFuZCByZWxhdGVkIGlzc3Vlcywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSB0aG9zZSB0b29scy4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB3ZSdyZSB0b3VjaGluZyBvciBpbnRyb2R1Y2luZyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgYmVpbmcgaW50cm9kdWNlZCBoZXJlLlxuXG5TbywgKk5lZWRzS01TQU49ZmFsc2UqIGlzIHRoZSBjb3JyZWN0IGNhbGwuIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjAxLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNTowOC40NzgwMzM3ODFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBsaWZlY3ljbGUgdHJhY2tpbmcgZm9yIFRDUCB6ZXJvY29weSByZWNlaXZlIFZNQXMgKHN0cnVjdCB0Y3BfemNfdm1hKS4gVGhlIG9ubHkgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlIGlzIHN0cnVjdCB0Y3BfemNfdm1hLCB3aGVyZSBhbGwgbWVtYmVyIGZpZWxkcyAobnJfcGFnZXMsIG1tLCBzaywgcmVmY250KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uIHZpYSBrbWFsbG9jX29iai4gVGhlIHN0cnVjdHVyZSBpcyBwdXJlbHkga2VybmVsLWludGVybmFsIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHJlbGF0ZSB0byByZWZlcmVuY2UgY291bnRpbmcsIG1lbW9yeSBhY2NvdW50aW5nLCBvciBWTUEgbGlmZWN5Y2xlL3VzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgcmF0aGVyIHRoYW4gS01TQU4uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 03:12:59 +0000 UTC FinishedAt: 2026-09-15 03:35:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MMU" ], "series_id": "e368a81f-631d-4d2a-86da-8b3bb3d7b3db" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_mmap", "tcp_zc_vma_open", "tcp_zc_vma_close", "tcp_zc_mem_charge", "tcp_zc_mem_uncharge", "tcp_zerocopy_receive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX21tYXAmIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9vcGVuJiMzNDssCiAgICAmIzM0O3RjcF96Y192bWFfY2xvc2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV9jaGFyZ2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV91bmNoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemVyb2NvcHlfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzICh2aWEgdGNwX21tYXAsIHRjcF96Y192bWFfb3BlbiwgYW5kIHRjcF96Y192bWFfY2xvc2UpLCB0cmFja2luZyBtbV9zdHJ1Y3QgYW5kIHNvY2sgcmVmZXJlbmNlcywgYW5kIHVwZGF0ZXMgbWVtb3J5IHJhaXNlIGFjY291bnRpbmcgaW4gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkIHdpdGggdGhlIG5ldyBTS19NRU1fUkVDVl9aRVJPQ09QWSBraW5kLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBNTSBpbnRlcmFjdGlvbiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2Ugc29ja2V0IHN5c2NhbGxzIChtbWFwLCBnZXRzb2Nrb3B0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBtdW5tYXAsIGV0Yy4pLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGZ1enogZm9yIG1lbW9yeSBhY2NvdW50aW5nLCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZDhmNmMwYjU5MzFhNDhhMTQwN2NkNTRiNmEyYTdkZDUyNmRiYzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MzE6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXG5pbmRleCA1MTE4NTIyMmFhYzI5Li5jZjE5MDU1YTljNDAxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmhcbkBAIC0xNTU2LDYgJiM0MzsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XG4gXG4gI2RlZmluZSBTS19NRU1fU0VORFx0MFxuICNkZWZpbmUgU0tfTUVNX1JFQ1ZcdDFcbiYjNDM7I2RlZmluZSBTS19NRU1fUkVDVl9aRVJPQ09QWVx0MHgxMDBcbiBcbiAvKiBzeXNjdGxfbWVtIHZhbHVlcyBhcmUgaW4gcGFnZXMgKi9cbiBzdGF0aWMgaW5saW5lIGxvbmcgc2tfcHJvdF9tZW1fbGltaXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IGluZGV4KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxuaW5kZXggYjUzMTA0Mzk1MzZlMC4uMGYxMGI5MmMxMThjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG5AQCAtMzgsNyAmIzQzOzM4LDggQEBcbiBcbiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXNcdFx0XHRcXFxuIFx0XHRFTShTS19NRU1fU0VORClcdFx0XHRcXFxuLVx0XHRFTWUoU0tfTUVNX1JFQ1YpXG4mIzQzO1x0XHRFTShTS19NRU1fUkVDVilcdFx0XHRcXFxuJiM0MztcdFx0RU1lKFNLX01FTV9SRUNWX1pFUk9DT1BZKVxuIFxuIC8qIGVudW1zIG5lZWQgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSAqL1xuICN1bmRlZiBFTVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggZmE2MGI3NDk0YzU4Ni4uM2Q4NWMxMzhlMWM3MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMzM4MCw3ICYjNDM7MzM4MCw3IEBAIGludCBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGFtdCwgaW50IGtpbmQpXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2Mgc2tfZ2V0X3JtZW0wKHNrLCBwcm90KSlcbiBcdFx0XHRyZXR1cm4gMTtcbiBcbi1cdH0gZWxzZSB7IC8qIFNLX01FTV9TRU5EICovXG4mIzQzO1x0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4gXHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI2Nyw2ICYjNDM7MjY3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2tleS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuQEAgLTE4NjAsMjMgJiM0MzsxODYxLDExOCBAQCB2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiYjNDM7c3RydWN0IHRjcF96Y192bWEge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0cmVmY291bnRfdCByZWZjbnQ7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogS2VlcCB0aGUgc2l6ZSBhcmd1bWVudCB0byBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQoKSB3aXRoaW4gaW50LiAqL1xuJiM0MzsjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjaHVuaztcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4mIzQzO1x0XHRjaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLFxuJiM0MztcdFx0XHQgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTtcbiYjNDM7XHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbiYjNDM7XHRcdG5yX3BhZ2VzIC09IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNoYXJnZWQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBjaHVuaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobnJfcGFnZXMpIHtcbiYjNDM7XHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xuJiM0MztcdFx0cmV0ID0gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHNrLCBjaHVuayBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpO1xuJiM0MztcdFx0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdFx0dGNwX3pjX21lbV91bmNoYXJnZShzaywgY2hhcmdlZCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2hhcmdlZCAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRucl9wYWdlcyAtPSBjaHVuaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmVmY291bnRfaW5jKFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbiYjNDM7XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCB6Y192bWEtXHUwMDNlbnJfcGFnZXMpO1xuJiM0MztcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4mIzQzO1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuJiM0MztcdFx0a2ZyZWUoemNfdm1hKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0ge1xuJiM0MztcdC5vcGVuID0gdGNwX3pjX3ZtYV9vcGVuLFxuJiM0MztcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG4gfTtcbiBcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4mIzQzO1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQyk7XG4gXG4gXHQvKiBJbnN0cnVjdCB2bV9pbnNlcnRfcGFnZSgpIHRvIG5vdCBtbWFwX3JlYWRfbG9jayhtbSkgKi9cbi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTtcbiYjNDM7XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9NSVhFRE1BUCk7XG4mIzQzO1xuJiM0MztcdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdHpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0aWYgKCF6Y192bWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0emNfdm1hLVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4mIzQzO1x0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xuJiM0MztcdHpjX3ZtYS1cdTAwM2VzayA9IHNvY2stXHUwMDNlc2s7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQsIDEpO1xuJiM0MztcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xuJiM0MztcdHNvY2tfaG9sZCh6Y192bWEtXHUwMDNlc2spO1xuJiM0MztcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXHUwMDNlc2ssIG5yX3BhZ2VzKSkge1xuJiM0MztcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4mIzQzO1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuJiM0MztcdFx0a2ZyZWUoemNfdm1hKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiBcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ0Y3Bfdm1fb3BzO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSB6Y192bWE7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZtYS1cdTAwM2V2bV9vcHMgPT0gXHUwMDI2dGNwX3ZtX29wcyBcdTAwMjZcdTAwMjYgemNfdm1hIFx1MDAyNlx1MDAyNiB6Y192bWEtXHUwMDNlbW0gPT0gbW07XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHNrYl9mcmFnX3QgKnNrYl9hZHZhbmNlX3RvX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldF9za2IsXG4gXHRcdFx0XHQgICAgICAgdTMyICpvZmZzZXRfZnJhZylcbiB7XG5AQCAtMjE3Myw3ICYjNDM7MjI2OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcbiBcdGlmICh2bWEpIHtcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuJiM0MztcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG4gXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC0yMTgzLDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuIFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcmVzcyk7XG4tXHRpZiAoIXZtYSB8fCB2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbiYjNDM7XHRpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfbW1hcCYjMzQ7LAogICAgJiMzNDt0Y3BfemNfdm1hX29wZW4mIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9jbG9zZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX2NoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGQ4ZjZjMGI1OTMxYTQ4YTE0MDdjZDU0YjZhMmE3ZGQ1MjZkYmM2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAzOjMxOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmNmMTkwNTVhOWM0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTE1NTYsNiAmIzQzOzE1NTYsNyBAQCB2b2lkIF9fc2tfbWVtX3JlY2xhaW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgYW1vdW50KTsKIAogI2RlZmluZSBTS19NRU1fU0VORAkwCiAjZGVmaW5lIFNLX01FTV9SRUNWCTEKJiM0MzsjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZCTB4MTAwCiAKIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqLwogc3RhdGljIGlubGluZSBsb25nIHNrX3Byb3RfbWVtX2xpbWl0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBpbmRleCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaAppbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oCkBAIC0zOCw3ICYjNDM7MzgsOCBAQAogCiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXMJCQlcCiAJCUVNKFNLX01FTV9TRU5EKQkJCVwKLQkJRU1lKFNLX01FTV9SRUNWKQomIzQzOwkJRU0oU0tfTUVNX1JFQ1YpCQkJXAomIzQzOwkJRU1lKFNLX01FTV9SRUNWX1pFUk9DT1BZKQogCiAvKiBlbnVtcyBuZWVkIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgKi8KICN1bmRlZiBFTQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGZhNjBiNzQ5NGM1ODYuLjNkODVjMTM4ZTFjNzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTMzODAsNyAmIzQzOzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKQogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtzay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmx0OyBza19nZXRfcm1lbTAoc2ssIHByb3QpKQogCQkJcmV0dXJuIDE7CiAKLQl9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqLwomIzQzOwl9IGVsc2UgaWYgKGtpbmQgPT0gU0tfTUVNX1NFTkQpIHsKIAkJaW50IHdtZW0wID0gc2tfZ2V0X3dtZW0wKHNrLCBwcm90KTsKIAogCQlpZiAoc2stJmd0O3NrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI2Nyw2ICYjNDM7MjY3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0YXRpY19rZXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2luZXRfY29tbW9uLmgmZ3Q7CkBAIC0xODYwLDIzICYjNDM7MTg2MSwxMTggQEAgdm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpCiB9CiAKICNpZmRlZiBDT05GSUdfTU1VCiYjNDM7c3RydWN0IHRjcF96Y192bWEgewomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJcmVmY291bnRfdCByZWZjbnQ7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi8KJiM0MzsjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggJmd0OyZndDsgUEFHRV9TSElGVCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjaHVuazsKJiM0MzsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzKSB7CiYjNDM7CQljaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAomIzQzOwkJCSAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspOwomIzQzOwkJX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZChzaywgY2h1bmspOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNoYXJnZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgY2h1bms7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlIChucl9wYWdlcykgewomIzQzOwkJY2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcywKJiM0MzsJCQkgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTsKJiM0MzsJCXJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCSAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpOwomIzQzOwkJaWYgKCFyZXQpIHsKJiM0MzsJCQl0Y3BfemNfbWVtX3VuY2hhcmdlKHNrLCBjaGFyZ2VkKTsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCX0KJiM0MzsJCWNoYXJnZWQgJiM0Mzs9IGNodW5rOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7emNfdm1hLSZndDtyZWZjbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQpKSB7CiYjNDM7CQl0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIHpjX3ZtYS0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0gewomIzQzOwkub3BlbiA9IHRjcF96Y192bWFfb3BlbiwKJiM0MzsJLmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSwKIH07CiAKIGludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewomIzQzOwlzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9XUklURSB8IFZNX0VYRUMpKQogCQlyZXR1cm4gLUVQRVJNOwogCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKTsKIAogCS8qIEluc3RydWN0IHZtX2luc2VydF9wYWdlKCkgdG8gbm90IG1tYXBfcmVhZF9sb2NrKG1tKSAqLwotCXZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTsKJiM0MzsJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTUlYRURNQVApOwomIzQzOwomIzQzOwlucl9wYWdlcyA9ICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghemNfdm1hKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXpjX3ZtYS0mZ3Q7bnJfcGFnZXMgPSBucl9wYWdlczsKJiM0MzsJemNfdm1hLSZndDttbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CXpjX3ZtYS0mZ3Q7c2sgPSBzb2NrLSZndDtzazsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQsIDEpOwomIzQzOwltbWdyYWIoemNfdm1hLSZndDttbSk7CiYjNDM7CXNvY2tfaG9sZCh6Y192bWEtJmd0O3NrKTsKJiM0MzsJaWYgKHRjcF96Y19tZW1fY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIG5yX3BhZ2VzKSkgewomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt0Y3Bfdm1fb3BzOwomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHpjX3ZtYTsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtYS0mZ3Q7dm1fb3BzID09ICZhbXA7dGNwX3ZtX29wcyAmYW1wOyZhbXA7IHpjX3ZtYSAmYW1wOyZhbXA7IHpjX3ZtYS0mZ3Q7bW0gPT0gbW07CiYjNDM7fQomIzQzOwogc3RhdGljIHNrYl9mcmFnX3QgKnNrYl9hZHZhbmNlX3RvX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldF9za2IsCiAJCQkJICAgICAgIHUzMiAqb2Zmc2V0X2ZyYWcpCiB7CkBAIC0yMTczLDcgJiM0MzsyMjY5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAogCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwkJaWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7CiAJCQl2bWFfZW5kX3JlYWQodm1hKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yMTgzLDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJbW1hcF9yZWFkX2xvY2sobW0pOwogCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpOwotCWlmICghdm1hIHx8IHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwlpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlplcm8tQ29weSBSZWNlaXZlIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc29tZSBjaGFuZ2VzIHRoYXQgSSBuZWVkIHRvIGRpc3NlY3QuIEZpcnN0IG9mZiwgaXQmIzM5O3MgYWRkaW5nIGBTS19NRU1fUkVDVl9aRVJPQ09QWWAgYXMgYSBuZXcgbWVtb3J5IGtpbmQsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAgYW5kIHRoZW4gcmVmZXJlbmNlZCBpbiB0aGUgdHJhY2UgZXZlbnRzIGluIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWVhbnMgaXQmIzM5O3MgcmVsYXRlZCB0byB0cmFja2luZyBtZW1vcnkgdXNhZ2UgZm9yIHplcm8tY29weSByZWNlaXZlcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpJbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGZ1bmN0aW9uIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2UgaGVyZSBpcyBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQ6IHRoZSBgZWxzZWAgYmxvY2sgZm9yIGBTS19NRU1fU0VORGAgaXMgbm93IGV4cGxpY2l0bHkgY2hlY2tlZC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgbm93IGhhbmRsaW5nIHRoZSBuZXcgYFNLX01FTV9SRUNWX1pFUk9DT1BZYCBraW5kIG1vcmUgZXhwbGljaXRseSBpbiB0aGlzIGZ1bmN0aW9uIHdoaWNoIGNvdWxkIGJlIGNydWNpYWwgZm9yIGFjY291bnRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdHJhY2tpbmcgaGFzIGJlZW4gbW9kaWZpZWQuCgpOb3cgZm9yIHRoZSBtZWF0IG9mIGl0OiB0aGUgYG5ldC9pcHY0L3RjcC5jYCBjaGFuZ2VzLCBhbGwgdW5kZXIgdGhlIGAjaWZkZWYgQ09ORklHX01NVWAgZ3VhcmQuIFRoaXMgc2NyZWFtcyAmIzM0O21lbW9yeSBtYW5hZ2VtZW50JiMzNDsgYW5kIHplcm8tY29weSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGVhcmxpZXIgYWRkaXRpb25zLiBBIG5ldyBgc3RydWN0IHRjcF96Y192bWFgIGlzIGRlZmluZWQsIHdpdGggcmVmY291bnRpbmcsIGFuZCByZWZlcmVuY2VzIHRvIHBhZ2VzLCBtZW1vcnkgbWFwcGluZywgYW5kIHRoZSBzb2NrZXQuIFdlIGhhdmUgY2hhcmdlL3VuY2hhcmdlIGZ1bmN0aW9ucyAoYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgKSBhbmQgb3Blbi9jbG9zZSBmdW5jdGlvbnMgZm9yIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgKS4gVGhpcyBtYWtlcyBtZSB0aGluayB0aGlzIHBhdGNoIGlzIGRpcmVjdGx5IGltcGxlbWVudGluZyB6ZXJvLWNvcHkgbW1hcCBzdXBwb3J0LgoKVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHRjcF9tbWFwYCBhcmUgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYFZNX0RPTlRDT1BZYCwgYFZNX0RPTlRFWFBBTkRgLCBhbmQgYFZNX01JWEVETUFQYCBhcmUgYmVpbmcgc2V0IG9uIHRoZSBWTUEuIFRoaXMgaXMgdmVyeSBzdGFuZGFyZCBmb3IgYSB6ZXJvLWNvcHkgaW1wbGVtZW50YXRpb24uIEEgYHpjX3ZtYWAgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBzb2NrZXQgbWVtb3J5IGNoYXJnZWQgdmlhIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGFuZCBtb3N0IGltcG9ydGFudGx5IGBtbWAgYW5kIGBza2AgYXJlIGJlaW5nIGhlbGQgd2l0aGluIHRoZSBgdm1hYCwgcHJlc3VtYWJseSBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuCgpGaW5hbGx5LCBgdGNwX3pjX3ZtYV92YWxpZGAgYW5kIHRoZSB1cGRhdGVzIHRvIGBmaW5kX3RjcF92bWFgIGFyZSBhZGRlZC4gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgdmFsaWQgZmxhZyBpcyBjaGVja2VkLgoKVG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB0Y3BfbW1hcGAgYW5kIGBmaW5kX3RjcF92bWFgIGFyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGBuZXQvaXB2NC90Y3AuY2AuIEl0JiMzOTtzIHRpbWUgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgVENQIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX3RjcF92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMjM5PXN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyNjQtXG5uZXQvaXB2NC90Y3AuYzoyMjY1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm5ldC9pcHY0L3RjcC5jLTIyNjYtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMjkxPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIzMzEtXG5uZXQvaXB2NC90Y3AuYzoyMzMyOlx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXHUwMDNlbW0sIGFkZHJlc3MsIFx1MDAyNm1tYXBfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTIzMzMtXHRpZiAoIXZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9pcHY0L3RjcC5jYCBhbmQgc3BlY2lmaWNhbGx5IGhvbmUgaW4gYXJvdW5kIGxpbmUgMjI5MS4gTXkgYWltIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIGltcGxlbWVudGVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLCB0aGUgb3B0aW1pemF0aW9ucywgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4uLiBhbGwgdGhlIGp1aWN5IGRldGFpbHMgYmVoaW5kIHRoZSBzY2VuZXMuIFplcm8tY29weSBpcyBhIHBlcmZvcm1hbmNlIGdhbWUtY2hhbmdlciwgc28gdW5kZXJzdGFuZGluZyBpdHMgVENQIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGVmZmljaWVudCBuZXR3b3JrIHByb2dyYW1taW5nLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IGRhdGEgYnVmZmVycyBhcmUgbWFuYWdlZCwgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdXNlciBzcGFjZSwgdGhlIHJvbGUgb2YgRE1BLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29tcGxleGl0aWVzIGluIHRoZSBzeW5jaHJvbml6YXRpb24uIFRoaXMgd2lsbCB0ZWxsIG1lIGEgbG90IG1vcmUgdGhhbiBhbnkgYWJzdHJhY3QgZGVzY3JpcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI4NTpcdFx0fVxuMjI4NjpcdFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcbjIyODc6XHRcdHJldHVybiB2bWE7XG4yMjg4Olx0fVxuMjI4OTpcdFxuMjI5MDpcdCNkZWZpbmUgVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRSAzMlxuMjI5MTpcdHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuMjI5MjpcdFx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcbjIyOTM6XHRcdFx0XHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXG4yMjk0Olx0e1xuMjI5NTpcdFx0dTMyIGxlbmd0aCA9IDAsIG9mZnNldCwgdm1hX2xlbiwgYXZhaWxfbGVuLCBjb3B5bGVuID0gMDtcbjIyOTY6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXpjLVx1MDAzZWFkZHJlc3M7XG4yMjk3Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZXNbVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRV07XG4yMjk4Olx0XHRzMzIgY29weWJ1Zl9sZW4gPSB6Yy1cdTAwM2Vjb3B5YnVmX2xlbjtcbjIyOTk6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMjMwMDpcdFx0Y29uc3Qgc2tiX2ZyYWdfdCAqZnJhZ3MgPSBOVUxMO1xuMjMwMTpcdFx0dW5zaWduZWQgaW50IHBhZ2VzX3RvX21hcCA9IDA7XG4yMzAyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbjIzMDM6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuMjMwNDpcdFx0dTMyIHNlcSA9IHRwLVx1MDAzZWNvcGllZF9zZXE7XG4yMzA1Olx0XHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xuMjMwNjpcdFx0aW50IGlucSA9IHRjcF9pbnEoc2spO1xuMjMwNzpcdFx0Ym9vbCBtbWFwX2xvY2tlZDtcbjIzMDg6XHRcdGludCByZXQ7XG4yMzA5Olx0XG4yMzEwOlx0XHR6Yy1cdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XG4yMzExOlx0XHR6Yy1cdTAwM2Vtc2dfZmxhZ3MgPSAwO1xuMjMxMjpcdFxuMjMxMzpcdFx0aWYgKGFkZHJlc3MgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fCBhZGRyZXNzICE9IHpjLVx1MDAzZWFkZHJlc3MpXG4yMzE0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMxNTpcdFxuMjMxNjpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pXG4yMzE3Olx0XHRcdHJldHVybiAtRU5PVENPTk47XG4yMzE4Olx0XG4yMzE5Olx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4yMzIwOlx0XG4yMzIxOlx0XHRpZiAoaW5xIFx1MDAyNlx1MDAyNiBpbnEgXHUwMDNjPSBjb3B5YnVmX2xlbilcbjIzMjI6XHRcdFx0cmV0dXJuIHJlY2VpdmVfZmFsbGJhY2tfdG9fY29weShzaywgemMsIGlucSwgdHNzKTtcbjIzMjM6XHRcbjIzMjQ6XHRcdGlmIChpbnEgXHUwMDNjIFBBR0VfU0laRSkge1xuMjMyNTpcdFx0XHR6Yy1cdTAwM2VsZW5ndGggPSAwO1xuMjMyNjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGlucTtcbjIzMjc6XHRcdFx0aWYgKCFpbnEgXHUwMDI2XHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbjIzMjg6XHRcdFx0XHRyZXR1cm4gLUVJTztcbjIzMjk6XHRcdFx0cmV0dXJuIDA7XG4yMzMwOlx0XHR9XG4yMzMxOlx0XG4yMzMyOlx0XHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cdTAwM2VtbSwgYWRkcmVzcywgXHUwMDI2bW1hcF9sb2NrZWQpO1xuMjMzMzpcdFx0aWYgKCF2bWEpXG4yMzM0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMzNTpcdFxuMjMzNjpcdFx0dm1hX2xlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpjLVx1MDAzZWxlbmd0aCwgdm1hLVx1MDAzZXZtX2VuZCAtIGFkZHJlc3MpO1xuMjMzNzpcdFx0YXZhaWxfbGVuID0gbWluX3QodTMyLCB2bWFfbGVuLCBpbnEpO1xuMjMzODpcdFx0dG90YWxfYnl0ZXNfdG9fbWFwID0gYXZhaWxfbGVuIFx1MDAyNiB+KFBBR0VfU0laRSAtIDEpO1xuMjMzOTpcdFx0aWYgKHRvdGFsX2J5dGVzX3RvX21hcCkge1xuMjM0MDpcdFx0XHRpZiAoISh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgVENQX1JFQ0VJVkVfWkVST0NPUFlfRkxBR19UTEJfQ0xFQU5fSElOVCkpXG4yMzQxOlx0XHRcdFx0emFwX3ZtYV9yYW5nZSh2bWEsIGFkZHJlc3MsIHRvdGFsX2J5dGVzX3RvX21hcCk7XG4yMzQyOlx0XHRcdHpjLVx1MDAzZWxlbmd0aCA9IHRvdGFsX2J5dGVzX3RvX21hcDtcbjIzNDM6XHRcdFx0emMtXHUwMDNlcmVjdl9za2lwX2hpbnQgPSAwO1xuMjM0NDpcdFx0fSBlbHNlIHtcbjIzNDU6XHRcdFx0emMtXHUwMDNlbGVuZ3RoID0gYXZhaWxfbGVuO1xuMjM0NjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGF2YWlsX2xlbjtcbjIzNDc6XHRcdH1cbjIzNDg6XHRcdHJldCA9IDA7XG4yMzQ5Olx0XHR3aGlsZSAobGVuZ3RoICYjNDM7IFBBR0VfU0laRSBcdTAwM2M9IHpjLVx1MDAzZWxlbmd0aCkge1xuMjM1MDpcdFx0XHRpbnQgbWFwcGFibGVfb2Zmc2V0O1xuMjM1MTpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjIzNTI6XHRcbjIzNTM6XHRcdFx0aWYgKHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50IFx1MDAzYyBQQUdFX1NJWkUpIHtcbjIzNTQ6XHRcdFx0XHR1MzIgb2Zmc2V0X2ZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFplcm9jb3B5IFJlY2VpdmUqKgoKT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgdGNwX21tYXBgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHNvbWVvbmUgY2FsbHMgYG1tYXAoZmQpYCBvbiBhIFRDUCBzb2NrZXQuIFRoYXQgbWFrZXMgc2Vuc2UsIGNvbm5lY3RzIHRoZSBzeXN0ZW0gY2FsbCB0byB0aGUgcmlnaHQga2VybmVsIGZ1bmN0aW9uLiBBbmQgdGhlIGNvbnRleHQgaW1tZWRpYXRlbHkgY2xhcmlmaWVzIHRoYXQgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIFRDUCB6ZXJvY29weSByZWNlaXZlLiBJJiMzOTttIHJlY2FsbGluZyBub3cgdGhhdCB0aGlzIDAtY29weSByZWNlaXZlIGZlYXR1cmUgaXMgZW5hYmxlZCB2aWEgYGdldHNvY2tvcHQoLi4uLCBTT0xfVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgLi4uKWAuIFRoYXQgdHJpZ2dlcnMgYHRjcF9tbWFwYCwgcmlnaHQ/IEdvdCBpdC4gTm93IEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc29ja2V0IG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzIGF0IGEgbG93ZXIgbGV2ZWwuIExldCBtZSBjaGVjayBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBhY3R1YWxseSBnZXRzIHRyYW5zZmVycmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XG4zMzcxOlx0XHQvKiBHdWFyYW50ZWUgbWluaW11bSBidWZmZXIgc2l6ZSB1bmRlciBwcmVzc3VyZSAoZWl0aGVyIGdsb2JhbFxuMzM3MjpcdFx0ICogb3IgbWVtY2cpIHRvIG1ha2Ugc3VyZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gUkZDIDczMjMgKFRDUFxuMzM3MzpcdFx0ICogRXh0ZW5zaW9ucyBmb3IgSGlnaCBQZXJmb3JtYW5jZSkgd29yayBwcm9wZXJseS5cbjMzNzQ6XHRcdCAqXG4zMzc1Olx0XHQgKiBUaGlzIHJ1bGUgZG9lcyBOT1Qgc3RhbmQgd2hlbiBleGNlZWRzIGdsb2JhbCBvciBtZW1jZyYjMzk7cyBoYXJkXG4zMzc2Olx0XHQgKiBsaW1pdCwgb3IgZWxzZSBhIERvUyBhdHRhY2sgY2FuIGJlIHRha2VuIHBsYWNlIGJ5IHNwYXduaW5nXG4zMzc3Olx0XHQgKiBsb3RzIG9mIHNvY2tldHMgd2hvc2UgdXNhZ2UgYXJlIHVuZGVyIG1pbmltdW0gYnVmZmVyIHNpemUuXG4zMzc4Olx0XHQgKi9cbjMzNzk6XHRcdGlmIChraW5kID09IFNLX01FTV9SRUNWKSB7XG4zMzgwOlx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2Mgc2tfZ2V0X3JtZW0wKHNrLCBwcm90KSlcbjMzODE6XHRcdFx0XHRyZXR1cm4gMTtcbjMzODI6XHRcbjMzODM6XHRcdH0gZWxzZSBpZiAoa2luZCA9PSBTS19NRU1fU0VORCkge1xuMzM4NDpcdFx0XHRpbnQgd21lbTAgPSBza19nZXRfd21lbTAoc2ssIHByb3QpO1xuMzM4NTpcdFxuMzM4NjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuMzM4NzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza193bWVtX3F1ZXVlZCBcdTAwM2Mgd21lbTApXG4zMzg4Olx0XHRcdFx0XHRyZXR1cm4gMTtcbjMzODk6XHRcdFx0fSBlbHNlIGlmIChyZWZjb3VudF9yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3dtZW1fYWxsb2MpIFx1MDAzYyB3bWVtMCkge1xuMzM5MDpcdFx0XHRcdFx0cmV0dXJuIDE7XG4zMzkxOlx0XHRcdH1cbjMzOTI6XHRcdH1cbjMzOTM6XHRcbjMzOTQ6XHRcdGlmIChza19oYXNfbWVtb3J5X3ByZXNzdXJlKHNrKSkge1xuMzM5NTpcdFx0XHR1NjQgYWxsb2M7XG4zMzk2Olx0XG4zMzk3Olx0XHRcdC8qIFRoZSBmb2xsb3dpbmcgJiMzOTthdmVyYWdlJiMzOTsgaGV1cmlzdGljIGlzIHdpdGhpbiB0aGVcbjMzOTg6XHRcdFx0ICogc2NvcGUgb2YgZ2xvYmFsIGFjY291bnRpbmcsIHNvIGl0IG9ubHkgbWFrZXNcbjMzOTk6XHRcdFx0ICogc2Vuc2UgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUuXG4zNDAwOlx0XHRcdCAqL1xuMzQwMTpcdFx0XHRpZiAoIXNrX3VuZGVyX2dsb2JhbF9tZW1vcnlfcHJlc3N1cmUoc2spKVxuMzQwMjpcdFx0XHRcdHJldHVybiAxO1xuMzQwMzpcdFxuMzQwNDpcdFx0XHQvKiBUcnkgdG8gYmUgZmFpciBhbW9uZyBhbGwgdGhlIHNvY2tldHMgdW5kZXIgZ2xvYmFsXG4zNDA1Olx0XHRcdCAqIHByZXNzdXJlIGJ5IGFsbG93aW5nIHRoZSBvbmVzIHRoYXQgYmVsb3cgYXZlcmFnZVxuMzQwNjpcdFx0XHQgKiB1c2FnZSB0byByYWlzZS5cbjM0MDc6XHRcdFx0ICovXG4zNDA4Olx0XHRcdGFsbG9jID0gc2tfc29ja2V0c19hbGxvY2F0ZWRfcmVhZF9wb3NpdGl2ZShzayk7XG4zNDA5Olx0XHRcdGlmIChza19wcm90X21lbV9saW1pdHMoc2ssIDIpIFx1MDAzZSBhbGxvYyAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWmVyby1Db3B5IFRDUCBtbWFwOiBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzIGFuZCBGdXp6aW5nIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkmIzM5O3ZlIGdvdCBzb21lIGNvbmNlcm5zIGFib3V0IGhvdyB6ZXJvLWNvcHkgaXMgYmVpbmcgaW1wbGVtZW50ZWQgZm9yIFRDUCBzb2NrZXRzLiBJdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBsb2dpYyBpbiBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCBjaGVja2VkIGVpdGhlciByZWNlaXZlIG9yIHNlbmQgbWVtb3J5IGxpbWl0cyBiYXNlZCBvbiB0aGUgc29ja2V0JiMzOTtzIHJlY2VpdmUgb3Igc2VuZCBmbGFncy4gQnV0IG5vdywgd2l0aCBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCBpdCBieXBhc3NlcyB0aG9zZSBjaGVja3MgZW50aXJlbHkhIFRoYXQgZmVlbHMuLi4gcmlza3kuCgpUaGVuLCB0aGVyZSYjMzk7cyBgdGNwX21tYXBgLiBJdCBzZXRzIHRoZXNlIGBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9NSVhFRE1BUGAgZmxhZ3Mgb24gdGhlIFZNQSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHplcm8tY29weS4gVGhlIGNvZGUgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBhbGxvY2F0ZXMgYSBgemNfdm1hYCBzdHJ1Y3R1cmUsIGFuZCBjaGFyZ2VzIHNvY2tldCBtZW1vcnkgdXNpbmcgYHRjcF96Y19tZW1fY2hhcmdlYC4gVGhhdCBtdWNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIFZNQSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tYCkgYW5kIHRoZSBzb2NrZXQgKGBza2ApLiAgV2hlbiB0aGUgVk1BIGlzIGNsb3NlZCBieSB0aGUgdXNlciwgdGhlIHJlZmNvdW50IGdldHMgZGVjcmVtZW50ZWQsIHRoZSBtZW1vcnkgdW5jaGFyZ2VkLCBhbmQgdGhlbiBhbGwgdGhlIG1lbW9yeSB1c2VkIGlzIGZyZWVkLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGF0IGlmIHRoZSBWTUEgaXMgc3BsaXQsIGxpa2UgYnkgYG11bm1hcGAgb3IgYG1wcm90ZWN0YD8gIGB0Y3BfemNfdm1hX29wZW5gIGlzIGNhbGxlZCB0byBpbmNyZW1lbnQgdGhlIHJlZmNvdW50IHdoZW4gdGhlIFZNQSBpcyBzcGxpdC9jbG9uZWQuICBIZXJlJiMzOTtzIHRoZSBwcm9ibGVtOiBUaGUgaW5pdGlhbCBjaGFyZ2UgaGFwcGVucyBvbmx5IG9uY2UgaW4gYHRjcF9tbWFwYC4gSG93ZXZlciwgaWYgSSBzcGxpdCB0aGUgVk1BIGluIGFueSB3YXkgYnkgYG11bm1hcGAsIGBtcHJvdGVjdGAsIG9yIGV2ZW4gYG1hZHZpc2VgLCB0aGVuIGJvdGggVk1BJiMzOTtzIHBvaW50IHRvIHRoZSBzYW1lIGB6Y192bWFgIGFuZCB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgZm9yIGJvdGguICBJZiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIFZNQSBpcyBjbG9zZWQsIHRoZSByZWZjb3VudCBpcyBkZWNyZW1lbnRlZC4gVGhlbiB0aGUgZmluYWwgY2xvc2Ugb2YgdGhlIG9yaWdpbmFsIFZNQSB1bmNoYXJnZXMgdGhlIG9yaWdpbmFsIGFtb3VudCBvZiBwYWdlcyEgVGhpcyBtZWFucyBtZW1vcnkgY291bGQgYmUgb3ZlcmNoYXJnZWQuCgpXYWl0IGEgc2Vjb25kIC0gd2hhdCBpZiBJIGBtdW5tYXBgICpwYXJ0KiBvZiBpdD8gSWYgSSB1bm1hcCB0aGUgbWlkZGxlIG9mIHRoZSBWTUEsIHRoZW4gdGhlIFZNQSBzcGxpdHMgaW50byB0aHJlZSBwYXJ0cy4gSSAqdGhpbmsqIHRoZSBWTUEgb3BlcmF0aW9ucyBhcmUgY2FsbGVkIGFnYWluIGZvciB0aGUgb3BlbiBhbmQgY2xvc2luZyBvZiBlYWNoIG5ldyBWTUEuIFRoaXMgaXMgdmVyeSBjb21wbGljYXRlZCwgYW5kIEkmIzM5O20gbG9zaW5nIHRyYWNrIG9mIHJlZmNvdW50cyEgIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGlmIGB6Y192bWEtJmd0O3JlZmNudGAgZHJvcHM/ICBUaGlzIGlzIGFsbCBnZXR0aW5nIHZlcnkgbWVzc3khCgpBbHNvLCBpdCBsb29rcyBsaWtlIGBWTV9XUklURWAgYW5kIGBWTV9FWEVDYCBhcmUgZXhwbGljaXRseSByZWplY3RlZCwgd2hpY2ggaXMgZ29vZC4KCkJ1dCB3YWl0LCB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgdGhlIGNvcmUgTU0gKG1lbW9yeSBtYW5hZ2VtZW50KSBhbmQgbmV0d29ya2luZyBzdGFjayEgIFRoaXMgaXMgaW1wb3J0YW50LiAgQW5kIHRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gIEkgY2FuIGRlZmluaXRlbHkgcmVhY2ggdGhpcyBjb2RlIGZyb20gdXNlcnNwYWNlIHdpdGggc3RhbmRhcmQgc3lzY2FsbHMsIGxpa2UgYHNvY2tldGAsIGBtbWFwYCwgYG11bm1hcGAsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYCwgYW5kIGBnZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfWkVST0NPUFlfUkVDRUlWRWAuICBUaGlzIGlzIGFsbCBlYXNpbHkgYWNjZXNzaWJsZSBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIHN5emthbGxlci4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueSBzcGVjaWFsIGNvbmZpZ3MgYXJlIG5lZWRlZC4gSSYjMzk7bGwgY2hlY2sgYENPTkZJR19NTVVgIGFuZCB0aGUgVENQIGNvbmZpZ3MuICBPbiB4ODZfNjQsIHRoZSBNTVUgaXMgYWx3YXlzIG9uLCBzbyB0aGF0JiMzOTtzIGdvb2QuICBJIGFsc28gbmVlZCB0byBzZWFyY2ggdGhlIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnQgYnVncy4gSSBzdXNwZWN0IHRoaXMgaXMgd29ydGggZnV6emluZyBoZWF2aWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfemNfdm1hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTE4NTg9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTg2My0jaWZkZWYgQ09ORklHX01NVVxubmV0L2lwdjQvdGNwLmM6MTg2NDpzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG5uZXQvaXB2NC90Y3AuYy0xODY1LVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbi0tXG5uZXQvaXB2NC90Y3AuYz0xODg2PXN0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE5MDctXG5uZXQvaXB2NC90Y3AuYzoxOTA4OnN0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm5ldC9pcHY0L3RjcC5jLTE5MDkte1xubmV0L2lwdjQvdGNwLmM6MTkxMDpcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xubmV0L2lwdjQvdGNwLmMtMTkxMS1cbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTE0LVxubmV0L2lwdjQvdGNwLmM6MTkxNTpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubmV0L2lwdjQvdGNwLmMtMTkxNi17XG5uZXQvaXB2NC90Y3AuYzoxOTE3Olx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG5uZXQvaXB2NC90Y3AuYy0xOTE4LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTE5Mjc9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0ge1xubmV0L2lwdjQvdGNwLmM6MTkyODpcdC5vcGVuID0gdGNwX3pjX3ZtYV9vcGVuLFxubmV0L2lwdjQvdGNwLmM6MTkyOTpcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG5uZXQvaXB2NC90Y3AuYy0xOTMwLX07XG4tLVxubmV0L2lwdjQvdGNwLmM9MTkzMj1pbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMTkzNC17XG5uZXQvaXB2NC90Y3AuYzoxOTM1Olx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYTtcbm5ldC9pcHY0L3RjcC5jLTE5MzYtXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE5NjctXG5uZXQvaXB2NC90Y3AuYzoxOTY4OnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5uZXQvaXB2NC90Y3AuYy0xOTY5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5uZXQvaXB2NC90Y3AuYy0xOTcwLXtcbm5ldC9pcHY0L3RjcC5jOjE5NzE6XHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbm5ldC9pcHY0L3RjcC5jLTE5NzItXG4tLVxubmV0L2lwdjQvdGNwLmM9MjI2NT1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjI3MS1cdGlmICh2bWEpIHtcbm5ldC9pcHY0L3RjcC5jOjIyNzI6XHRcdGlmICghdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xubmV0L2lwdjQvdGNwLmMtMjI3My1cdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMjgxLVx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcmVzcyk7XG5uZXQvaXB2NC90Y3AuYzoyMjgyOlx0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcbm5ldC9pcHY0L3RjcC5jLTIyODMtXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3RhY2sgUGVyZm9ybWFuY2UqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbmV0d29yayBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQ/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGFyZWFzIG1vc3QgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBkYXRhIHRyYW5zZmVyIGFuZCBoYW5kbGluZyDigJMgc28sIGB0Y3BfbW1hcGAgY2FsbGVycyBhcmUgYSBwcmltZSBzdXNwZWN0LiBNZW1vcnkgbWFwcGluZyB3aXRoaW4gVENQIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBrZXkuIEFsdGVybmF0aXZlbHksIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggdGhhdCwgdGhlIGBpbmV0X3N0cmVhbV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBjb250YWlucyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGRlZmluZSB0aGUgVENQIHNvY2tldCBvcGVyYXRpb25zIGF0IGEgdmVyeSBsb3cgbGV2ZWwuIFRoZXkgaGFuZGxlIHNlbmQsIHJlY2VpdmUsIGFuZCBvdGhlciBjcml0aWNhbCBmdW5jdGlvbnMuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgdGhvc2UgYXMgd2VsbC4gRWl0aGVyIG9uZSBvZiB0aGVzZSBhcmVhcyBpcyBsaWtlbHkgdG8geWllbGQgY2x1ZXMgdG8gdGhlIG5hdHVyZSBvZiBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIHdlJiMzOTtyZSBzZWVpbmcsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggYm90aCBvZiB0aGVzZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gZ2V0IHNvbWUgaW5zaWdodHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9tbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTUyOT12b2lkIHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaC01MzAtI2lmZGVmIENPTkZJR19NTVVcbmluY2x1ZGUvbmV0L3RjcC5oOjUzMTppbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5pbmNsdWRlL25ldC90Y3AuaC01MzItXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTA2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA3OC0jaWZkZWYgQ09ORklHX01NVVxubmV0L2lwdjQvYWZfaW5ldC5jOjEwNzk6XHQubW1hcFx0XHQgICA9IHRjcF9tbWFwLFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODAtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTkzMS1cbm5ldC9pcHY0L3RjcC5jOjE5MzI6aW50IHRjcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L2lwdjQvdGNwLmMtMTkzMy1cdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02NjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjc4LSNpZmRlZiBDT05GSUdfTU1VXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY3OTpcdC5tbWFwXHRcdCAgID0gdGNwX21tYXAsXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4MC0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZT00OD10Y3BfaW5xXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZTo0OTp0Y3BfbW1hcFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUtNTAtdGNwX3BvcnRfc2hhcmVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU9MTQ0PVRFU1RfR0VOX0ZJTEVTIDo9IFxcXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTE3MC1cdHRjcF9pbnEgXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZToxNzE6XHR0Y3BfbW1hcCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTE3Mi1cdHRmbyBcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZT0yMzk9JChPVVRQVVQpL3JldXNlcG9ydF9icGZfbnVtYTogTERMSUJTICYjNDM7PSAtbG51bWFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZToyNDA6JChPVVRQVVQpL3RjcF9tbWFwOiBMRExJQlMgJiM0Mzs9IC1scHRocmVhZCAtbGNyeXB0b1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTI0MS0kKE9VVFBVVCkvdGNwX2lucTogTERMSUJTICYjNDM7PSAtbHB0aHJlYWRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0xNC0gKiAgaWZjb25maWcgbG8gbXR1IDYxNTEyICAjIDE1KjQwOTYgJiM0MzsgNDAgKGlwdjYgaGVhZGVyKSAmIzQzOyAzMiAoVENQIHdpdGggVFMgb3B0aW9uIGhlYWRlcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjE1OiAqICB0Y3BfbW1hcCAtcyAteiBcdTAwMjZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjE2OiAqICB0Y3BfbW1hcCAtSCA6OjEgLXpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTE3LSAqXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMTktICogICAgICAoNDA5NiA6IHBhZ2Ugc2l6ZSBvbiB4ODYsIDEyOiBUQ1AgVFMgb3B0aW9uIGxlbmd0aClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjIwOiAqICB0Y3BfbW1hcCAtcyAteiAtTSAkKCg0MDk2JiM0MzsxMikpIFx1MDAyNlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MjE6ICogIHRjcF9tbWFwIC1IIDo6MSAteiAtTSAkKCg0MDk2JiM0MzsxMikpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yMi0gKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTI1LSAqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoyNjogKiAkIC4vdGNwX21tYXAgLXMgXHUwMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXRob3V0IG1tYXAoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6Mjc6ICogJCBmb3IgaSBpbiB7MS4uNH07IGRvIC4vdGNwX21tYXAgLUggOjoxIC16IDsgZG9uZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjgtICogcmVjZWl2ZWQgMzI3NjggTUIgKDAgJSBtbWFwJiMzOTtlZCkgaW4gMTQuMTE1NyBzLCAxOS40NzMyIEdiaXRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0zNS0gKiAgIGNwdSB1c2FnZSB1c2VyOjAuMDM2IHN5czo4LjE5MywgMjUxLjEyOSB1c2VjIHBlciBNQiwgNjU1MzAgYy1zd2l0Y2hlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MzY6ICogJCBraWxsICUxICAgIyBraWxsIHRjcF9tbWFwIHNlcnZlclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMzctICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM4OiAqICQgLi90Y3BfbW1hcCAtcyAteiBcdTAwMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdpdGggbW1hcCgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzozOTogKiAkIGZvciBpIGluIHsxLi40fTsgZG8gLi90Y3BfbW1hcCAtSCA6OjEgLXogOyBkb25lXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy00MC0gKiByZWNlaXZlZCAzMjc2OCBNQiAoOTkuOTkzOSAlIG1tYXAmIzM5O2VkKSBpbiA2LjczNzkyIHMsIDQwLjc5NTYgR2JpdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVENQIE1NQVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3BfbW1hcGAgYW5kIHdoZXJlIGl0JiMzOTtzIGltcGxlbWVudGVkLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQmIzM5O3MgdGllZCB0byBgaW5ldF9zdHJlYW1fb3BzYCBhbmQgYGluZXQ2X3N0cmVhbV9vcHNgLCBidXQgb25seSB3aGVuIGBDT05GSUdfTU1VYCBpcyBhY3RpdmUuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgYENPTkZJR19JTkVUYC4gSXQmIzM5O3MgZm91bmRhdGlvbmFsLCBzbyBJJiMzOTttIGV4cGVjdGluZyBpdCB0byBiZSBzZXQuIExvb2tpbmcgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AsIHllcCwgYENPTkZJR19JTkVUYCBpcyB0aGUgY29yZSBUQ1AvSVAgY29uZmlndXJhdGlvbi4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGBDT05GSUdfTU1VYCBpcyBwcmV0dHkgbXVjaCBzdGFuZGFyZCBvbiBhbWQ2NCwgYW5kIGBDT05GSUdfSU5FVD15YCBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBuZXR3b3JraW5nIHNldHVwcy4gSXQgc2VlbXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KClRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbnN0cmFpbnRzLCBJIHNob3VsZCBzcGVjaWZpY2FsbHkgY2hlY2sgZm9yIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIGVpdGhlciBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIG9yIGB0Y3BfbW1hcGAgaXRzZWxmLiBJdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgpGaW5hbGx5LCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgYG5ldC9pcHY0L3RjcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRjcF9tbWFwYCBkZWZpbml0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gaG93IGl0JiMzOTtzIGFjdHVhbGx5IHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTU6XHRcdHJldHVybiAwO1xuMTg1NjpcdH1cbjE4NTc6XHRcbjE4NTg6XHR2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbjE4NTk6XHR7XG4xODYwOlx0XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdGNwX3dpbl9mcm9tX3NwYWNlKHNrLCB2YWwpKTtcbjE4NjE6XHR9XG4xODYyOlx0XG4xODYzOlx0I2lmZGVmIENPTkZJR19NTVVcbjE4NjQ6XHRzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG4xODY1Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuMTg2NjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4xODY3Olx0XHRyZWZjb3VudF90IHJlZmNudDtcbjE4Njg6XHRcdHN0cnVjdCBzb2NrICpzaztcbjE4Njk6XHR9O1xuMTg3MDpcdFxuMTg3MTpcdC8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi9cbjE4NzI6XHQjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4xODczOlx0XG4xODc0Olx0c3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4xODc1Olx0e1xuMTg3NjpcdFx0dW5zaWduZWQgaW50IGNodW5rO1xuMTg3NzpcdFxuMTg3ODpcdFx0d2hpbGUgKG5yX3BhZ2VzKSB7XG4xODc5Olx0XHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4xODgwOlx0XHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4xODgxOlx0XHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbjE4ODI6XHRcdFx0bnJfcGFnZXMgLT0gY2h1bms7XG4xODgzOlx0XHR9XG4xODg0Olx0fVxuMTg4NTpcdFxuMTg4NjpcdHN0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuMTg4NzpcdHtcbjE4ODg6XHRcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XG4xODg5Olx0XHR1bnNpZ25lZCBpbnQgY2h1bms7XG4xODkwOlx0XHRpbnQgcmV0O1xuMTg5MTpcdFxuMTg5MjpcdFx0d2hpbGUgKG5yX3BhZ2VzKSB7XG4xODkzOlx0XHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4xODk0Olx0XHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVENQIFplcm8tQ29weSBSZWNlaXZlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L2lwdjQvdGNwLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGZpbmRfdGNwX3ZtYWAgYW5kIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuICBJIGtub3cgYGZpbmRfdGNwX3ZtYWAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXQgaGVscHMgbG9jYXRlIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLCBhbmQgZXNwZWNpYWxseSBob3cgaXQgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcmV2ZWFsIHRoZSBmbG93IG9mIGhvdyB0aGlzIHplcm8tY29weSBtZWNoYW5pc20gd29ya3MsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgZnVuY3Rpb24gY2FsbCBzZWFyY2guIEkgY2FuIGxvb2sgYXQgdGhlIGNhbGwgY2hhaW4gYW5kIHZlcmlmeSBpZiB0aGlzIGhhcyBiZWVuIHVwZGF0ZWQgcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTIwMzE9c3RhdGljIHZvaWQgdGNwX3plcm9jb3B5X3NldF9oaW50X2Zvcl9za2Ioc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwLmM6MjAzMjpcdFx0XHRcdFx0ICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxubmV0L2lwdjQvdGNwLmMtMjAzMy1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0KVxuLS1cbm5ldC9pcHY0L3RjcC5jPTIwNzE9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwLmM6MjA3MjpcdFx0XHRcdCAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLCBpbnQgaW5xLFxubmV0L2lwdjQvdGNwLmMtMjA3My1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTIxMDYtXG5uZXQvaXB2NC90Y3AuYzoyMTA3OnN0YXRpYyBpbnQgdGNwX2NvcHlfc3RyYWdnbGVyX2RhdGEoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIxMDgtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY29weWxlbixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTMwLVxubmV0L2lwdjQvdGNwLmM6MjEzMTpzdGF0aWMgaW50IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIxMzItXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTU4PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTYzLVx0XHRcdFx0XHQgICAgICB1MzIgKnNlcSxcbm5ldC9pcHY0L3RjcC5jOjIxNjQ6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMTY1LVx0XHRcdFx0XHQgICAgICB1MzIgdG90YWxfYnl0ZXNfdG9fbWFwLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTIyMDY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyMTEtXHRcdFx0XHRcdHUzMiAqc2VxLFxubmV0L2lwdjQvdGNwLmM6MjIxMjpcdFx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIyMTMtXHRcdFx0XHRcdHUzMiB0b3RhbF9ieXRlc190b19tYXApXG4tLVxubmV0L2lwdjQvdGNwLmM9MjIzOT1zdGF0aWMgdm9pZCB0Y3BfemNfZmluYWxpemVfcnhfdHN0YW1wKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcC5jOjIyNDA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxubmV0L2lwdjQvdGNwLmMtMjI0MS1cdFx0XHRcdCAgICAgIHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXG4tLVxubmV0L2lwdjQvdGNwLmM9MjI2NT1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjI5MC0jZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcbm5ldC9pcHY0L3RjcC5jOjIyOTE6c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3AuYzoyMjkyOlx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIyOTMtXHRcdFx0XHRzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTQ1NzY9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NDgtXHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztcbm5ldC9pcHY0L3RjcC5jOjQ4NDk6XHRcdHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSB6YyA9IHt9O1xubmV0L2lwdjQvdGNwLmMtNDg1MC1cdFx0aW50IGVycjtcbi0tXG5uZXQvaXB2NC90Y3AuYy00ODU0LVx0XHRpZiAobGVuIFx1MDAzYyAwIHx8XG5uZXQvaXB2NC90Y3AuYzo0ODU1Olx0XHQgICAgbGVuIFx1MDAzYyBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGxlbmd0aCkpXG5uZXQvaXB2NC90Y3AuYy00ODU2LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NzItXHRcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjQ4NzM6XHRcdGVyciA9IHRjcF96ZXJvY29weV9yZWNlaXZlKHNrLCBcdTAwMjZ6YywgXHUwMDI2dHNzKTtcbm5ldC9pcHY0L3RjcC5jLTQ4NzQtXHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNrLCBsZXZlbCwgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy00ODc2LVx0XHRzb2Nrb3B0X3JlbGVhc2Vfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzo0ODc3Olx0XHRpZiAobGVuIFx1MDAzZT0gb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpKVxubmV0L2lwdjQvdGNwLmMtNDg3OC1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xubmV0L2lwdjQvdGNwLmMtNDg3OS1cdFx0c3dpdGNoIChsZW4pIHtcbm5ldC9pcHY0L3RjcC5jOjQ4ODA6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpOlxubmV0L2lwdjQvdGNwLmMtNDg4MS1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xubmV0L2lwdjQvdGNwLmM6NDg4MjpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIG1zZ19jb250cm9sbGVuKTpcbm5ldC9pcHY0L3RjcC5jOjQ4ODM6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbCk6XG5uZXQvaXB2NC90Y3AuYzo0ODg0Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgZmxhZ3MpOlxubmV0L2lwdjQvdGNwLmM6NDg4NTpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGNvcHlidWZfbGVuKTpcbm5ldC9pcHY0L3RjcC5jOjQ4ODY6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2FkZHJlc3MpOlxubmV0L2lwdjQvdGNwLmM6NDg4NzpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGVycik6XG5uZXQvaXB2NC90Y3AuYy00ODg4LVx0XHRcdGdvdG8gemVyb2NvcHlfcmN2X3NrX2Vycjtcbm5ldC9pcHY0L3RjcC5jOjQ4ODk6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBpbnEpOlxubmV0L2lwdjQvdGNwLmMtNDg5MC1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9pbnE7XG5uZXQvaXB2NC90Y3AuYzo0ODkxOlx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKTpcbm5ldC9pcHY0L3RjcC5jLTQ4OTItXHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTc1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFplcm9Db3B5IFJlY2VpdmUgZm9yIFN5emthbGxlciBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVENQIFplcm9Db3B5IHJlY2VpdmUgcGF0Y2gsIGFuZCBteSBtYWluIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZnVuY3Rpb25zIHRvIHRhcmdldCB3aXRoIFN5emthbGxlciYjMzk7cyBGb2N1c1N5bWJvbHMuIEkgc2VlIHRoYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpcyBjYWxsZWQgZnJvbSBgZG9fdGNwX2dldHNvY2tvcHRgLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbCBlbnRyeSBwb2ludC4gQWRkaXRpb25hbGx5LCBgdGNwX21tYXBgIGlzIGNhbGxlZCBkdXJpbmcgc29ja2V0IG1tYXBwaW5nLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoOiBgdGNwX3pjX21lbV91bmNoYXJnZWAsIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGB0Y3BfemNfdm1hX29wZW5gLCBgdGNwX3pjX3ZtYV9jbG9zZWAsIGB0Y3BfbW1hcGAsIGB0Y3BfemNfdm1hX3ZhbGlkYCwgYW5kIGBmaW5kX3RjcF92bWFgLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXNlIHN0YXRpYyBvciBub24tc3RhdGljPyAgYHRjcF9tbWFwYCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMgYmVjYXVzZSBpdCYjMzk7cyBzdG9yZWQgaW4gYGluZXRfc3RyZWFtX29wc2AgYW5kIGBpbmV0Nl9zdHJlYW1fb3BzYC4gYHRjcF96Y192bWFfb3BlbmAgYW5kIGB0Y3BfemNfdm1hX2Nsb3NlYCBhcmUgc3RhdGljLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBzdG9yZWQgaW4gYHRjcF92bV9vcHNgLCBzbyB0aGV5ICpjYW5ub3QqIGJlIGlubGluZWQuIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBhbmQgYHRjcF96Y19tZW1fY2hhcmdlYCBhcmUgYWxzbyBzdGF0aWMuIGBmaW5kX3RjcF92bWFgIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFyZSBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBkb190Y3BfZ2V0c29ja29wdGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIEZpbmFsbHksIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGlzIG5vbi1zdGF0aWMuCgpOb3csIHRoZSBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55IG9mIHRoZXNlIGFyZSB0b28gZ2VuZXJpYy4gYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgKnNlZW1zKiBsaWtlIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYWxtb3N0IGV2ZXJ5IHNvY2tldCBzZW5kL3JlY2VpdmUgYWxsb2NhdGlvbi4gVGhhdCBtZWFucyBpdCBtaWdodCBkaWx1dGUgdGhlIGZvY3VzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHRjcF9tbWFwYCwgYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhcmUgdmVyeSBzcGVjaWZpYyB0byBUQ1AgemVyb2NvcHkgYW5kIG1tYXAuICBUaGV5IHNlZW0gbXVjaCBtb3JlIGFwcHJvcHJpYXRlIGZvciB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYy4KCkxvb2tpbmcgYXQgdGhlIEZvY3VzU3ltYm9sIGd1aWRlbGluZXMsIGB0Y3BfbW1hcGAgaXMgYSBkaXJlY3QgQVBJIGVudHJ5cG9pbnQgZm9yIG1tYXAuIGB0Y3BfemNfdm1hX29wZW5gIGFuZCBgdGNwX3pjX3ZtYV9jbG9zZWAgYXJlIHZtX29wcyBjYWxsYmFja3MuIGB0Y3BfemNfbWVtX2NoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBoYW5kbGUgdGhlIGNvcmUgbWVtb3J5IGFjY291bnRpbmcgZm9yIHplcm9jb3B5IHJlY2VpdmUuIEFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIHRoZSBnZXRzb2Nrb3B0IGVudHJ5cG9pbnQgdGhhdCBmaW5kcyB0aGUgVENQIFZNQS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGB0Y3BfemNfbWVtX2NoYXJnZWAgaXMgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXRzIHNpemUgc3VnZ2VzdHMgaXQmIzM5O3MgdW5saWtlbHkuIEJ1dCBldmVuIGlmIGl0IGlzLCBgdGNwX21tYXBgLCBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhcmUgZGVmaW5pdGVseSBnb29kIGZvY3VzIHN5bWJvbHMuCgpDb25zaWRlcmluZyBhbGwgdGhpcywgaXQgc2VlbXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvaXB2NC90Y3AuY2AgYW5kIGBuZXQvY29yZS9zb2NrLmNgLiBJdCYjMzk7cyBtb2RpZnlpbmcgVENQIHNvY2tldCBtbWFwIGFuZCB6ZXJvY29weSBtZW1vcnkgYWNjb3VudGluZy4gVGhlcmUmIzM5O3MgbmV3IGB0Y3BfemNfdm1hYCB0cmFja2luZyBtbSwgc2ssIG5yX3BhZ2VzIHdpdGggYC5vcGVuYCBhbmQgYC5jbG9zZWAgdm1fb3BzLCBpbmNsdWRpbmcgc29jayBhbmQgbW0gc3RydWN0cywgYXMgd2VsbCBhcyBtb2RpZmljYXRpb25zIHRvIGB2bV9mbGFnc2AuICBJdCYjMzk7cyBhbHNvIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbHMuCgpGb3IgdGhlIHJlcXVpcmVkIGNvbmZpZywgSSYjMzk7bGwgbmVlZCBgSU5FVGAgZm9yIFRDUCBhbmQgYE1NVWAgZHVlIHRvIGAjaWZkZWYgQ09ORklHX01NVWAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gIEkmIzM5O2xsIGFsc28gaGF2ZSB0byBjaGVjayBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLCBzdWNoIGFzIFRDUCB6ZXJvY29weSByeCwgb3IgYHRjcF9tbWFwYC4gTGV0JiMzOTtzIGxvb2sgYXJvdW5kIGBuZXQvaXB2NC9LY29uZmlnYCBvciBncmVwIGZvciBgVENQX1pFUk9DT1BZX1JFQ0VJVkVgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9aRVJPQ09QWV9SRUNFSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0PTg5OD1LZXJuZWwgcmVzcG9uc2UgY29udGVudHM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtOTIzLWBgRVRIVE9PTF9BX1JJTkdTX1RDUF9EQVRBX1NQTElUYGAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRldmljZSBpcyB1c2FibGUgd2l0aFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q6OTI0OnBhZ2UtZmxpcHBpbmcgVENQIHplcm8tY29weSByZWNlaXZlIChgYGdldHNvY2tvcHQoVENQX1pFUk9DT1BZX1JFQ0VJVkUpYGApLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtOTI1LUlmIGVuYWJsZWQgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIHRvIHBsYWNlIGZyYW1lIGhlYWRlcnMgYW5kIGRhdGEgaW50b1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pb3UtemNyeC5yc3Q9MTE9dGhlIG5ldHdvcmsgcmVjZWl2ZSBwYXRoLCBhbGxvd2luZyBwYWNrZXQgZGF0YSB0byBiZSByZWNlaXZlZCBkaXJlY3RseSBpbnRvXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaW91LXpjcngucnN0OjEyOnVzZXJzcGFjZSBtZW1vcnkuIFRoaXMgZmVhdHVyZSBpcyBkaWZmZXJlbnQgdG8gVENQX1pFUk9DT1BZX1JFQ0VJVkUgaW4gdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lvdS16Y3J4LnJzdC0xMy10aGVyZSBhcmUgbm8gc3RyaWN0IGFsaWdubWVudCByZXF1aXJlbWVudHMgYW5kIG5vIG5lZWQgdG8gbW1hcCgpL211bm1hcCgpLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaD03ND1lbnVtIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTI3LSNkZWZpbmUgVENQX0ZBU1RPUEVOX05PX0NPT0tJRVx0MzRcdC8qIEVuYWJsZSBURk8gd2l0aG91dCBhIFRGTyBjb29raWUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaDoxMjg6I2RlZmluZSBUQ1BfWkVST0NPUFlfUkVDRUlWRVx0MzVcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjktI2RlZmluZSBUQ1BfSU5RXHRcdFx0MzZcdC8qIE5vdGlmeSBieXRlcyBhdmFpbGFibGUgdG8gcmVhZCBhcyBhIGNtc2cgb24gcmVhZCAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaD01MDA9c3RydWN0IHRjcF9hb19yZXBhaXIgeyAvKiB7cyxnfWV0c29ja29wdChUQ1BfQU9fUkVQQUlSKSAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC01MDYtXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg6NTA3Oi8qIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgLi4uKSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTUwOC1cbi0tXG5uZXQvaXB2NC90Y3AuYz00NTc2PWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi0tXG5uZXQvaXB2NC90Y3AuYy00ODQ2LSNpZmRlZiBDT05GSUdfTU1VXG5uZXQvaXB2NC90Y3AuYzo0ODQ3Olx0Y2FzZSBUQ1BfWkVST0NPUFlfUkVDRUlWRToge1xubmV0L2lwdjQvdGNwLmMtNDg0OC1cdFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgdHNzO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ5NTE9Ym9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXG4tLVxubmV0L2lwdjQvdGNwLmMtNDk1My1cdC8qIFRDUCBkb190Y3BfZ2V0c29ja29wdCBoYXMgb3B0aW1pemVkIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25cbm5ldC9pcHY0L3RjcC5jOjQ5NTQ6XHQgKiB0byBhdm9pZCBleHRyYSBzb2NrZXQgbG9jayBmb3IgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXG5uZXQvaXB2NC90Y3AuYy00OTU1LVx0ICovXG5uZXQvaXB2NC90Y3AuYzo0OTU2Olx0aWYgKGxldmVsID09IFNPTF9UQ1AgXHUwMDI2XHUwMDI2IG9wdG5hbWUgPT0gVENQX1pFUk9DT1BZX1JFQ0VJVkUpXG5uZXQvaXB2NC90Y3AuYy00OTU3LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg9NzI9ZW51bSB7IFxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjQtI2RlZmluZSBUQ1BfRkFTVE9QRU5fTk9fQ09PS0lFXHQzNFx0LyogRW5hYmxlIFRGTyB3aXRob3V0IGEgVEZPIGNvb2tpZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjEyNTojZGVmaW5lIFRDUF9aRVJPQ09QWV9SRUNFSVZFXHQzNVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyNi0jZGVmaW5lIFRDUF9JTlFcdFx0XHQzNlx0LyogTm90aWZ5IGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGFzIGEgY21zZyBvbiByZWFkICovXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTMzNj1zdHJ1Y3QgdGNwX2RpYWdfbWQ1c2lnIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMzQzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjM0NDovKiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLikgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0zNDUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEwNjU9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3pjKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTExMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTEyMjpcdGVyciA9IGdldHNvY2tvcHQocDEsIElQUFJPVE9fVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgXHUwMDI2emMsIFx1MDAyNnpjX2xlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTEyMy1cdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Z2V0c29ja29wdFwmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jPTI1PXN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMtMjg3LVx0e1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jOjI4ODpcdFx0LmRlc2NyID0gXCYjMzQ7Z2V0c29ja29wdDogZGVueSBuZWdhdGl2ZSBjdHgtXHUwMDNlb3B0bGVuIGluIFRDUF9aRVJPQ09QWV9SRUNFSVZFXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jLTI4OS1cdFx0Lmluc25zID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYy0zMDItXHRcdC5nZXRfbGV2ZWwgPSBJUFBST1RPX1RDUCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYzozMDM6XHRcdC5nZXRfb3B0bmFtZSA9IFRDUF9aRVJPQ09QWV9SRUNFSVZFLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jLTMwNC1cdFx0LmdldF9vcHRsZW4gPSBzaXplb2Yoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM9MTU9c3RhdGljIGludCBnZXRzZXRzb2Nrb3B0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE2NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNjY6XHQvKiBUQ1BfWkVST0NPUFlfUkVDRUlWRSB0cmlnZ2VycyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE2Ny1cdG1lbXNldChcdTAwMjZidWYsIDAsIHNpemVvZihidWYpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYy0xNjgtXHRvcHRsZW4gPSBzaXplb2YoYnVmLnpjKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNjk6XHRlcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgXHUwMDI2YnVmLCBcdTAwMjZvcHRsZW4pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE3MC1cdGlmIChlcnIpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNzE6XHRcdGxvZ19lcnIoXCYjMzQ7VW5leHBlY3RlZCBnZXRzb2Nrb3B0KFRDUF9aRVJPQ09QWV9SRUNFSVZFKSBlcnI9JWQgZXJybm89JWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTcyLVx0XHRcdGVyciwgZXJybm8pO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYy0xNzktXHRlcnJubyA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTgwOlx0ZXJyID0gZ2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIFx1MDAyNmJ1ZiwgXHUwMDI2b3B0bGVuKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYy0xODEtXHRpZiAoZXJybm8gIT0gRUlOVkFMKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTgyOlx0XHRsb2dfZXJyKFwmIzM0O1VuZXhwZWN0ZWQgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSkgZXJyPSVkIGVycm5vPSVkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE4My1cdFx0XHRlcnIsIGVycm5vKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jPTMwPWludCBfZ2V0c29ja29wdChzdHJ1Y3QgYnBmX3NvY2tvcHQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jLTczLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYzo3NDpcdGlmIChjdHgtXHUwMDNlbGV2ZWwgPT0gU09MX1RDUCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wdG5hbWUgPT0gVENQX1pFUk9DT1BZX1JFQ0VJVkUpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2Nrb3B0X3NrLmM6NzU6XHRcdC8qIFZlcmlmeSB0aGF0IFRDUF9aRVJPQ09QWV9SRUNFSVZFIHRyaWdnZXJzLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYy03Ni1cdFx0ICogSXQgaGFzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBwZXJmb3JtYW5jZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jPTE2OT12b2lkICpjaGlsZF90aHJlYWQodm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTIyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjIyNjpcdFx0XHRyZXMgPSBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yMjctXHRcdFx0XHRcdCBcdTAwMjZ6YywgXHUwMDI2emNfbGVuKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yMzgtXHRcdFx0XHQvKiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byB1bm1hcCB0aGUgcGFnZXMgcmlnaHQgbm93LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MjM5Olx0XHRcdFx0ICogaW5zdGVhZCBvZiBkb2luZyB0aGlzIGluIG5leHQgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yNDAtXHRcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX01NVWAg4oCTIHRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwsIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gU3RhbmRhcmQgb3B0aW9ucywgbGlrZWx5IGVuYWJsZWQgb24gcHJldHR5IG11Y2ggYW55IG1haW5zdHJlYW0gYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zLCBzdGFydGluZyB3aXRoIGBDT05GSUdfSU5FVGAuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGRldGFpbHMgc3Vycm91bmRpbmcgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzM4LVxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzkzLVxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXG5uZXQvaXB2NC9LY29uZmlnLTM5NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cbm5ldC9pcHY0L0tjb25maWc6NDA0OmNvbmZpZyBJTkVUX1RBQkxFX1BFUlRVUkJfT1JERVJcbm5ldC9pcHY0L0tjb25maWctNDA1LVx0aW50IFwmIzM0O0lORVQ6IFNvdXJjZSBwb3J0IHBlcnR1cmJhdGlvbiB0YWJsZSBzaXplIChhcyBwb3dlciBvZiAyKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTgtXG5uZXQvaXB2NC9LY29uZmlnOjQxOTpjb25maWcgSU5FVF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDIwLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDI0LVx0dHJpc3RhdGUgXCYjMzQ7SU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzQtXG5uZXQvaXB2NC9LY29uZmlnOjQzNTpjb25maWcgSU5FVF9UQ1BfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MzYtXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM4LVxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQwLVx0dHJpc3RhdGUgXCYjMzQ7VURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cbm5ldC9pcHY0L0tjb25maWc6NDQ3OmNvbmZpZyBJTkVUX1JBV19ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cdHRyaXN0YXRlIFwmIzM0O1JBVzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzg1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtjb25maWcgZm9yIElORVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElORVRgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEkmIzM5O2xsIGJlIGRpdmluZyBzdHJhaWdodCBpbnRvIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBvZiBjb3Vyc2UuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgSU5FVGAgZmVhdHVyZS4gTW9yZSBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jbHVzaW9uIG9mIGBJTkVUYCBhZmZlY3RzIG90aGVyIG5ldHdvcmsgZmVhdHVyZXMgb3IgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyBpdC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciB0cmFjaW5nIGhvdyB0aGUgZmVhdHVyZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIEkgY2FuIHByZWRpY3QgYW55IGlzc3VlcyBkb3duc3RyZWFtIGlmIEkgbW9kaWZ5IGFueSBvZiB0aGUgZmxhZ3MgYW5kIHRoZSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCBgY29uZmlnIElORVRgIGF0IHRoZSByb290LCBvciBwb3NzaWJseSBuZXN0ZWQgdW5kZXIgc29tZSBwYXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb24sIGRlcGVuZGluZyBvbiBpdHMgc2NvcGUuIE15IGdvYWwgaGVyZSBpc24mIzM5O3QganVzdCB0byAqZmluZCogdGhlIGVudHJ5LCBidXQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgaXRzIGltcGFjdCBvbiB0aGUgbGFyZ2VyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcyMAoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVENQL0lQIFplcm9jb3B5IEZlYXR1cmUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19JTkVUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFRDUC9JUCBuZXR3b3JraW5nLCBhbmQgYENPTkZJR19NTVVgIGlzIHRoZSBvbmUgZW5hYmxpbmcgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBzdXBwb3J0LiBHb29kLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgRm9jdXNTeW1ib2xzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGFzIGl0IHNob3VsZCBiZS4KClRoZSBsaXN0ZWQgc3ltYm9scywgYHRjcF9tbWFwYCwgYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYWxsIGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgemVyby1jb3B5IHJlY2VpdmUgYW5kIFRDUCBtbWFwIGFjY291bnRpbmcgZmVhdHVyZXMsIGFzIGV4cGVjdGVkLiBUaGV5JiMzOTtyZSBhbGwgdmVyeSBmb2N1c2VkIG9uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5LiBFeGNlbGxlbnQhIFRoZSB1c2Ugb2YgdGhlc2Ugc3ltYm9scyBzcGVjaWZpY2FsbHkgYXZvaWRzIGFueSByZWxpYW5jZSBvbiBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzIG9yIGdlbmVyYWwgbWVtb3J5IGhlbHBlcnMuCgpCYXNlZCBvbiBteSByZXZpZXcsIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBsb2dpY2FsbHkgc291bmQsIGNsZWFybHkgZGVmaW5lZCwgYW5kLCBpbXBvcnRhbnRseSwgY29tcGxpYW50IHdpdGggYWxsIHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzIGFuZCBkZXNpZ24gcHJpbmNpcGxlcyBmb3IgdGhpcyB0eXBlIG9mIGZlYXR1cmUgaW50ZWdyYXRpb24uIEkgc2VlIG5vIHJlZCBmbGFncyBvciBwb3RlbnRpYWwgaXNzdWVzLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBldmFsdWF0aW9uLiBJJiMzOTtsbCBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX21tYXAmIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9vcGVuJiMzNDssCiAgICAmIzM0O3RjcF96Y192bWFfY2xvc2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV9jaGFyZ2UmIzM0OywKICAgICYjMzQ7dGNwX3pjX21lbV91bmNoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemVyb2NvcHlfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBtZW1vcnkgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgZm9yIFRDUCB6ZXJvY29weSByZWNlaXZlIFZNQXMgKHZpYSB0Y3BfbW1hcCwgdGNwX3pjX3ZtYV9vcGVuLCBhbmQgdGNwX3pjX3ZtYV9jbG9zZSksIHRyYWNraW5nIG1tX3N0cnVjdCBhbmQgc29jayByZWZlcmVuY2VzLCBhbmQgdXBkYXRlcyBtZW1vcnkgcmFpc2UgYWNjb3VudGluZyBpbiBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQgd2l0aCB0aGUgbmV3IFNLX01FTV9SRUNWX1pFUk9DT1BZIGtpbmQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIE1NIGludGVyYWN0aW9uIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSBzb2NrZXQgc3lzY2FsbHMgKG1tYXAsIGdldHNvY2tvcHQgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIG11bm1hcCwgZXRjLiksIG1ha2luZyBpdCBpbXBvcnRhbnQgdG8gZnV6eiBmb3IgbWVtb3J5IGFjY291bnRpbmcsIHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfbW1hcCYjMzQ7LAogICAgJiMzNDt0Y3BfemNfdm1hX29wZW4mIzM0OywKICAgICYjMzQ7dGNwX3pjX3ZtYV9jbG9zZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX2NoYXJnZSYjMzQ7LAogICAgJiMzNDt0Y3BfemNfbWVtX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZWN5Y2xlIHRyYWNraW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzIChzdHJ1Y3QgdGNwX3pjX3ZtYSkuIFRoZSBvbmx5IG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZSBpcyBzdHJ1Y3QgdGNwX3pjX3ZtYSwgd2hlcmUgYWxsIG1lbWJlciBmaWVsZHMgKG5yX3BhZ2VzLCBtbSwgc2ssIHJlZmNudCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEga21hbGxvY19vYmouIFRoZSBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGtlcm5lbC1pbnRlcm5hbCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1vcnkgYWNjb3VudGluZywgb3IgVk1BIGxpZmVjeWNsZS91c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGQ4ZjZjMGI1OTMxYTQ4YTE0MDdjZDU0YjZhMmE3ZGQ1MjZkYmM2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAzOjMxOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmNmMTkwNTVhOWM0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTE1NTYsNiAmIzQzOzE1NTYsNyBAQCB2b2lkIF9fc2tfbWVtX3JlY2xhaW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgYW1vdW50KTsKIAogI2RlZmluZSBTS19NRU1fU0VORAkwCiAjZGVmaW5lIFNLX01FTV9SRUNWCTEKJiM0MzsjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZCTB4MTAwCiAKIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqLwogc3RhdGljIGlubGluZSBsb25nIHNrX3Byb3RfbWVtX2xpbWl0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBpbmRleCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaAppbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oCkBAIC0zOCw3ICYjNDM7MzgsOCBAQAogCiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXMJCQlcCiAJCUVNKFNLX01FTV9TRU5EKQkJCVwKLQkJRU1lKFNLX01FTV9SRUNWKQomIzQzOwkJRU0oU0tfTUVNX1JFQ1YpCQkJXAomIzQzOwkJRU1lKFNLX01FTV9SRUNWX1pFUk9DT1BZKQogCiAvKiBlbnVtcyBuZWVkIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgKi8KICN1bmRlZiBFTQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGZhNjBiNzQ5NGM1ODYuLjNkODVjMTM4ZTFjNzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTMzODAsNyAmIzQzOzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKQogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtzay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmx0OyBza19nZXRfcm1lbTAoc2ssIHByb3QpKQogCQkJcmV0dXJuIDE7CiAKLQl9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqLwomIzQzOwl9IGVsc2UgaWYgKGtpbmQgPT0gU0tfTUVNX1NFTkQpIHsKIAkJaW50IHdtZW0wID0gc2tfZ2V0X3dtZW0wKHNrLCBwcm90KTsKIAogCQlpZiAoc2stJmd0O3NrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI2Nyw2ICYjNDM7MjY3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0YXRpY19rZXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2luZXRfY29tbW9uLmgmZ3Q7CkBAIC0xODYwLDIzICYjNDM7MTg2MSwxMTggQEAgdm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpCiB9CiAKICNpZmRlZiBDT05GSUdfTU1VCiYjNDM7c3RydWN0IHRjcF96Y192bWEgewomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJcmVmY291bnRfdCByZWZjbnQ7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi8KJiM0MzsjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggJmd0OyZndDsgUEFHRV9TSElGVCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjaHVuazsKJiM0MzsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzKSB7CiYjNDM7CQljaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAomIzQzOwkJCSAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspOwomIzQzOwkJX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZChzaywgY2h1bmspOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNoYXJnZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgY2h1bms7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlIChucl9wYWdlcykgewomIzQzOwkJY2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcywKJiM0MzsJCQkgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTsKJiM0MzsJCXJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCSAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpOwomIzQzOwkJaWYgKCFyZXQpIHsKJiM0MzsJCQl0Y3BfemNfbWVtX3VuY2hhcmdlKHNrLCBjaGFyZ2VkKTsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCX0KJiM0MzsJCWNoYXJnZWQgJiM0Mzs9IGNodW5rOwomIzQzOwkJbnJfcGFnZXMgLT0gY2h1bms7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7emNfdm1hLSZndDtyZWZjbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQpKSB7CiYjNDM7CQl0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIHpjX3ZtYS0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0Y3Bfdm1fb3BzID0gewomIzQzOwkub3BlbiA9IHRjcF96Y192bWFfb3BlbiwKJiM0MzsJLmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSwKIH07CiAKIGludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewomIzQzOwlzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9XUklURSB8IFZNX0VYRUMpKQogCQlyZXR1cm4gLUVQRVJNOwogCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKTsKIAogCS8qIEluc3RydWN0IHZtX2luc2VydF9wYWdlKCkgdG8gbm90IG1tYXBfcmVhZF9sb2NrKG1tKSAqLwotCXZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTsKJiM0MzsJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTUlYRURNQVApOwomIzQzOwomIzQzOwlucl9wYWdlcyA9ICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghemNfdm1hKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXpjX3ZtYS0mZ3Q7bnJfcGFnZXMgPSBucl9wYWdlczsKJiM0MzsJemNfdm1hLSZndDttbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CXpjX3ZtYS0mZ3Q7c2sgPSBzb2NrLSZndDtzazsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7emNfdm1hLSZndDtyZWZjbnQsIDEpOwomIzQzOwltbWdyYWIoemNfdm1hLSZndDttbSk7CiYjNDM7CXNvY2tfaG9sZCh6Y192bWEtJmd0O3NrKTsKJiM0MzsJaWYgKHRjcF96Y19tZW1fY2hhcmdlKHpjX3ZtYS0mZ3Q7c2ssIG5yX3BhZ2VzKSkgewomIzQzOwkJbW1kcm9wKHpjX3ZtYS0mZ3Q7bW0pOwomIzQzOwkJc29ja19wdXQoemNfdm1hLSZndDtzayk7CiYjNDM7CQlrZnJlZSh6Y192bWEpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt0Y3Bfdm1fb3BzOwomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHpjX3ZtYTsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtYS0mZ3Q7dm1fb3BzID09ICZhbXA7dGNwX3ZtX29wcyAmYW1wOyZhbXA7IHpjX3ZtYSAmYW1wOyZhbXA7IHpjX3ZtYS0mZ3Q7bW0gPT0gbW07CiYjNDM7fQomIzQzOwogc3RhdGljIHNrYl9mcmFnX3QgKnNrYl9hZHZhbmNlX3RvX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldF9za2IsCiAJCQkJICAgICAgIHUzMiAqb2Zmc2V0X2ZyYWcpCiB7CkBAIC0yMTczLDcgJiM0MzsyMjY5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAogCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwkJaWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7CiAJCQl2bWFfZW5kX3JlYWQodm1hKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yMTgzLDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJbW1hcF9yZWFkX2xvY2sobW0pOwogCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpOwotCWlmICghdm1hIHx8IHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewomIzQzOwlpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogVENQIFplcm8tQ29weSBQYXRjaGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgdGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzLgoKRmlyc3QsIEkgc2VlIGFkZGl0aW9ucyB0byBgaW5jbHVkZS9uZXQvc29jay5oYCBhbmQgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaGAgcmVsYXRlZCB0byBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLiBTdGFuZGFyZCBzdHVmZiwgZGVmaW5pbmcgYSBmbGFnIGFuZCBhZGRpbmcgaXQgdG8gdHJhY2UgZXZlbnRzLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLCBidXQgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG9uIGhvdyBpdCYjMzk7cyAqdXNlZCouCgpOZXh0LCBgbmV0L2NvcmUvc29jay5jYCBtb2RpZmllcyB0aGUgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgZnVuY3Rpb24uIEFoLCB0aGlzIGlzIHdoZXJlIGl0JiMzOTtzIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIGNoYW5nZXMgZnJvbSBhIHNpbXBsZSBgZWxzZWAgYmxvY2sgdG8gYW4gYGVsc2UgaWZgIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSBga2luZGAgdmFyaWFibGUuICpDcnVjaWFsbHkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGtpbmRgIGlzIHNldCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGlzIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGZsYWcuIEkgc2hvdWxkIGNoZWNrIGBuZXQvY29yZS9zb2NrLmNgIGFyb3VuZCBsaW5lIDMzODAsIGp1c3QgdG8gYmUgc3VyZS4KClRoZSBtZWF0IG9mIHRoZSBwYXRjaCwgaG93ZXZlciwgaXMgaW4gYG5ldC9pcHY0L3RjcC5jYC4gSGVyZSB3ZSBoYXZlIGEgYHN0cnVjdCB0Y3BfemNfdm1hYCBiZWluZyBpbnRyb2R1Y2VkLCBhbG9uZyB3aXRoIG5ldyBmdW5jdGlvbnM6IGB0Y3BfemNfbWVtX3VuY2hhcmdlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYW5kIGEgYHRjcF92bV9vcHNgIHN0cnVjdHVyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgemVyby1jb3B5IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBgdGNwX21tYXBgLiBUaGUgY29kZSBzZWVtcyB0byBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGB6Y192bWFgLCB0cmFja2luZyB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBtZW1vcnkgbWFwLCBzb2NrZXQsIGFuZCByZWZjb3VudHMuIGB0Y3BfemNfbWVtX2NoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBhcmUgaW1wb3J0YW50IGFzIHRoZXkgbXVzdCBiZSB0aGUgYm9va2tlZXBpbmcgb3BlcmF0aW9ucyB0byB0cmFjayByZXNvdXJjZXMgdGhhdCBhcmUgbWFuYWdlZCBieSB0aGlzIGNvZGUuCgpJIHNlZSByZWZlcmVuY2VzIHRvIGB2bWFgIGFuZCBgbW1gIChtZW1vcnkgbWFwKS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIHZtYSBpbiBgdGNwX3pjX3ZtYV92YWxpZGAsIGFuZCB1cGRhdGVzIGBmaW5kX3RjcF92bWFgIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHVzZSBvZiBga21hbGxvY19vYmpgLCB0aGUgcmVmY291bnRpbmcsIGFuZCBtZW1vcnkgbWFwIG1hbmlwdWxhdGlvbiBhcmUgcmVkIGZsYWdzIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgc2NlbmFyaW9zLiAqVGhpcyBpcyB3aGVyZSBLTVNBTiB3aWxsIHNoaW5lKi4gVGhlIHplcm8tY29weSBmdW5jdGlvbmFsaXR5IGxpa2VseSBpbnZvbHZlcyBkaXJlY3RseSBtYXBwaW5nIHVzZXItc3BhY2UgYnVmZmVycyBpbnRvIGtlcm5lbCBzcGFjZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBzaXR1YXRpb25zIGlmIG5vdCBoYW5kbGVkIG1ldGljdWxvdXNseS4KCkJhc2VkIG9uIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIChgdGNwX3pjX3ZtYWApLCBuZXcgbWVtb3J5LXJlbGF0ZWQgZnVuY3Rpb25zLCBhbmQgdGhlIGludHJpY2FjaWVzIG9mIHplcm8tY29weSBtZWNoYW5pc21zLCAqdGhpcyBwYXRjaCBzZXJpZXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGZvY3VzZWQgS01TQU4gZnV6emluZyBzZXNzaW9uKi4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBpcyBlbGV2YXRlZCBkdWUgdG8gdGhlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGFuZCB0aGUgY29tcGxleCBpbnRlcnBsYXkgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuIEkgbXVzdCBjaGVjayB0aGUgcmVmZXJlbmNlIGNvdW50IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHNldCBvZiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jPTMzMTk9RVhQT1JUX1NZTUJPTChza193YWl0X2RhdGEpO1xuLS1cbm5ldC9jb3JlL3NvY2suYy0zMzIxLS8qKlxubmV0L2NvcmUvc29jay5jOjMzMjI6ICpcdF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCAtIGluY3JlYXNlIG1lbW9yeV9hbGxvY2F0ZWRcbm5ldC9jb3JlL3NvY2suYy0zMzIzLSAqXHRAc2s6IHNvY2tldFxuLS1cbm5ldC9jb3JlL3NvY2suYy0zMzM1LSAqL1xubmV0L2NvcmUvc29jay5jOjMzMzY6aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcbm5ldC9jb3JlL3NvY2suYy0zMzM3LXtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MzQ1ND1pbnQgX19za19tZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGtpbmQpXG4tLVxubmV0L2NvcmUvc29jay5jLTM0NTgtXHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgYW10IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbm5ldC9jb3JlL3NvY2suYzozNDU5Olx0cmV0ID0gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHNrLCBzaXplLCBhbXQsIGtpbmQpO1xubmV0L2NvcmUvc29jay5jLTM0NjAtXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9zb2NrLmNgIC0gU29ja2V0IExpZmVjeWNsZSAmYW1wOyBTdGF0ZSBUcmFuc2l0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGxpbmVzIDMzMzYtMzQ0MCBvZiBgbmV0L2NvcmUvc29jay5jYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgc2VjdGlvbiBkZWFsaW5nIHdpdGggc29ja2V0IG1hbmFnZW1lbnQsIHByb2JhYmx5IGZvY3VzaW5nIG9uIHRoZSBsaWZlY3ljbGUgb2YgYSBzb2NrZXQgYW5kIGhvdyBpdHMgc3RhdGUgdHJhbnNpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVlcGx5IHRvIG9wdGltaXplIGhvdyBJIHdvcmsgd2l0aCBzb2NrZXQgY29ubmVjdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaW5lciBwb2ludHMgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBJIGltYWdpbmUgdGhlcmUmIzM5O2xsIGJlIGEgbG90IG9mIGNvbmRpdGlvbmFsIGxvZ2ljIGhlcmUsIHJlYWN0aW5nIHRvIGRpZmZlcmVudCBldmVudHMgYW5kIHNvY2tldCBmbGFncy4gUGVyaGFwcyB0aGlzIHNlY3Rpb24gaGFuZGxlcyB0aGUgc2V0dGluZyBvZiBwYXJhbWV0ZXJzIGZvciBzb2NrZXQgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGhhbmRsZXMgYm90aCBUQ1AgYW5kIFVEUCAtIEkga25vdyB0aGVyZSBhcmUgdmFyaWF0aW9ucyBpbiBoYW5kbGluZyBmb3IgY29ubmVjdGlvbi1vcmllbnRlZCB2cyBjb25uZWN0aW9ubGVzcyBwcm90b2NvbHMuIEkgYWxzbyB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBzaW5jZSBzb2NrZXQgb3BlcmF0aW9ucyBhcmUgb2J2aW91c2x5IHNoYXJlZC4gSG9wZWZ1bGx5LCB0aGVyZSBpcyBhIGNsZWFyIGJyZWFrZG93biBvZiB0aGUgc29ja2V0JiMzOTtzIGRpZmZlcmVudCBzdGF0ZXMgKGUuZy4sIExJU1RFTiwgQ09OTkVDVEVELCBFU1RBQkxJU0hFRCwgQ0xPU0VELCBldGMuKS4gQW5kLCBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgaXQgcmVzcG9uZHMgdG8gZHJvcHBlZCBjb25uZWN0aW9ucyBvciBuZXR3b3JrIGZhaWx1cmVzLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMzY6XHRpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKVxuMzMzNzpcdHtcbjMzMzg6XHRcdGJvb2wgbWVtY2dfZW5hYmxlZCA9IGZhbHNlLCBjaGFyZ2VkID0gZmFsc2U7XG4zMzM5Olx0XHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cdTAwM2Vza19wcm90O1xuMzM0MDpcdFx0bG9uZyBhbGxvY2F0ZWQgPSAwO1xuMzM0MTpcdFxuMzM0MjpcdFx0aWYgKCFzay1cdTAwM2Vza19ieXBhc3NfcHJvdF9tZW0pIHtcbjMzNDM6XHRcdFx0c2tfbWVtb3J5X2FsbG9jYXRlZF9hZGQoc2ssIGFtdCk7XG4zMzQ0Olx0XHRcdGFsbG9jYXRlZCA9IHNrX21lbW9yeV9hbGxvY2F0ZWQoc2spO1xuMzM0NTpcdFx0fVxuMzM0NjpcdFxuMzM0NzpcdFx0aWYgKG1lbV9jZ3JvdXBfc2tfZW5hYmxlZChzaykpIHtcbjMzNDg6XHRcdFx0bWVtY2dfZW5hYmxlZCA9IHRydWU7XG4zMzQ5Olx0XHRcdGNoYXJnZWQgPSBtZW1fY2dyb3VwX3NrX2NoYXJnZShzaywgYW10LCBnZnBfbWVtY2dfY2hhcmdlKCkpO1xuMzM1MDpcdFx0XHRpZiAoIWNoYXJnZWQpXG4zMzUxOlx0XHRcdFx0Z290byBzdXBwcmVzc19hbGxvY2F0aW9uO1xuMzM1MjpcdFx0fVxuMzM1MzpcdFxuMzM1NDpcdFx0aWYgKCFhbGxvY2F0ZWQpXG4zMzU1Olx0XHRcdHJldHVybiAxO1xuMzM1NjpcdFxuMzM1NzpcdFx0LyogVW5kZXIgbGltaXQuICovXG4zMzU4Olx0XHRpZiAoYWxsb2NhdGVkIFx1MDAzYz0gc2tfcHJvdF9tZW1fbGltaXRzKHNrLCAwKSkge1xuMzM1OTpcdFx0XHRza19sZWF2ZV9tZW1vcnlfcHJlc3N1cmUoc2spO1xuMzM2MDpcdFx0XHRyZXR1cm4gMTtcbjMzNjE6XHRcdH1cbjMzNjI6XHRcbjMzNjM6XHRcdC8qIFVuZGVyIHByZXNzdXJlLiAqL1xuMzM2NDpcdFx0aWYgKGFsbG9jYXRlZCBcdTAwM2Ugc2tfcHJvdF9tZW1fbGltaXRzKHNrLCAxKSlcbjMzNjU6XHRcdFx0c2tfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHNrKTtcbjMzNjY6XHRcbjMzNjc6XHRcdC8qIE92ZXIgaGFyZCBsaW1pdC4gKi9cbjMzNjg6XHRcdGlmIChhbGxvY2F0ZWQgXHUwMDNlIHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMikpXG4zMzY5Olx0XHRcdGdvdG8gc3VwcHJlc3NfYWxsb2NhdGlvbjtcbjMzNzA6XHRcbjMzNzE6XHRcdC8qIEd1YXJhbnRlZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHVuZGVyIHByZXNzdXJlIChlaXRoZXIgZ2xvYmFsXG4zMzcyOlx0XHQgKiBvciBtZW1jZykgdG8gbWFrZSBzdXJlIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiBSRkMgNzMyMyAoVENQXG4zMzczOlx0XHQgKiBFeHRlbnNpb25zIGZvciBIaWdoIFBlcmZvcm1hbmNlKSB3b3JrIHByb3Blcmx5LlxuMzM3NDpcdFx0ICpcbjMzNzU6XHRcdCAqIFRoaXMgcnVsZSBkb2VzIE5PVCBzdGFuZCB3aGVuIGV4Y2VlZHMgZ2xvYmFsIG9yIG1lbWNnJiMzOTtzIGhhcmRcbjMzNzY6XHRcdCAqIGxpbWl0LCBvciBlbHNlIGEgRG9TIGF0dGFjayBjYW4gYmUgdGFrZW4gcGxhY2UgYnkgc3Bhd25pbmdcbjMzNzc6XHRcdCAqIGxvdHMgb2Ygc29ja2V0cyB3aG9zZSB1c2FnZSBhcmUgdW5kZXIgbWluaW11bSBidWZmZXIgc2l6ZS5cbjMzNzg6XHRcdCAqL1xuMzM3OTpcdFx0aWYgKGtpbmQgPT0gU0tfTUVNX1JFQ1YpIHtcbjMzODA6XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpIFx1MDAzYyBza19nZXRfcm1lbTAoc2ssIHByb3QpKVxuMzM4MTpcdFx0XHRcdHJldHVybiAxO1xuMzM4MjpcdFxuMzM4MzpcdFx0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4zMzg0Olx0XHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4zMzg1Olx0XG4zMzg2Olx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG4zMzg3Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3dtZW1fcXVldWVkIFx1MDAzYyB3bWVtMClcbjMzODg6XHRcdFx0XHRcdHJldHVybiAxO1xuMzM4OTpcdFx0XHR9IGVsc2UgaWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfd21lbV9hbGxvYykgXHUwMDNjIHdtZW0wKSB7XG4zMzkwOlx0XHRcdFx0XHRyZXR1cm4gMTtcbjMzOTE6XHRcdFx0fVxuMzM5MjpcdFx0fVxuMzM5MzpcdFxuMzM5NDpcdFx0aWYgKHNrX2hhc19tZW1vcnlfcHJlc3N1cmUoc2spKSB7XG4zMzk1Olx0XHRcdHU2NCBhbGxvYztcbjMzOTY6XHRcbjMzOTc6XHRcdFx0LyogVGhlIGZvbGxvd2luZyAmIzM5O2F2ZXJhZ2UmIzM5OyBoZXVyaXN0aWMgaXMgd2l0aGluIHRoZVxuMzM5ODpcdFx0XHQgKiBzY29wZSBvZiBnbG9iYWwgYWNjb3VudGluZywgc28gaXQgb25seSBtYWtlc1xuMzM5OTpcdFx0XHQgKiBzZW5zZSBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZS5cbjM0MDA6XHRcdFx0ICovXG4zNDAxOlx0XHRcdGlmICghc2tfdW5kZXJfZ2xvYmFsX21lbW9yeV9wcmVzc3VyZShzaykpXG4zNDAyOlx0XHRcdFx0cmV0dXJuIDE7XG4zNDAzOlx0XG4zNDA0Olx0XHRcdC8qIFRyeSB0byBiZSBmYWlyIGFtb25nIGFsbCB0aGUgc29ja2V0cyB1bmRlciBnbG9iYWxcbjM0MDU6XHRcdFx0ICogcHJlc3N1cmUgYnkgYWxsb3dpbmcgdGhlIG9uZXMgdGhhdCBiZWxvdyBhdmVyYWdlXG4zNDA2Olx0XHRcdCAqIHVzYWdlIHRvIHJhaXNlLlxuMzQwNzpcdFx0XHQgKi9cbjM0MDg6XHRcdFx0YWxsb2MgPSBza19zb2NrZXRzX2FsbG9jYXRlZF9yZWFkX3Bvc2l0aXZlKHNrKTtcbjM0MDk6XHRcdFx0aWYgKHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMikgXHUwMDNlIGFsbG9jICpcbjM0MTA6XHRcdFx0ICAgIHNrX21lbV9wYWdlcyhzay1cdTAwM2Vza193bWVtX3F1ZXVlZCAmIzQzO1xuMzQxMTpcdFx0XHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpICYjNDM7XG4zNDEyOlx0XHRcdFx0XHQgc2stXHUwMDNlc2tfZm9yd2FyZF9hbGxvYykpXG4zNDEzOlx0XHRcdFx0cmV0dXJuIDE7XG4zNDE0Olx0XHR9XG4zNDE1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB6ZXJvLWNvcHkgVENQIHJlY2VpdmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG1lY2hhbmljcywgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBgZmluZF90Y3Bfdm1hYCBmdW5jdGlvbiB3aXRoaW4gdGhpcyBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBwYXRoIHplcm8tY29weSB0YWtlcyBvbiB0aGUgcmVjZWl2aW5nIGVuZC4gSSBleHBlY3QgYGZpbmRfdGNwX3ZtYWAgaXMgY3JpdGljYWwgdG8gbG9jYXRpbmcgdGhlIHJlbGV2YW50IG1lbW9yeSBtYXAgb3IgdmlydHVhbCBtZW1vcnkgYXJlYSwgd2hpY2ggaXMgdGhlIGNydXggb2YgemVyby1jb3B5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX3RjcF92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMjM5PXN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyNjQtXG5uZXQvaXB2NC90Y3AuYzoyMjY1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm5ldC9pcHY0L3RjcC5jLTIyNjYtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMjkxPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIzMzEtXG5uZXQvaXB2NC90Y3AuYzoyMzMyOlx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXHUwMDNlbW0sIGFkZHJlc3MsIFx1MDAyNm1tYXBfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTIzMzMtXHRpZiAoIXZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHRjcF96ZXJvY29weV9yZWNlaXZlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgYXR0ZW50aW9uJiMzOTtzIGJlZW4gZHJhd24gdG8gYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIEkgd2FudCB0byBnZXQgYSBjbG9zZXIgbG9vayBhdCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZSAyMzMwLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHplcm8tY29weSBpcyBiZWluZyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjcml0aWNhbCBsb2dpYyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBoYW5kbGluZyBzY2F0dGVyLWdhdGhlciwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBidWZmZXIgcmVhc3NlbWJseSBlZmZpY2llbnRseSwgb3IgaWYgdGhlcmUgbWlnaHQgYmUgc29tZSBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCByZXF1aXJlIGNhcmVmdWwgZXhhbWluYXRpb24gb2YgbWVtb3J5IGFkZHJlc3NlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGF0IHBhcnRpY3VsYXIgc3BvdCBpbiB0aGUgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBiZWluZyBoYW5kbGVkIG9wdGltYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI4NTpcdFx0fVxuMjI4NjpcdFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcbjIyODc6XHRcdHJldHVybiB2bWE7XG4yMjg4Olx0fVxuMjI4OTpcdFxuMjI5MDpcdCNkZWZpbmUgVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRSAzMlxuMjI5MTpcdHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuMjI5MjpcdFx0XHRcdFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcbjIyOTM6XHRcdFx0XHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXG4yMjk0Olx0e1xuMjI5NTpcdFx0dTMyIGxlbmd0aCA9IDAsIG9mZnNldCwgdm1hX2xlbiwgYXZhaWxfbGVuLCBjb3B5bGVuID0gMDtcbjIyOTY6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXpjLVx1MDAzZWFkZHJlc3M7XG4yMjk3Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZXNbVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRV07XG4yMjk4Olx0XHRzMzIgY29weWJ1Zl9sZW4gPSB6Yy1cdTAwM2Vjb3B5YnVmX2xlbjtcbjIyOTk6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMjMwMDpcdFx0Y29uc3Qgc2tiX2ZyYWdfdCAqZnJhZ3MgPSBOVUxMO1xuMjMwMTpcdFx0dW5zaWduZWQgaW50IHBhZ2VzX3RvX21hcCA9IDA7XG4yMzAyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbjIzMDM6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuMjMwNDpcdFx0dTMyIHNlcSA9IHRwLVx1MDAzZWNvcGllZF9zZXE7XG4yMzA1Olx0XHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xuMjMwNjpcdFx0aW50IGlucSA9IHRjcF9pbnEoc2spO1xuMjMwNzpcdFx0Ym9vbCBtbWFwX2xvY2tlZDtcbjIzMDg6XHRcdGludCByZXQ7XG4yMzA5Olx0XG4yMzEwOlx0XHR6Yy1cdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XG4yMzExOlx0XHR6Yy1cdTAwM2Vtc2dfZmxhZ3MgPSAwO1xuMjMxMjpcdFxuMjMxMzpcdFx0aWYgKGFkZHJlc3MgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fCBhZGRyZXNzICE9IHpjLVx1MDAzZWFkZHJlc3MpXG4yMzE0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMxNTpcdFxuMjMxNjpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pXG4yMzE3Olx0XHRcdHJldHVybiAtRU5PVENPTk47XG4yMzE4Olx0XG4yMzE5Olx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4yMzIwOlx0XG4yMzIxOlx0XHRpZiAoaW5xIFx1MDAyNlx1MDAyNiBpbnEgXHUwMDNjPSBjb3B5YnVmX2xlbilcbjIzMjI6XHRcdFx0cmV0dXJuIHJlY2VpdmVfZmFsbGJhY2tfdG9fY29weShzaywgemMsIGlucSwgdHNzKTtcbjIzMjM6XHRcbjIzMjQ6XHRcdGlmIChpbnEgXHUwMDNjIFBBR0VfU0laRSkge1xuMjMyNTpcdFx0XHR6Yy1cdTAwM2VsZW5ndGggPSAwO1xuMjMyNjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGlucTtcbjIzMjc6XHRcdFx0aWYgKCFpbnEgXHUwMDI2XHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbjIzMjg6XHRcdFx0XHRyZXR1cm4gLUVJTztcbjIzMjk6XHRcdFx0cmV0dXJuIDA7XG4yMzMwOlx0XHR9XG4yMzMxOlx0XG4yMzMyOlx0XHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cdTAwM2VtbSwgYWRkcmVzcywgXHUwMDI2bW1hcF9sb2NrZWQpO1xuMjMzMzpcdFx0aWYgKCF2bWEpXG4yMzM0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjMzNTpcdFxuMjMzNjpcdFx0dm1hX2xlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpjLVx1MDAzZWxlbmd0aCwgdm1hLVx1MDAzZXZtX2VuZCAtIGFkZHJlc3MpO1xuMjMzNzpcdFx0YXZhaWxfbGVuID0gbWluX3QodTMyLCB2bWFfbGVuLCBpbnEpO1xuMjMzODpcdFx0dG90YWxfYnl0ZXNfdG9fbWFwID0gYXZhaWxfbGVuIFx1MDAyNiB+KFBBR0VfU0laRSAtIDEpO1xuMjMzOTpcdFx0aWYgKHRvdGFsX2J5dGVzX3RvX21hcCkge1xuMjM0MDpcdFx0XHRpZiAoISh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgVENQX1JFQ0VJVkVfWkVST0NPUFlfRkxBR19UTEJfQ0xFQU5fSElOVCkpXG4yMzQxOlx0XHRcdFx0emFwX3ZtYV9yYW5nZSh2bWEsIGFkZHJlc3MsIHRvdGFsX2J5dGVzX3RvX21hcCk7XG4yMzQyOlx0XHRcdHpjLVx1MDAzZWxlbmd0aCA9IHRvdGFsX2J5dGVzX3RvX21hcDtcbjIzNDM6XHRcdFx0emMtXHUwMDNlcmVjdl9za2lwX2hpbnQgPSAwO1xuMjM0NDpcdFx0fSBlbHNlIHtcbjIzNDU6XHRcdFx0emMtXHUwMDNlbGVuZ3RoID0gYXZhaWxfbGVuO1xuMjM0NjpcdFx0XHR6Yy1cdTAwM2VyZWN2X3NraXBfaGludCA9IGF2YWlsX2xlbjtcbjIzNDc6XHRcdH1cbjIzNDg6XHRcdHJldCA9IDA7XG4yMzQ5Olx0XHR3aGlsZSAobGVuZ3RoICYjNDM7IFBBR0VfU0laRSBcdTAwM2M9IHpjLVx1MDAzZWxlbmd0aCkge1xuMjM1MDpcdFx0XHRpbnQgbWFwcGFibGVfb2Zmc2V0O1xuMjM1MTpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjIzNTI6XHRcbjIzNTM6XHRcdFx0aWYgKHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50IFx1MDAzYyBQQUdFX1NJWkUpIHtcbjIzNTQ6XHRcdFx0XHR1MzIgb2Zmc2V0X2ZyYWc7XG4yMzU1Olx0XG4yMzU2Olx0XHRcdFx0aWYgKHNrYikge1xuMjM1NzpcdFx0XHRcdFx0aWYgKHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50IFx1MDAzZSAwKVxuMjM1ODpcdFx0XHRcdFx0XHRicmVhaztcbjIzNTk6XHRcdFx0XHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuMjM2MDpcdFx0XHRcdFx0b2Zmc2V0ID0gc2VxIC0gVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcTtcbjIzNjE6XHRcdFx0XHR9IGVsc2Uge1xuMjM2MjpcdFx0XHRcdFx0c2tiID0gdGNwX3JlY3Zfc2tiKHNrLCBzZXEsIFx1MDAyNm9mZnNldCk7XG4yMzYzOlx0XHRcdFx0fVxuMjM2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhbmQgWmVyby1Db3B5IFZNQXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBmaW5kX3RjcF92bWEoY3VycmVudC0mZ3Q7bW0sIGFkZHJlc3MsICZhbXA7bW1hcF9sb2NrZWQpYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGl0IG5lZWRzIHRvIGZpbmQgdGhlIHJlbGV2YW50IFZNQS4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gYGZpbmRfdGNwX3ZtYWAuIEFoYSwgaGVyZSYjMzk7cyBgdGNwX3pjX3ZtYV92YWxpZGA6CgpgYGBjCnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCgkJCSAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pCnsKCWNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKCglyZXR1cm4gdm1hLSZndDt2bV9vcHMgPT0gJmFtcDt0Y3Bfdm1fb3BzICZhbXA7JmFtcDsgemNfdm1hICZhbXA7JmFtcDsgemNfdm1hLSZndDttbSA9PSBtbTsKfQpgYGAKCldhaXQgYSBzZWNvbmTigKYgSSBzZWUgdGhhdCB0aGUgYHpjX3ZtYWAmIzM5O3MgYG1tYCBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGN1cnJlbnQgcHJvY2VzcyYjMzk7cyBtZW1vcnkgbWFuYWdlci4gQnV0LCBpcyB0aGUgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgVk1BIChgemNfdm1hLSZndDtza2ApIGdldHRpbmcgdmVyaWZpZWQgaGVyZT8gSG1tLCBubywgSSBkb24mIzM5O3Qgc2VlIGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBUaGUgY2hlY2sgZm9yIGB2bWEtJmd0O3ZtX29wcyA9PSAmYW1wO3RjcF92bV9vcHNgIGFuZCBgemNfdm1hICZhbXA7JmFtcDsgemNfdm1hLSZndDttbSA9PSBtbWAgaXMgaW4gcGxhY2UsIGJ1dCBzaG91bGQgd2UgYmUgYWxzbyBhc3NlcnRpbmcgdGhhdCBgemNfdm1hLSZndDtzayA9PSBza2AgdG8gZW5zdXJlIHRoaXMgVk1BIGJlbG9uZ3MgdG8gdGhpcyBzb2NrZXQ/IEl0IGZlZWxzIGxpa2Ugd2UgY291bGQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBpZiB0aGlzIGlzbiYjMzk7dCBjb3JyZWN0bHkgdmFsaWRhdGVkLgoKT2theSwgbGV0IG1lIGJyb2FkZW4gbXkgc2VhcmNoIG5vdy4gSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGB6Y192bWFgIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIGB6Y192bWFgIGFuZCBpdHMgbWVtYmVycywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgY29uZmlybSBpZiBzdWNoIGEgY2hlY2sgaXMgcmVhbGx5IG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGVyZSBpdCBuZWVkcyB0byBiZSBwbGFjZWQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYWxsIGRlZmluZWQgYW5kIHVzZWQgdG8gbWFwIHRoZSByZWxhdGlvbnNoaXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjX3ZtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xODU4PXZvaWQgdGNwX3NldF9yY3ZidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE4NjMtI2lmZGVmIENPTkZJR19NTVVcbm5ldC9pcHY0L3RjcC5jOjE4NjQ6c3RydWN0IHRjcF96Y192bWEge1xubmV0L2lwdjQvdGNwLmMtMTg2NS1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4tLVxubmV0L2lwdjQvdGNwLmM9MTg4Nj1zdGF0aWMgaW50IHRjcF96Y19tZW1fY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTA3LVxubmV0L2lwdjQvdGNwLmM6MTkwODpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5uZXQvaXB2NC90Y3AuYy0xOTA5LXtcbm5ldC9pcHY0L3RjcC5jOjE5MTA6XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbm5ldC9pcHY0L3RjcC5jLTE5MTEtXG5uZXQvaXB2NC90Y3AuYzoxOTEyOlx0cmVmY291bnRfaW5jKFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQpO1xubmV0L2lwdjQvdGNwLmMtMTkxMy19XG5uZXQvaXB2NC90Y3AuYy0xOTE0LVxubmV0L2lwdjQvdGNwLmM6MTkxNTpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubmV0L2lwdjQvdGNwLmMtMTkxNi17XG5uZXQvaXB2NC90Y3AuYzoxOTE3Olx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG5uZXQvaXB2NC90Y3AuYy0xOTE4LVxubmV0L2lwdjQvdGNwLmM6MTkxOTpcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbm5ldC9pcHY0L3RjcC5jOjE5MjA6XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCB6Y192bWEtXHUwMDNlbnJfcGFnZXMpO1xubmV0L2lwdjQvdGNwLmM6MTkyMTpcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG5uZXQvaXB2NC90Y3AuYzoxOTIyOlx0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xubmV0L2lwdjQvdGNwLmM6MTkyMzpcdFx0a2ZyZWUoemNfdm1hKTtcbm5ldC9pcHY0L3RjcC5jLTE5MjQtXHR9XG4tLVxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG5uZXQvaXB2NC90Y3AuYzoxOTI4Olx0Lm9wZW4gPSB0Y3BfemNfdm1hX29wZW4sXG5uZXQvaXB2NC90Y3AuYzoxOTI5Olx0LmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSxcbm5ldC9pcHY0L3RjcC5jLTE5MzAtfTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xOTMyPWludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTM0LXtcbm5ldC9pcHY0L3RjcC5jOjE5MzU6XHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hO1xubmV0L2lwdjQvdGNwLmMtMTkzNi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTk0NS1cdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xubmV0L2lwdjQvdGNwLmM6MTk0NjpcdHpjX3ZtYSA9IGttYWxsb2Nfb2JqKCp6Y192bWEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5uZXQvaXB2NC90Y3AuYzoxOTQ3Olx0aWYgKCF6Y192bWEpXG5uZXQvaXB2NC90Y3AuYy0xOTQ4LVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9pcHY0L3RjcC5jLTE5NDktXG5uZXQvaXB2NC90Y3AuYzoxOTUwOlx0emNfdm1hLVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG5uZXQvaXB2NC90Y3AuYzoxOTUxOlx0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xubmV0L2lwdjQvdGNwLmM6MTk1MjpcdHpjX3ZtYS1cdTAwM2VzayA9IHNvY2stXHUwMDNlc2s7XG5uZXQvaXB2NC90Y3AuYzoxOTUzOlx0cmVmY291bnRfc2V0KFx1MDAyNnpjX3ZtYS1cdTAwM2VyZWZjbnQsIDEpO1xubmV0L2lwdjQvdGNwLmM6MTk1NDpcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xubmV0L2lwdjQvdGNwLmM6MTk1NTpcdHNvY2tfaG9sZCh6Y192bWEtXHUwMDNlc2spO1xubmV0L2lwdjQvdGNwLmM6MTk1NjpcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXHUwMDNlc2ssIG5yX3BhZ2VzKSkge1xubmV0L2lwdjQvdGNwLmM6MTk1NzpcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG5uZXQvaXB2NC90Y3AuYzoxOTU4Olx0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xubmV0L2lwdjQvdGNwLmM6MTk1OTpcdFx0a2ZyZWUoemNfdm1hKTtcbm5ldC9pcHY0L3RjcC5jLTE5NjAtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE5NjMtXHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dGNwX3ZtX29wcztcbm5ldC9pcHY0L3RjcC5jOjE5NjQ6XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xubmV0L2lwdjQvdGNwLmMtMTk2NS1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE5NjctXG5uZXQvaXB2NC90Y3AuYzoxOTY4OnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5uZXQvaXB2NC90Y3AuYy0xOTY5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5uZXQvaXB2NC90Y3AuYy0xOTcwLXtcbm5ldC9pcHY0L3RjcC5jOjE5NzE6XHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbm5ldC9pcHY0L3RjcC5jLTE5NzItXG5uZXQvaXB2NC90Y3AuYzoxOTczOlx0cmV0dXJuIHZtYS1cdTAwM2V2bV9vcHMgPT0gXHUwMDI2dGNwX3ZtX29wcyBcdTAwMjZcdTAwMjYgemNfdm1hIFx1MDAyNlx1MDAyNiB6Y192bWEtXHUwMDNlbW0gPT0gbW07XG5uZXQvaXB2NC90Y3AuYy0xOTc0LX1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yMjY1PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMjcxLVx0aWYgKHZtYSkge1xubmV0L2lwdjQvdGNwLmM6MjI3MjpcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG5uZXQvaXB2NC90Y3AuYy0yMjczLVx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTIyODEtXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbm5ldC9pcHY0L3RjcC5jOjIyODI6XHRpZiAoIXZtYSB8fCAhdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xubmV0L2lwdjQvdGNwLmMtMjI4My1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODA5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgUGF0Y2ggYW5kIFNhbml0aXplciBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIG1ldGljdWxvdXNseS4gRmlyc3QsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiB3ZSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBjcnVjaWFsIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4gaXMgdGhlIGtleSBoZXJlLiBTdGFuZGFyZCBLQVNBTiBjb25maWd1cmF0aW9ucywgbGlrZSB0aGUgdXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnIHdlJiMzOTtyZSBsaWtlbHkgdXNpbmcsIGFyZSBhbHJlYWR5IHJvYnVzdC4gVGhleSBnaXZlIHVzIGEgZnVsbCBzdWl0ZSBvZiBkZWJ1ZyB0b29scyDigJMgS0FTQU4mIzM5O3Mgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4sIExPQ0tERVAgZm9yIGxvY2tpbmcgaXNzdWVzLCB0aGUgVUIgc2FuaXRpemVycywgYW5kIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBsYXNlci1mb2N1c2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlLgoKVGhlIGZ1bmRhbWVudGFsIHJ1bGUgdGhhdCBsZWFwcyBvdXQ6IGlmIEtBU0FOIG9yIGFueSBvZiB0aGUgb3RoZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIGNhbiBjYXRjaCB0aGUgYnVnLCBLTVNBTiBpcyBzdXBlcmZsdW91cy4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgcmVzb3VyY2VzLgoKTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBhYm91dCBzb2NrZXQgYWNjb3VudGluZyBhbmQgemVyby1jb3B5IHJlY2VpdmUgVk1Bcy4KCjEuICBJdCYjMzk7cyBpbnRyb2R1Y2luZyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhpcyBpcyBhYm91dCB0cmFja2luZy4gV2UmIzM5O3ZlIGdvdCB0aGUgYWRkaXRpb24gdG8gYHNvY2suaGAgYW5kIHRoZSByZWxldmFudCB0cmFjZSBldmVudHMuCgoyLiAgV2l0aGluIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgLCB0aGlzIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGlzIHNwZWNpZmljYWxseSAqYXZvaWRpbmcqIHRoZSBgU0tfTUVNX1NFTkRgIGJyYW5jaC4gSW50ZXJlc3RpbmcsIGl0JiMzOTtzIGRpdmVydGluZyBzb21lIHNvcnQgb2YgbG9naWMuCgozLiAgVGhlIGB0Y3BfbW1hcGAgZnVuY3Rpb24gaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgd2UmIzM5O3JlIHNlZWluZyBhbGxvY2F0aW9uIG9mIGEgYHN0cnVjdCB0Y3BfemNfdm1hYC4gSXQmIzM5O3MgdXNpbmcgYGttYWxsb2Nfb2JqYC4gV2FpdCBhIHNlY29uZCEgSSBuZWVkIHRvIGJlIHN1cmU7IGxldCBtZSBnbyBzdHJhaWdodCB0byB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgaG93IGBrbWFsbG9jX29iamAgd29ya3MuIFdoYXQgYXJlIHRoZSBhbGxvY2F0aW9uIGNoYXJhY3RlcmlzdGljcz8gSXMgaXQgZ29pbmcgdG8gZG8gc29tZXRoaW5nIHRoYXQgS0FTQU4gb3IgS01TQU4gd2lsbCBiZSB0cmlnZ2VyZWQgYnk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUga21hbGxvY19vYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9MTA3Mz12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyMy0gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMjQ6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyNS1cdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzNS0gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzY6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTM3LVx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgQ09VTlQpXG4tLVxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2My0jdW5kZWYgdmZyZWVcbmxpYi9kZWNvbXByZXNzX3VueHouYzoxNjQ6I2RlZmluZSBrbWFsbG9jX29iaih0eXBlKSBtYWxsb2Moc2l6ZW9mKHR5cGUpKVxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2NS0jZGVmaW5lIGtmcmVlKHB0cikgZnJlZShwdHIpXG4tLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19hcnJheSh1bnNpZ25lZCBuLCBzaXplX3QgcywgZ2ZwX3QgZ2ZwKVxuLS1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02Ny1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo2ODojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjktXHQoKHR5cGVvZihWQVJfT1JfVFlQRSkgKilrbWFsbG9jKHNpemVvZih0eXBlb2YoVkFSX09SX1RZUEUpKSwgMCkpXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzAtXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6NzE6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzItXHQoKHR5cGVvZihWQVJfT1JfVFlQRSkgKilrbWFsbG9jKHNpemVvZih0eXBlb2YoVkFSX09SX1RZUEUpKSAqIChDT1VOVCksIDApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGNwX3pjX3ZtYWAgU3RydWN0dXJlIGFuZCBaZXJvLUNvcHkgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGBzdHJ1Y3QgdGNwX3pjX3ZtYWAuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYG5yX3BhZ2VzYCwgYG1tYCwgYHJlZmNudGAsIGFuZCBgc2tgLiAgTm93LCBJJiMzOTttIGNoZWNraW5nIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBpbiBgdGNwX21tYXBgLiAgVGhlIGBrbWFsbG9jX29iamAgY2FsbCBzdWdnZXN0cyBhbGxvY2F0aW9uLCBhbmQgdGhlIHN1YnNlcXVlbnQgYXNzaWdubWVudHMgdG8gZWFjaCBmaWVsZCAoYG5yX3BhZ2VzYCwgYG1tYCwgYHNrYCkgYWxvbmcgd2l0aCB0aGUgYHJlZmNvdW50X3NldGAgY2FsbCBjb25maXJtcyBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiBhbGwgaXRzIG1lbWJlcnMhIFRoYXQmIzM5O3MgZ29vZC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUmIzM5O3MgcGFkZGluZywgd2hpY2ggY291bGQgbGVhZCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHVuaW5pdGlhbGl6ZWQgZGF0YSB3ZXJlIHJlYWQuIE9uIGFtZDY0LCBiYXNlZCBvbiB0aGUga25vd24gc2l6ZXMgb2YgdGhvc2UgbWVtYmVycywgSSBjYW4gc2VlOiBgbnJfcGFnZXNgIGlzIDggYnl0ZXMsIGBtbWAgaXMgOCBieXRlcywgYHJlZmNudGAgaXMgNCBieXRlcywgc28gdGhlcmUgaXMgcGFkZGluZyBvZiA0IGJ5dGVzLCBiZWZvcmUgdGhlIDggYnl0ZXMgb2YgYHNrYC4gVGhpcyBzdW1zIHVwIHRvIGEgdG90YWwgb2YgMzIgYnl0ZXMgZm9yIHRoZSBzdHJ1Y3QuCgpNeSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBhbnkgb2YgdGhpcyBgemNfdm1hYCBkYXRhIGdldHMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuICBJdCBhcHBlYXJzIHRoaXMgc3RydWN0dXJlIGlzIGVudGlyZWx5IGtlcm5lbC1pbnRlcm5hbC4gSXQmIzM5O3Mgc3RvcmVkIGluIGB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YWAsIHdoaWNoIHNlZW1zIHNhZmUsIGZyb20gYSBjdXJzb3J5IGluc3BlY3Rpb24uIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIGFjY2Vzc2VkIHdpdGhpbiBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBhbmQgYHRjcF96Y192bWFfdmFsaWRgLCBhbmQgdGhlIGNvZGUgSSYjMzk7bSByZXZpZXdpbmcgbWFrZXMgbm8gbWVudGlvbiBvZiBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdCB0byB1c2VyIHNwYWNlLiBUaGUgYWNjZXNzZXMgbG9vayBjb250cm9sbGVkLCBhbmQgdGhlIHJlZmNvdW50IG1hbmFnZW1lbnQgYW5kIGNsZWFudXAgaW4gYHRjcF96Y192bWFfY2xvc2VgIGxvb2sgY29ycmVjdC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaGVyZSEKCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHplcm8tY29weSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBzb2NrZXQgcmVjZWl2ZSBidWZmZXJzLiBJJiMzOTttIGxvb2tpbmcgYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgcGFnZXMgZ2V0IG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgdmlhIG1lY2hhbmlzbXMgbGlrZSBgemFwX3ZtYV9yYW5nZWAgYW5kIGB2bV9pbnNlcnRfcGFnZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZmluZF90Y3Bfdm1hYCBkb2VzIG5vdCBieXBhc3MgY2hlY2tzIGZvciB0aGlzIG1hcHBpbmcuCgpUaGUgY2hhbmdlIGluIGBmaW5kX3RjcF92bWFgIGlzIHRoZSBjcml0aWNhbCBwb2ludC4gIFRoZSBjb2RlIG5vdyB1c2VzIGB0Y3BfemNfdm1hX3ZhbGlkYC4gIFRoYXQmIzM5O3MgYSB2ZXJ5IGdvb2QgY2hlY2s6IGB2bWEtJmd0O3ZtX29wcyA9PSAmYW1wO3RjcF92bV9vcHMgJmFtcDsmYW1wOyB6Y192bWEgJmFtcDsmYW1wOyB6Y192bWEtJmd0O21tID09IG1tYC4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgVk1BIHR5cGUsIHRoYXQgd2UgaGF2ZSB2YWxpZCBwcml2YXRlIGRhdGEgKGB6Y192bWFgKSwgYW5kIHRoYXQgaXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBgbW1gLgoKQWxzbywgSSBzZWUgdGhlIGFkZGl0aW9uYWwgZmxhZ3MgYFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORGAgc2V0IGluIGB0Y3BfbW1hcGAsIHdoaWNoIGFyZSBnb29kIGZvciB6ZXJvLWNvcHkuCgpGaW5hbGx5LCByZWdhcmRpbmcgbWVtb3J5IGNoYXJnaW5nL3VuY2hhcmdpbmcsIGB0Y3BfemNfbWVtX2NoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCBjYWxsIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGFuZCBgX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZGAuIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBJJiMzOTttIGNoZWNraW5nIHRoYXQgd2hlbiBga2luZCA9PSBTS19NRU1fUkVDVl9aRVJPQ09QWWAsIHRoZSBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgYnlwYXNzIGFueSBjaGVja3MuIFRoZXJlIGFyZSBubyByZWxldmFudCBicmFuY2ggY29uZGl0aW9ucyBJIHNlZSB0byBjaGVjayBmb3IgdGhpcyBzcGVjaWZpYyBjYXNlLiBJIHdpbGwgY2hlY2sgZm9yIGFueSB0cmFjZSBldmVudHMgZm9yIHRoZSBidWZmZXIgbGltaXRzIGluIHRoZSBrZXJuZWwuIEkgd2lsbCBzZWFyY2ggZm9yIHRoZSB1c2VzIG9mIGBza21lbV9raW5kX25hbWVzYCB0byBzZWUuIFRoaXMgY29uZmlybXMgdGhlIGxpbWl0cyBhcmUgYmVpbmcgcmVzcGVjdGVkLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGVybXMgb2YgbWVtb3J5IGV4cG9zdXJlLiBJJiMzOTt2ZSBmb2N1c2VkIG9uIHplcm8tY29weSBhc3BlY3RzIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBrZXkgY2hlY2tzIGFyZSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ttZW1fa2luZF9uYW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtMzgtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg6Mzk6I2RlZmluZSBza21lbV9raW5kX25hbWVzXHRcdFx0XFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC00MC1cdFx0RU0oU0tfTUVNX1NFTkQpXHRcdFx0XFxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg9NTI9dGNwX3N0YXRlX25hbWVzXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg6NTM6c2ttZW1fa2luZF9uYW1lc1xuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTU0LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC02OC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo2OTojZGVmaW5lIHNob3dfc2ttZW1fa2luZF9uYW1lcyh2YWwpXHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oOjcwOlx0X19wcmludF9zeW1ib2xpYyh2YWwsIHNrbWVtX2tpbmRfbmFtZXMpXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtNzEtXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oPTk0PVRSQUNFX0VWRU5UKHNvY2tfZXhjZWVkX2J1Zl9saW1pdCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtMTM2LVx0XHRfX2VudHJ5LVx1MDAzZXdtZW1fcXVldWVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oOjEzNzpcdFx0c2hvd19za21lbV9raW5kX25hbWVzKF9fZW50cnktXHUwMDNla2luZClcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC0xMzgtXHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjAxCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDc1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRyYWNlIGV2ZW50cyBhcmUgZGVmaW5lZCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmU7IG5vIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgZmFsbGluZyBpbnRvIGEgS01TQU4td29ydGh5IHNpdHVhdGlvbi4gV2UgbmVlZCB0byBjaGVjayB0aG9zZSBmb3VyIGNyaXRlcmlhLCBhbmQgSSBjYW4gc2F5IHdpdGggY29uZmlkZW5jZSB0aGF0IG5vbmUgb2YgdGhlbSBhcmUgdHJpZ2dlcmVkIGhlcmUuCgoqICAgKipDcml0ZXJpb24gMToqKiBObyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlOyBzbywgbm8gd29ycmllcyBhYm91dCB1bmluaXRpYWxpemVkIGZpZWxkcyBsZWFraW5nIG91dC4KKiAgICoqQ3JpdGVyaW9uIDI6KiogQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiB1c2UuIE5vIGRlcGVuZGVuY3kgb24gcG90ZW50aWFsbHkgZ2FyYmFnZSB2YWx1ZXMuCiogICAqKkNyaXRlcmlvbiAzOioqIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRlZCBpcyBgc3RydWN0IHRjcF96Y192bWFgLiBBbmQgaXQmIzM5O3MgdGhvcm91Z2hseSBpbml0aWFsaXplZCDigJMgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBzZXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbi4gTm8gY2hhbmNlIG9mIGxhdGVyIGNvZGUgcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBpdC4KKiAgICoqQ3JpdGVyaW9uIDQ6KiogVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhbHRlciBhbnkgYnVmZmVyIGFjY2VzcyBsb2dpYyBpbiBhIHdheSB0aGF0IHJpc2tzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1Bcy4KCldoYXQgYWJvdXQgb3RoZXIgcmlza3M/IFJlZmNvdW50aW5nLCBWTUEgbGlmZWN5Y2xlLCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcuIEJ1dCBJJiMzOTttIGNvbmZpZGVudCB0aG9zZSBhcmUgYmVpbmcgYWRkcmVzc2VkIGJ5IEtBU0FOLCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbG9ja2RlcCwgcGFnZSBhbGxvY2F0b3IgY2hlY2tzLCBhbmQgVUJTQU4vV0FSTl9PTi4gVGhlc2UgYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLiBLTVNBTiB3b3VsZG4mIzM5O3Qgb2ZmZXIgYW55IHNwZWNpZmljIGJlbmVmaXQgaGVyZSB0aGF0IEtBU0FOIHdvdWxkbiYjMzk7dCBhbHJlYWR5IGNvdmVyLgoKSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGV4cGxpY2l0IGd1aWRhbmNlOiBUaGVyZSYjMzk7cyBubyBwb2ludCBpbiBydW5uaW5nIGEgS01TQU4gc2Vzc2lvbiBpZiB0aGUgYnVncyBjYW4gYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBXZSBhcmUgc2FmZS4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCBWTUEgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZywgYW5kIHJlbGF0ZWQgaXNzdWVzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRob3NlIHRvb2xzLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHdlJiMzOTtyZSB0b3VjaGluZyBvciBpbnRyb2R1Y2luZyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGJlaW5nIGludHJvZHVjZWQgaGVyZS4KClNvLCAqTmVlZHNLTVNBTj1mYWxzZSogaXMgdGhlIGNvcnJlY3QgY2FsbC4gSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzE6NTMuOTAxMjEzMzYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NTc2ODUzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9tbWFwXCIsXG4gICAgXCJ0Y3BfemNfdm1hX29wZW5cIixcbiAgICBcInRjcF96Y192bWFfY2xvc2VcIixcbiAgICBcInRjcF96Y19tZW1fY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemNfbWVtX3VuY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZWN5Y2xlIHRyYWNraW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzIChzdHJ1Y3QgdGNwX3pjX3ZtYSkuIFRoZSBvbmx5IG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZSBpcyBzdHJ1Y3QgdGNwX3pjX3ZtYSwgd2hlcmUgYWxsIG1lbWJlciBmaWVsZHMgKG5yX3BhZ2VzLCBtbSwgc2ssIHJlZmNudCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEga21hbGxvY19vYmouIFRoZSBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGtlcm5lbC1pbnRlcm5hbCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1vcnkgYWNjb3VudGluZywgb3IgVk1BIGxpZmVjeWNsZS91c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMTo1My45MDEyMTgyMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzM4Mzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRkOGY2YzBiNTkzMWE0OGExNDA3Y2Q1NGI2YTJhN2RkNTI2ZGJjNjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MzE6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXFxuaW5kZXggNTExODUyMjJhYWMyOS4uY2YxOTA1NWE5YzQwMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9zb2NrLmhcXG4rKysgYi9pbmNsdWRlL25ldC9zb2NrLmhcXG5AQCAtMTU1Niw2ICsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XFxuIFxcbiAjZGVmaW5lIFNLX01FTV9TRU5EXFx0MFxcbiAjZGVmaW5lIFNLX01FTV9SRUNWXFx0MVxcbisjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZXFx0MHgxMDBcXG4gXFxuIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqL1xcbiBzdGF0aWMgaW5saW5lIGxvbmcgc2tfcHJvdF9tZW1fbGltaXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IGluZGV4KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhcXG5pbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFxcbkBAIC0zOCw3ICszOCw4IEBAXFxuIFxcbiAjZGVmaW5lIHNrbWVtX2tpbmRfbmFtZXNcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdEVNKFNLX01FTV9TRU5EKVxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0RU1lKFNLX01FTV9SRUNWKVxcbitcXHRcXHRFTShTS19NRU1fUkVDVilcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdEVNZShTS19NRU1fUkVDVl9aRVJPQ09QWSlcXG4gXFxuIC8qIGVudW1zIG5lZWQgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSAqL1xcbiAjdW5kZWYgRU1cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXFxuaW5kZXggZmE2MGI3NDk0YzU4Ni4uM2Q4NWMxMzhlMWM3MSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcXG5AQCAtMzM4MCw3ICszMzgwLDcgQEAgaW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG4gXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgXFx1MDAzYyBza19nZXRfcm1lbTAoc2ssIHByb3QpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdH0gZWxzZSB7IC8qIFNLX01FTV9TRU5EICovXFxuK1xcdH0gZWxzZSBpZiAoa2luZCA9PSBTS19NRU1fU0VORCkge1xcbiBcXHRcXHRpbnQgd21lbTAgPSBza19nZXRfd21lbTAoc2ssIHByb3QpO1xcbiBcXG4gXFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCA1NjI3NTIzNTJhZmU0Li41Y2MyYmZjOGE5MGQwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtMjY3LDYgKzI2Nyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2tleS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG5AQCAtMTg2MCwyMyArMTg2MSwxMTggQEAgdm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfTU1VXFxuK3N0cnVjdCB0Y3BfemNfdm1hIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdHJlZmNvdW50X3QgcmVmY250O1xcbitcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK307XFxuK1xcbisvKiBLZWVwIHRoZSBzaXplIGFyZ3VtZW50IHRvIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCgpIHdpdGhpbiBpbnQuICovXFxuKyNkZWZpbmUgVENQX1pFUk9DT1BZX01FTV9DSFVOSyAoSU5UX01BWCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKVxcbitcXG4rc3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGNodW5rO1xcbitcXG4rXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxuK1xcdFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xcbitcXHRcXHRfX3NrX21lbV9yZWR1Y2VfYWxsb2NhdGVkKHNrLCBjaHVuayk7XFxuK1xcdFxcdG5yX3BhZ2VzIC09IGNodW5rO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBjaHVuaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHdoaWxlIChucl9wYWdlcykge1xcbitcXHRcXHRjaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHQgICAgICBUQ1BfWkVST0NPUFlfTUVNX0NIVU5LKTtcXG4rXFx0XFx0cmV0ID0gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHNrLCBjaHVuayBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY2h1bmssIFNLX01FTV9SRUNWX1pFUk9DT1BZKTtcXG4rXFx0XFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0XFx0dGNwX3pjX21lbV91bmNoYXJnZShzaywgY2hhcmdlZCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNoYXJnZWQgKz0gY2h1bms7XFxuK1xcdFxcdG5yX3BhZ2VzIC09IGNodW5rO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4rXFxuK1xcdHJlZmNvdW50X2luYyhcXHUwMDI2emNfdm1hLVxcdTAwM2VyZWZjbnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4rXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250KSkge1xcbitcXHRcXHR0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS1cXHUwMDNlc2ssIHpjX3ZtYS1cXHUwMDNlbnJfcGFnZXMpO1xcbitcXHRcXHRtbWRyb3AoemNfdm1hLVxcdTAwM2VtbSk7XFxuK1xcdFxcdHNvY2tfcHV0KHpjX3ZtYS1cXHUwMDNlc2spO1xcbitcXHRcXHRrZnJlZSh6Y192bWEpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdGNwX3ZtX29wcyA9IHtcXG4rXFx0Lm9wZW4gPSB0Y3BfemNfdm1hX29wZW4sXFxuK1xcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXFxuIH07XFxuIFxcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4rXFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFxuIFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcdHZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKTtcXG4gXFxuIFxcdC8qIEluc3RydWN0IHZtX2luc2VydF9wYWdlKCkgdG8gbm90IG1tYXBfcmVhZF9sb2NrKG1tKSAqL1xcbi1cXHR2bV9mbGFnc19zZXQodm1hLCBWTV9NSVhFRE1BUCk7XFxuK1xcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX01JWEVETUFQKTtcXG4rXFxuK1xcdG5yX3BhZ2VzID0gKHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0emNfdm1hID0ga21hbGxvY19vYmooKnpjX3ZtYSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCF6Y192bWEpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0emNfdm1hLVxcdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xcbitcXHR6Y192bWEtXFx1MDAzZW1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4rXFx0emNfdm1hLVxcdTAwM2VzayA9IHNvY2stXFx1MDAzZXNrO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250LCAxKTtcXG4rXFx0bW1ncmFiKHpjX3ZtYS1cXHUwMDNlbW0pO1xcbitcXHRzb2NrX2hvbGQoemNfdm1hLVxcdTAwM2Vzayk7XFxuK1xcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXFx1MDAzZXNrLCBucl9wYWdlcykpIHtcXG4rXFx0XFx0bW1kcm9wKHpjX3ZtYS1cXHUwMDNlbW0pO1xcbitcXHRcXHRzb2NrX3B1dCh6Y192bWEtXFx1MDAzZXNrKTtcXG4rXFx0XFx0a2ZyZWUoemNfdm1hKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnRjcF92bV9vcHM7XFxuK1xcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdGNwX3pjX3ZtYV92YWxpZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gdm1hLVxcdTAwM2V2bV9vcHMgPT0gXFx1MDAyNnRjcF92bV9vcHMgXFx1MDAyNlxcdTAwMjYgemNfdm1hIFxcdTAwMjZcXHUwMDI2IHpjX3ZtYS1cXHUwMDNlbW0gPT0gbW07XFxuK31cXG4rXFxuIHN0YXRpYyBza2JfZnJhZ190ICpza2JfYWR2YW5jZV90b19mcmFnKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXRfc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdTMyICpvZmZzZXRfZnJhZylcXG4ge1xcbkBAIC0yMTczLDcgKzIyNjksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG4gXFxuIFxcdGlmICh2bWEpIHtcXG4tXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzICE9IFxcdTAwMjZ0Y3Bfdm1fb3BzKSB7XFxuK1xcdFxcdGlmICghdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xcbiBcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdH1cXG5AQCAtMjE4Myw3ICsyMjc5LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbiBcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcXG4tXFx0aWYgKCF2bWEgfHwgdm1hLVxcdTAwM2V2bV9vcHMgIT0gXFx1MDAyNnRjcF92bV9vcHMpIHtcXG4rXFx0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMxOjU0LjM4NTM4OTI5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI1OTY0NzExNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9tbWFwXCIsXG4gICAgXCJ0Y3BfemNfdm1hX29wZW5cIixcbiAgICBcInRjcF96Y192bWFfY2xvc2VcIixcbiAgICBcInRjcF96Y19tZW1fY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemNfbWVtX3VuY2hhcmdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IG1lbW9yeSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAodmlhIHRjcF9tbWFwLCB0Y3BfemNfdm1hX29wZW4sIGFuZCB0Y3BfemNfdm1hX2Nsb3NlKSwgdHJhY2tpbmcgbW1fc3RydWN0IGFuZCBzb2NrIHJlZmVyZW5jZXMsIGFuZCB1cGRhdGVzIG1lbW9yeSByYWlzZSBhY2NvdW50aW5nIGluIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCB3aXRoIHRoZSBuZXcgU0tfTUVNX1JFQ1ZfWkVST0NPUFkga2luZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgTU0gaW50ZXJhY3Rpb24gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscyAobW1hcCwgZ2V0c29ja29wdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgbXVubWFwLCBldGMuKSwgbWFraW5nIGl0IGltcG9ydGFudCB0byBmdXp6IGZvciBtZW1vcnkgYWNjb3VudGluZywgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkOGY2YzBiNTkzMWE0OGExNDA3Y2Q1NGI2YTJhN2RkNTI2ZGJjNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMzozMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaFxuaW5kZXggNTExODUyMjJhYWMyOS4uY2YxOTA1NWE5YzQwMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvc29jay5oXG5AQCAtMTU1Niw2ICsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XG4gXG4gI2RlZmluZSBTS19NRU1fU0VORFx0MFxuICNkZWZpbmUgU0tfTUVNX1JFQ1ZcdDFcbisjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZXHQweDEwMFxuIFxuIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqL1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBza19wcm90X21lbV9saW1pdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG5pbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhcbkBAIC0zOCw3ICszOCw4IEBAXG4gXG4gI2RlZmluZSBza21lbV9raW5kX25hbWVzXHRcdFx0XFxcbiBcdFx0RU0oU0tfTUVNX1NFTkQpXHRcdFx0XFxcbi1cdFx0RU1lKFNLX01FTV9SRUNWKVxuK1x0XHRFTShTS19NRU1fUkVDVilcdFx0XHRcXFxuK1x0XHRFTWUoU0tfTUVNX1JFQ1ZfWkVST0NPUFkpXG4gXG4gLyogZW51bXMgbmVlZCB0byBiZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlICovXG4gI3VuZGVmIEVNXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCBmYTYwYjc0OTRjNTg2Li4zZDg1YzEzOGUxYzcxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0zMzgwLDcgKzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKVxuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNjIHNrX2dldF9ybWVtMChzaywgcHJvdCkpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG4tXHR9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqL1xuK1x0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4gXHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI2Nyw2ICsyNjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcdTAwM2VcbkBAIC0xODYwLDIzICsxODYxLDExOCBAQCB2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbitzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCBzb2NrICpzaztcbit9O1xuK1xuKy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi9cbisjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGNodW5rO1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbitcdFx0bnJfcGFnZXMgLT0gY2h1bms7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgY2h1bms7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdHJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRcdCAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpO1xuK1x0XHRpZiAoIXJldCkge1xuK1x0XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2Uoc2ssIGNoYXJnZWQpO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHR9XG4rXHRcdGNoYXJnZWQgKz0gY2h1bms7XG4rXHRcdG5yX3BhZ2VzIC09IGNodW5rO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJlZmNvdW50X2luYyhcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0dGNwX3pjX21lbV91bmNoYXJnZSh6Y192bWEtXHUwMDNlc2ssIHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyk7XG4rXHRcdG1tZHJvcCh6Y192bWEtXHUwMDNlbW0pO1xuK1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuK1x0XHRrZnJlZSh6Y192bWEpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG4rXHQub3BlbiA9IHRjcF96Y192bWFfb3BlbixcbitcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG4gfTtcbiBcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbitcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWE7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQyk7XG4gXG4gXHQvKiBJbnN0cnVjdCB2bV9pbnNlcnRfcGFnZSgpIHRvIG5vdCBtbWFwX3JlYWRfbG9jayhtbSkgKi9cbi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTtcbitcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX01JWEVETUFQKTtcbitcbitcdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0emNfdm1hID0ga21hbGxvY19vYmooKnpjX3ZtYSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghemNfdm1hKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xuK1x0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0emNfdm1hLVx1MDAzZXNrID0gc29jay1cdTAwM2VzaztcbitcdHJlZmNvdW50X3NldChcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250LCAxKTtcbitcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xuK1x0c29ja19ob2xkKHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRpZiAodGNwX3pjX21lbV9jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCBucl9wYWdlcykpIHtcbitcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4rXHRcdHNvY2tfcHV0KHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRcdGtmcmVlKHpjX3ZtYSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnRjcF92bV9vcHM7XG4rXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJldHVybiB2bWEtXHUwMDNldm1fb3BzID09IFx1MDAyNnRjcF92bV9vcHMgXHUwMDI2XHUwMDI2IHpjX3ZtYSBcdTAwMjZcdTAwMjYgemNfdm1hLVx1MDAzZW1tID09IG1tO1xuK31cbitcbiBzdGF0aWMgc2tiX2ZyYWdfdCAqc2tiX2FkdmFuY2VfdG9fZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0X3NrYixcbiBcdFx0XHRcdCAgICAgICB1MzIgKm9mZnNldF9mcmFnKVxuIHtcbkBAIC0yMTczLDcgKzIyNjksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXG4gXHRpZiAodm1hKSB7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbitcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG4gXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC0yMTgzLDcgKzIyNzksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuK1x0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzE6NTQuMzg1MzkwNzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyNTI3NTY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWmVyby1Db3B5IFJlY2VpdmUgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgY2hhbmdlcyB0aGF0IEkgbmVlZCB0byBkaXNzZWN0LiBGaXJzdCBvZmYsIGl0J3MgYWRkaW5nIGBTS19NRU1fUkVDVl9aRVJPQ09QWWAgYXMgYSBuZXcgbWVtb3J5IGtpbmQsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAgYW5kIHRoZW4gcmVmZXJlbmNlZCBpbiB0aGUgdHJhY2UgZXZlbnRzIGluIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtZWFucyBpdCdzIHJlbGF0ZWQgdG8gdHJhY2tpbmcgbWVtb3J5IHVzYWdlIGZvciB6ZXJvLWNvcHkgcmVjZWl2ZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5JbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGZ1bmN0aW9uIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2UgaGVyZSBpcyBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQ6IHRoZSBgZWxzZWAgYmxvY2sgZm9yIGBTS19NRU1fU0VORGAgaXMgbm93IGV4cGxpY2l0bHkgY2hlY2tlZC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBub3cgaGFuZGxpbmcgdGhlIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGtpbmQgbW9yZSBleHBsaWNpdGx5IGluIHRoaXMgZnVuY3Rpb24gd2hpY2ggY291bGQgYmUgY3J1Y2lhbCBmb3IgYWNjb3VudGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0cmFja2luZyBoYXMgYmVlbiBtb2RpZmllZC5cblxuTm93IGZvciB0aGUgbWVhdCBvZiBpdDogdGhlIGBuZXQvaXB2NC90Y3AuY2AgY2hhbmdlcywgYWxsIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19NTVVgIGd1YXJkLiBUaGlzIHNjcmVhbXMgXCJtZW1vcnkgbWFuYWdlbWVudFwiIGFuZCB6ZXJvLWNvcHksIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBlYXJsaWVyIGFkZGl0aW9ucy4gQSBuZXcgYHN0cnVjdCB0Y3BfemNfdm1hYCBpcyBkZWZpbmVkLCB3aXRoIHJlZmNvdW50aW5nLCBhbmQgcmVmZXJlbmNlcyB0byBwYWdlcywgbWVtb3J5IG1hcHBpbmcsIGFuZCB0aGUgc29ja2V0LiBXZSBoYXZlIGNoYXJnZS91bmNoYXJnZSBmdW5jdGlvbnMgKGB0Y3BfemNfbWVtX2NoYXJnZWAsIGB0Y3BfemNfbWVtX3VuY2hhcmdlYCkgYW5kIG9wZW4vY2xvc2UgZnVuY3Rpb25zIGZvciB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSAoYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCkuIFRoaXMgbWFrZXMgbWUgdGhpbmsgdGhpcyBwYXRjaCBpcyBkaXJlY3RseSBpbXBsZW1lbnRpbmcgemVyby1jb3B5IG1tYXAgc3VwcG9ydC5cblxuVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHRjcF9tbWFwYCBhcmUgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYFZNX0RPTlRDT1BZYCwgYFZNX0RPTlRFWFBBTkRgLCBhbmQgYFZNX01JWEVETUFQYCBhcmUgYmVpbmcgc2V0IG9uIHRoZSBWTUEuIFRoaXMgaXMgdmVyeSBzdGFuZGFyZCBmb3IgYSB6ZXJvLWNvcHkgaW1wbGVtZW50YXRpb24uIEEgYHpjX3ZtYWAgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBzb2NrZXQgbWVtb3J5IGNoYXJnZWQgdmlhIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGFuZCBtb3N0IGltcG9ydGFudGx5IGBtbWAgYW5kIGBza2AgYXJlIGJlaW5nIGhlbGQgd2l0aGluIHRoZSBgdm1hYCwgcHJlc3VtYWJseSBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuXG5cbkZpbmFsbHksIGB0Y3BfemNfdm1hX3ZhbGlkYCBhbmQgdGhlIHVwZGF0ZXMgdG8gYGZpbmRfdGNwX3ZtYWAgYXJlIGFkZGVkLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSB2YWxpZCBmbGFnIGlzIGNoZWNrZWQuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdGNwX21tYXBgIGFuZCBgZmluZF90Y3Bfdm1hYCBhcmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBgbmV0L2lwdjQvdGNwLmNgLiBJdCdzIHRpbWUgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXQncyBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBUQ1AgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6MjAuNjM4MTUwMjg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIxMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfdGNwX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yMjM5PXN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI2NC1cXG5uZXQvaXB2NC90Y3AuYzoyMjY1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5uZXQvaXB2NC90Y3AuYy0yMjY2LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyOTE9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMzMxLVxcbm5ldC9pcHY0L3RjcC5jOjIzMzI6XFx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXFx1MDAzZW1tLCBhZGRyZXNzLCBcXHUwMDI2bW1hcF9sb2NrZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTIzMzMtXFx0aWYgKCF2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjIwLjY4MzM3NjYwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzcwMDUyNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgbmV0L2lwdjQvdGNwLmNgIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBhcm91bmQgbGluZSAyMjkxLiBNeSBhaW0gaGVyZSBpcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgaXMgaW1wbGVtZW50ZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBvcHRpbWl6YXRpb25zLCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzLi4uIGFsbCB0aGUganVpY3kgZGV0YWlscyBiZWhpbmQgdGhlIHNjZW5lcy4gWmVyby1jb3B5IGlzIGEgcGVyZm9ybWFuY2UgZ2FtZS1jaGFuZ2VyLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBUQ1AgaW1wbGVtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IG5ldHdvcmsgcHJvZ3JhbW1pbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyBkYXRhIGJ1ZmZlcnMgYXJlIG1hbmFnZWQsIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIHRoZSByb2xlIG9mIERNQSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbXBsZXhpdGllcyBpbiB0aGUgc3luY2hyb25pemF0aW9uLiBUaGlzIHdpbGwgdGVsbCBtZSBhIGxvdCBtb3JlIHRoYW4gYW55IGFic3RyYWN0IGRlc2NyaXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6NDEuMDUzNDMyMTQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODU6XFx0XFx0fVxcbjIyODY6XFx0XFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcXG4yMjg3OlxcdFxcdHJldHVybiB2bWE7XFxuMjI4ODpcXHR9XFxuMjI4OTpcXHRcXG4yMjkwOlxcdCNkZWZpbmUgVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRSAzMlxcbjIyOTE6XFx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuMjI5MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbjIyOTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4yMjk0OlxcdHtcXG4yMjk1OlxcdFxcdHUzMiBsZW5ndGggPSAwLCBvZmZzZXQsIHZtYV9sZW4sIGF2YWlsX2xlbiwgY29weWxlbiA9IDA7XFxuMjI5NjpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl6Yy1cXHUwMDNlYWRkcmVzcztcXG4yMjk3OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlc1tUQ1BfWkVST0NPUFlfUEFHRV9CQVRDSF9TSVpFXTtcXG4yMjk4OlxcdFxcdHMzMiBjb3B5YnVmX2xlbiA9IHpjLVxcdTAwM2Vjb3B5YnVmX2xlbjtcXG4yMjk5OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbjIzMDA6XFx0XFx0Y29uc3Qgc2tiX2ZyYWdfdCAqZnJhZ3MgPSBOVUxMO1xcbjIzMDE6XFx0XFx0dW5zaWduZWQgaW50IHBhZ2VzX3RvX21hcCA9IDA7XFxuMjMwMjpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4yMzAzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbjIzMDQ6XFx0XFx0dTMyIHNlcSA9IHRwLVxcdTAwM2Vjb3BpZWRfc2VxO1xcbjIzMDU6XFx0XFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcDtcXG4yMzA2OlxcdFxcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcXG4yMzA3OlxcdFxcdGJvb2wgbW1hcF9sb2NrZWQ7XFxuMjMwODpcXHRcXHRpbnQgcmV0O1xcbjIzMDk6XFx0XFxuMjMxMDpcXHRcXHR6Yy1cXHUwMDNlY29weWJ1Zl9sZW4gPSAwO1xcbjIzMTE6XFx0XFx0emMtXFx1MDAzZW1zZ19mbGFncyA9IDA7XFxuMjMxMjpcXHRcXG4yMzEzOlxcdFxcdGlmIChhZGRyZXNzIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpIHx8IGFkZHJlc3MgIT0gemMtXFx1MDAzZWFkZHJlc3MpXFxuMjMxNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzE1OlxcdFxcbjIzMTY6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKVxcbjIzMTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4yMzE4OlxcdFxcbjIzMTk6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbjIzMjA6XFx0XFxuMjMyMTpcXHRcXHRpZiAoaW5xIFxcdTAwMjZcXHUwMDI2IGlucSBcXHUwMDNjPSBjb3B5YnVmX2xlbilcXG4yMzIyOlxcdFxcdFxcdHJldHVybiByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc2ssIHpjLCBpbnEsIHRzcyk7XFxuMjMyMzpcXHRcXG4yMzI0OlxcdFxcdGlmIChpbnEgXFx1MDAzYyBQQUdFX1NJWkUpIHtcXG4yMzI1OlxcdFxcdFxcdHpjLVxcdTAwM2VsZW5ndGggPSAwO1xcbjIzMjY6XFx0XFx0XFx0emMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50ID0gaW5xO1xcbjIzMjc6XFx0XFx0XFx0aWYgKCFpbnEgXFx1MDAyNlxcdTAwMjYgc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxcbjIzMjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMjMyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMzMwOlxcdFxcdH1cXG4yMzMxOlxcdFxcbjIzMzI6XFx0XFx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXFx1MDAzZW1tLCBhZGRyZXNzLCBcXHUwMDI2bW1hcF9sb2NrZWQpO1xcbjIzMzM6XFx0XFx0aWYgKCF2bWEpXFxuMjMzNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzM1OlxcdFxcbjIzMzY6XFx0XFx0dm1hX2xlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpjLVxcdTAwM2VsZW5ndGgsIHZtYS1cXHUwMDNldm1fZW5kIC0gYWRkcmVzcyk7XFxuMjMzNzpcXHRcXHRhdmFpbF9sZW4gPSBtaW5fdCh1MzIsIHZtYV9sZW4sIGlucSk7XFxuMjMzODpcXHRcXHR0b3RhbF9ieXRlc190b19tYXAgPSBhdmFpbF9sZW4gXFx1MDAyNiB+KFBBR0VfU0laRSAtIDEpO1xcbjIzMzk6XFx0XFx0aWYgKHRvdGFsX2J5dGVzX3RvX21hcCkge1xcbjIzNDA6XFx0XFx0XFx0aWYgKCEoemMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENQX1JFQ0VJVkVfWkVST0NPUFlfRkxBR19UTEJfQ0xFQU5fSElOVCkpXFxuMjM0MTpcXHRcXHRcXHRcXHR6YXBfdm1hX3JhbmdlKHZtYSwgYWRkcmVzcywgdG90YWxfYnl0ZXNfdG9fbWFwKTtcXG4yMzQyOlxcdFxcdFxcdHpjLVxcdTAwM2VsZW5ndGggPSB0b3RhbF9ieXRlc190b19tYXA7XFxuMjM0MzpcXHRcXHRcXHR6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgPSAwO1xcbjIzNDQ6XFx0XFx0fSBlbHNlIHtcXG4yMzQ1OlxcdFxcdFxcdHpjLVxcdTAwM2VsZW5ndGggPSBhdmFpbF9sZW47XFxuMjM0NjpcXHRcXHRcXHR6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgPSBhdmFpbF9sZW47XFxuMjM0NzpcXHRcXHR9XFxuMjM0ODpcXHRcXHRyZXQgPSAwO1xcbjIzNDk6XFx0XFx0d2hpbGUgKGxlbmd0aCArIFBBR0VfU0laRSBcXHUwMDNjPSB6Yy1cXHUwMDNlbGVuZ3RoKSB7XFxuMjM1MDpcXHRcXHRcXHRpbnQgbWFwcGFibGVfb2Zmc2V0O1xcbjIzNTE6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMjM1MjpcXHRcXG4yMzUzOlxcdFxcdFxcdGlmICh6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgXFx1MDAzYyBQQUdFX1NJWkUpIHtcXG4yMzU0OlxcdFxcdFxcdFxcdHUzMiBvZmZzZXRfZnJhZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6NDEuMDUzNjQ4NDkxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM3MDU0OTU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVENQIFplcm9jb3B5IFJlY2VpdmUqKlxuXG5Pa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGB0Y3BfbW1hcGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gc29tZW9uZSBjYWxscyBgbW1hcChmZClgIG9uIGEgVENQIHNvY2tldC4gVGhhdCBtYWtlcyBzZW5zZSwgY29ubmVjdHMgdGhlIHN5c3RlbSBjYWxsIHRvIHRoZSByaWdodCBrZXJuZWwgZnVuY3Rpb24uIEFuZCB0aGUgY29udGV4dCBpbW1lZGlhdGVseSBjbGFyaWZpZXMgdGhhdCB0aGlzIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gVENQIHplcm9jb3B5IHJlY2VpdmUuIEknbSByZWNhbGxpbmcgbm93IHRoYXQgdGhpcyAwLWNvcHkgcmVjZWl2ZSBmZWF0dXJlIGlzIGVuYWJsZWQgdmlhIGBnZXRzb2Nrb3B0KC4uLiwgU09MX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLilgLiBUaGF0IHRyaWdnZXJzIGB0Y3BfbW1hcGAsIHJpZ2h0PyBHb3QgaXQuIE5vdyBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHNvY2tldCBtZW1vcnkgYWxsb2NhdGlvbiB3b3JrcyBhdCBhIGxvd2VyIGxldmVsLiBMZXQgbWUgY2hlY2sgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgaW4gYG5ldC9jb3JlL3NvY2suY2AgdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgYWN0dWFsbHkgZ2V0cyB0cmFuc2ZlcnJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjQzLjQyNDIwMDQzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM3MDpcXHRcXG4zMzcxOlxcdFxcdC8qIEd1YXJhbnRlZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHVuZGVyIHByZXNzdXJlIChlaXRoZXIgZ2xvYmFsXFxuMzM3MjpcXHRcXHQgKiBvciBtZW1jZykgdG8gbWFrZSBzdXJlIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiBSRkMgNzMyMyAoVENQXFxuMzM3MzpcXHRcXHQgKiBFeHRlbnNpb25zIGZvciBIaWdoIFBlcmZvcm1hbmNlKSB3b3JrIHByb3Blcmx5LlxcbjMzNzQ6XFx0XFx0ICpcXG4zMzc1OlxcdFxcdCAqIFRoaXMgcnVsZSBkb2VzIE5PVCBzdGFuZCB3aGVuIGV4Y2VlZHMgZ2xvYmFsIG9yIG1lbWNnJ3MgaGFyZFxcbjMzNzY6XFx0XFx0ICogbGltaXQsIG9yIGVsc2UgYSBEb1MgYXR0YWNrIGNhbiBiZSB0YWtlbiBwbGFjZSBieSBzcGF3bmluZ1xcbjMzNzc6XFx0XFx0ICogbG90cyBvZiBzb2NrZXRzIHdob3NlIHVzYWdlIGFyZSB1bmRlciBtaW5pbXVtIGJ1ZmZlciBzaXplLlxcbjMzNzg6XFx0XFx0ICovXFxuMzM3OTpcXHRcXHRpZiAoa2luZCA9PSBTS19NRU1fUkVDVikge1xcbjMzODA6XFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgXFx1MDAzYyBza19nZXRfcm1lbTAoc2ssIHByb3QpKVxcbjMzODE6XFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuMzM4MjpcXHRcXG4zMzgzOlxcdFxcdH0gZWxzZSBpZiAoa2luZCA9PSBTS19NRU1fU0VORCkge1xcbjMzODQ6XFx0XFx0XFx0aW50IHdtZW0wID0gc2tfZ2V0X3dtZW0wKHNrLCBwcm90KTtcXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuMzM4NzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3dtZW1fcXVldWVkIFxcdTAwM2Mgd21lbTApXFxuMzM4ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzg5OlxcdFxcdFxcdH0gZWxzZSBpZiAocmVmY291bnRfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3dtZW1fYWxsb2MpIFxcdTAwM2Mgd21lbTApIHtcXG4zMzkwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjMzOTE6XFx0XFx0XFx0fVxcbjMzOTI6XFx0XFx0fVxcbjMzOTM6XFx0XFxuMzM5NDpcXHRcXHRpZiAoc2tfaGFzX21lbW9yeV9wcmVzc3VyZShzaykpIHtcXG4zMzk1OlxcdFxcdFxcdHU2NCBhbGxvYztcXG4zMzk2OlxcdFxcbjMzOTc6XFx0XFx0XFx0LyogVGhlIGZvbGxvd2luZyAnYXZlcmFnZScgaGV1cmlzdGljIGlzIHdpdGhpbiB0aGVcXG4zMzk4OlxcdFxcdFxcdCAqIHNjb3BlIG9mIGdsb2JhbCBhY2NvdW50aW5nLCBzbyBpdCBvbmx5IG1ha2VzXFxuMzM5OTpcXHRcXHRcXHQgKiBzZW5zZSBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZS5cXG4zNDAwOlxcdFxcdFxcdCAqL1xcbjM0MDE6XFx0XFx0XFx0aWYgKCFza191bmRlcl9nbG9iYWxfbWVtb3J5X3ByZXNzdXJlKHNrKSlcXG4zNDAyOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjM0MDM6XFx0XFxuMzQwNDpcXHRcXHRcXHQvKiBUcnkgdG8gYmUgZmFpciBhbW9uZyBhbGwgdGhlIHNvY2tldHMgdW5kZXIgZ2xvYmFsXFxuMzQwNTpcXHRcXHRcXHQgKiBwcmVzc3VyZSBieSBhbGxvd2luZyB0aGUgb25lcyB0aGF0IGJlbG93IGF2ZXJhZ2VcXG4zNDA2OlxcdFxcdFxcdCAqIHVzYWdlIHRvIHJhaXNlLlxcbjM0MDc6XFx0XFx0XFx0ICovXFxuMzQwODpcXHRcXHRcXHRhbGxvYyA9IHNrX3NvY2tldHNfYWxsb2NhdGVkX3JlYWRfcG9zaXRpdmUoc2spO1xcbjM0MDk6XFx0XFx0XFx0aWYgKHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMikgXFx1MDAzZSBhbGxvYyAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjQzLjQyNDM5MDYyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNDAzNjk4NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlplcm8tQ29weSBUQ1AgbW1hcDogUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyBhbmQgRnV6emluZyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSd2ZSBnb3Qgc29tZSBjb25jZXJucyBhYm91dCBob3cgemVyby1jb3B5IGlzIGJlaW5nIGltcGxlbWVudGVkIGZvciBUQ1Agc29ja2V0cy4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgbG9naWMgaW4gYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgY2hlY2tlZCBlaXRoZXIgcmVjZWl2ZSBvciBzZW5kIG1lbW9yeSBsaW1pdHMgYmFzZWQgb24gdGhlIHNvY2tldCdzIHJlY2VpdmUgb3Igc2VuZCBmbGFncy4gQnV0IG5vdywgd2l0aCBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCBpdCBieXBhc3NlcyB0aG9zZSBjaGVja3MgZW50aXJlbHkhIFRoYXQgZmVlbHMuLi4gcmlza3kuXG5cblRoZW4sIHRoZXJlJ3MgYHRjcF9tbWFwYC4gSXQgc2V0cyB0aGVzZSBgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTUlYRURNQVBgIGZsYWdzIG9uIHRoZSBWTUEsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB6ZXJvLWNvcHkuIFRoZSBjb2RlIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBwYWdlcywgYWxsb2NhdGVzIGEgYHpjX3ZtYWAgc3RydWN0dXJlLCBhbmQgY2hhcmdlcyBzb2NrZXQgbWVtb3J5IHVzaW5nIGB0Y3BfemNfbWVtX2NoYXJnZWAuIFRoYXQgbXVjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBWTUEncyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tYCkgYW5kIHRoZSBzb2NrZXQgKGBza2ApLiAgV2hlbiB0aGUgVk1BIGlzIGNsb3NlZCBieSB0aGUgdXNlciwgdGhlIHJlZmNvdW50IGdldHMgZGVjcmVtZW50ZWQsIHRoZSBtZW1vcnkgdW5jaGFyZ2VkLCBhbmQgdGhlbiBhbGwgdGhlIG1lbW9yeSB1c2VkIGlzIGZyZWVkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgaWYgdGhlIFZNQSBpcyBzcGxpdCwgbGlrZSBieSBgbXVubWFwYCBvciBgbXByb3RlY3RgPyAgYHRjcF96Y192bWFfb3BlbmAgaXMgY2FsbGVkIHRvIGluY3JlbWVudCB0aGUgcmVmY291bnQgd2hlbiB0aGUgVk1BIGlzIHNwbGl0L2Nsb25lZC4gIEhlcmUncyB0aGUgcHJvYmxlbTogVGhlIGluaXRpYWwgY2hhcmdlIGhhcHBlbnMgb25seSBvbmNlIGluIGB0Y3BfbW1hcGAuIEhvd2V2ZXIsIGlmIEkgc3BsaXQgdGhlIFZNQSBpbiBhbnkgd2F5IGJ5IGBtdW5tYXBgLCBgbXByb3RlY3RgLCBvciBldmVuIGBtYWR2aXNlYCwgdGhlbiBib3RoIFZNQSdzIHBvaW50IHRvIHRoZSBzYW1lIGB6Y192bWFgIGFuZCB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgZm9yIGJvdGguICBJZiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIFZNQSBpcyBjbG9zZWQsIHRoZSByZWZjb3VudCBpcyBkZWNyZW1lbnRlZC4gVGhlbiB0aGUgZmluYWwgY2xvc2Ugb2YgdGhlIG9yaWdpbmFsIFZNQSB1bmNoYXJnZXMgdGhlIG9yaWdpbmFsIGFtb3VudCBvZiBwYWdlcyEgVGhpcyBtZWFucyBtZW1vcnkgY291bGQgYmUgb3ZlcmNoYXJnZWQuXG5cbldhaXQgYSBzZWNvbmQgLSB3aGF0IGlmIEkgYG11bm1hcGAgKnBhcnQqIG9mIGl0PyBJZiBJIHVubWFwIHRoZSBtaWRkbGUgb2YgdGhlIFZNQSwgdGhlbiB0aGUgVk1BIHNwbGl0cyBpbnRvIHRocmVlIHBhcnRzLiBJICp0aGluayogdGhlIFZNQSBvcGVyYXRpb25zIGFyZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBvcGVuIGFuZCBjbG9zaW5nIG9mIGVhY2ggbmV3IFZNQS4gVGhpcyBpcyB2ZXJ5IGNvbXBsaWNhdGVkLCBhbmQgSSdtIGxvc2luZyB0cmFjayBvZiByZWZjb3VudHMhICBXaGF0J3MgaGFwcGVuaW5nIGlmIGB6Y192bWEtXHUwMDNlcmVmY250YCBkcm9wcz8gIFRoaXMgaXMgYWxsIGdldHRpbmcgdmVyeSBtZXNzeSFcblxuQWxzbywgaXQgbG9va3MgbGlrZSBgVk1fV1JJVEVgIGFuZCBgVk1fRVhFQ2AgYXJlIGV4cGxpY2l0bHkgcmVqZWN0ZWQsIHdoaWNoIGlzIGdvb2QuXG5cbkJ1dCB3YWl0LCB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgdGhlIGNvcmUgTU0gKG1lbW9yeSBtYW5hZ2VtZW50KSBhbmQgbmV0d29ya2luZyBzdGFjayEgIFRoaXMgaXMgaW1wb3J0YW50LiAgQW5kIHRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gIEkgY2FuIGRlZmluaXRlbHkgcmVhY2ggdGhpcyBjb2RlIGZyb20gdXNlcnNwYWNlIHdpdGggc3RhbmRhcmQgc3lzY2FsbHMsIGxpa2UgYHNvY2tldGAsIGBtbWFwYCwgYG11bm1hcGAsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYCwgYW5kIGBnZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfWkVST0NPUFlfUkVDRUlWRWAuICBUaGlzIGlzIGFsbCBlYXNpbHkgYWNjZXNzaWJsZSBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIHN5emthbGxlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IHNwZWNpYWwgY29uZmlncyBhcmUgbmVlZGVkLiBJJ2xsIGNoZWNrIGBDT05GSUdfTU1VYCBhbmQgdGhlIFRDUCBjb25maWdzLiAgT24geDg2XzY0LCB0aGUgTU1VIGlzIGFsd2F5cyBvbiwgc28gdGhhdCdzIGdvb2QuICBJIGFsc28gbmVlZCB0byBzZWFyY2ggdGhlIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnQgYnVncy4gSSBzdXNwZWN0IHRoaXMgaXMgd29ydGggZnV6emluZyBoZWF2aWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMyOjU1LjgyODA5MjQyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTUzMTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfemNfdm1hXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTE4NTg9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xODYzLSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjQvdGNwLmM6MTg2NDpzdHJ1Y3QgdGNwX3pjX3ZtYSB7XFxubmV0L2lwdjQvdGNwLmMtMTg2NS1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTg4Nj1zdGF0aWMgaW50IHRjcF96Y19tZW1fY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5MDctXFxubmV0L2lwdjQvdGNwLmM6MTkwODpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubmV0L2lwdjQvdGNwLmMtMTkwOS17XFxubmV0L2lwdjQvdGNwLmM6MTkxMDpcXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxubmV0L2lwdjQvdGNwLmMtMTkxMS1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5MTQtXFxubmV0L2lwdjQvdGNwLmM6MTkxNTpzdGF0aWMgdm9pZCB0Y3BfemNfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm5ldC9pcHY0L3RjcC5jLTE5MTYte1xcbm5ldC9pcHY0L3RjcC5jOjE5MTc6XFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbm5ldC9pcHY0L3RjcC5jLTE5MTgtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdGNwX3ZtX29wcyA9IHtcXG5uZXQvaXB2NC90Y3AuYzoxOTI4OlxcdC5vcGVuID0gdGNwX3pjX3ZtYV9vcGVuLFxcbm5ldC9pcHY0L3RjcC5jOjE5Mjk6XFx0LmNsb3NlID0gdGNwX3pjX3ZtYV9jbG9zZSxcXG5uZXQvaXB2NC90Y3AuYy0xOTMwLX07XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xOTMyPWludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5MzQte1xcbm5ldC9pcHY0L3RjcC5jOjE5MzU6XFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYTtcXG5uZXQvaXB2NC90Y3AuYy0xOTM2LVxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTY3LVxcbm5ldC9pcHY0L3RjcC5jOjE5Njg6c3RhdGljIGJvb2wgdGNwX3pjX3ZtYV92YWxpZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5uZXQvaXB2NC90Y3AuYy0xOTY5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubmV0L2lwdjQvdGNwLmMtMTk3MC17XFxubmV0L2lwdjQvdGNwLmM6MTk3MTpcXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxubmV0L2lwdjQvdGNwLmMtMTk3Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyNjU9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI3MS1cXHRpZiAodm1hKSB7XFxubmV0L2lwdjQvdGNwLmM6MjI3MjpcXHRcXHRpZiAoIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcXG5uZXQvaXB2NC90Y3AuYy0yMjczLVxcdFxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI4MS1cXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcXG5uZXQvaXB2NC90Y3AuYzoyMjgyOlxcdGlmICghdm1hIHx8ICF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XFxubmV0L2lwdjQvdGNwLmMtMjI4My1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzI6NTcuNTk3NjMwODcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzOTU3Njg4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTdGFjayBQZXJmb3JtYW5jZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbmV0d29yayBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQ/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGFyZWFzIG1vc3QgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBkYXRhIHRyYW5zZmVyIGFuZCBoYW5kbGluZyDigJMgc28sIGB0Y3BfbW1hcGAgY2FsbGVycyBhcmUgYSBwcmltZSBzdXNwZWN0LiBNZW1vcnkgbWFwcGluZyB3aXRoaW4gVENQIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQncyBiZWluZyB1c2VkIGlzIGtleS4gQWx0ZXJuYXRpdmVseSwgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0LCB0aGUgYGluZXRfc3RyZWFtX29wc2Agc3RydWN0dXJlLiBUaGlzIGNvbnRhaW5zIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgZGVmaW5lIHRoZSBUQ1Agc29ja2V0IG9wZXJhdGlvbnMgYXQgYSB2ZXJ5IGxvdyBsZXZlbC4gVGhleSBoYW5kbGUgc2VuZCwgcmVjZWl2ZSwgYW5kIG90aGVyIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbGVycyBvZiB0aG9zZSBhcyB3ZWxsLiBFaXRoZXIgb25lIG9mIHRoZXNlIGFyZWFzIGlzIGxpa2VseSB0byB5aWVsZCBjbHVlcyB0byB0aGUgbmF0dXJlIG9mIGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMgd2UncmUgc2VlaW5nLCBzbyBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggYm90aCBvZiB0aGVzZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gZ2V0IHNvbWUgaW5zaWdodHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjM1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6MDMuOTkzNDAxNjk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5Mzc2OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9tbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTUyOT12b2lkIHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtNTMwLSNpZmRlZiBDT05GSUdfTU1VXFxuaW5jbHVkZS9uZXQvdGNwLmg6NTMxOmludCB0Y3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5pbmNsdWRlL25ldC90Y3AuaC01MzItXFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTA2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDc4LSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjQvYWZfaW5ldC5jOjEwNzk6XFx0Lm1tYXBcXHRcXHQgICA9IHRjcF9tbWFwLFxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDgwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTMxLVxcbm5ldC9pcHY0L3RjcC5jOjE5MzI6aW50IHRjcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC9pcHY0L3RjcC5jLTE5MzMtXFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjYwPWNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjc4LSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2Nzk6XFx0Lm1tYXBcXHRcXHQgICA9IHRjcF9tbWFwLFxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjgwLSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmU9NDg9dGNwX2lucVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlOjQ5OnRjcF9tbWFwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUtNTAtdGNwX3BvcnRfc2hhcmVcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZT0xNDQ9VEVTVF9HRU5fRklMRVMgOj0gXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlLTE3MC1cXHR0Y3BfaW5xIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU6MTcxOlxcdHRjcF9tbWFwIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUtMTcyLVxcdHRmbyBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU9MjM5PSQoT1VUUFVUKS9yZXVzZXBvcnRfYnBmX251bWE6IExETElCUyArPSAtbG51bWFcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGU6MjQwOiQoT1VUUFVUKS90Y3BfbW1hcDogTERMSUJTICs9IC1scHRocmVhZCAtbGNyeXB0b1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZS0yNDEtJChPVVRQVVQpL3RjcF9pbnE6IExETElCUyArPSAtbHB0aHJlYWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTE0LSAqICBpZmNvbmZpZyBsbyBtdHUgNjE1MTIgICMgMTUqNDA5NiArIDQwIChpcHY2IGhlYWRlcikgKyAzMiAoVENQIHdpdGggVFMgb3B0aW9uIGhlYWRlcilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoxNTogKiAgdGNwX21tYXAgLXMgLXogXFx1MDAyNlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjE2OiAqICB0Y3BfbW1hcCAtSCA6OjEgLXpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0xNy0gKlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMTktICogICAgICAoNDA5NiA6IHBhZ2Ugc2l6ZSBvbiB4ODYsIDEyOiBUQ1AgVFMgb3B0aW9uIGxlbmd0aClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoyMDogKiAgdGNwX21tYXAgLXMgLXogLU0gJCgoNDA5NisxMikpIFxcdTAwMjZcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYzoyMTogKiAgdGNwX21tYXAgLUggOjoxIC16IC1NICQoKDQwOTYrMTIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTIyLSAqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yNS0gKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjI2OiAqICQgLi90Y3BfbW1hcCAtcyBcXHUwMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXRob3V0IG1tYXAoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjI3OiAqICQgZm9yIGkgaW4gezEuLjR9OyBkbyAuL3RjcF9tbWFwIC1IIDo6MSAteiA7IGRvbmVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0yOC0gKiByZWNlaXZlZCAzMjc2OCBNQiAoMCAlIG1tYXAnZWQpIGluIDE0LjExNTcgcywgMTkuNDczMiBHYml0XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0zNS0gKiAgIGNwdSB1c2FnZSB1c2VyOjAuMDM2IHN5czo4LjE5MywgMjUxLjEyOSB1c2VjIHBlciBNQiwgNjU1MzAgYy1zd2l0Y2hlc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM2OiAqICQga2lsbCAlMSAgICMga2lsbCB0Y3BfbW1hcCBzZXJ2ZXJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy0zNy0gKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM4OiAqICQgLi90Y3BfbW1hcCAtcyAteiBcXHUwMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXRoIG1tYXAoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjM5OiAqICQgZm9yIGkgaW4gezEuLjR9OyBkbyAuL3RjcF9tbWFwIC1IIDo6MSAteiA7IGRvbmVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX21tYXAuYy00MC0gKiByZWNlaXZlZCAzMjc2OCBNQiAoOTkuOTkzOSAlIG1tYXAnZWQpIGluIDYuNzM3OTIgcywgNDAuNzk1NiBHYml0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjA1Ljc1Mjc4NDI5N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTk4Nzc2MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBUQ1AgTU1BUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0Y3BfbW1hcGAgYW5kIHdoZXJlIGl0J3MgaW1wbGVtZW50ZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIHRpZWQgdG8gYGluZXRfc3RyZWFtX29wc2AgYW5kIGBpbmV0Nl9zdHJlYW1fb3BzYCwgYnV0IG9ubHkgd2hlbiBgQ09ORklHX01NVWAgaXMgYWN0aXZlLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB2ZXJpZnkgYENPTkZJR19JTkVUYC4gSXQncyBmb3VuZGF0aW9uYWwsIHNvIEknbSBleHBlY3RpbmcgaXQgdG8gYmUgc2V0LiBMb29raW5nIGludG8gYG5ldC9pcHY0L0tjb25maWdgLCB5ZXAsIGBDT05GSUdfSU5FVGAgaXMgdGhlIGNvcmUgVENQL0lQIGNvbmZpZ3VyYXRpb24uIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBgQ09ORklHX01NVWAgaXMgcHJldHR5IG11Y2ggc3RhbmRhcmQgb24gYW1kNjQsIGFuZCBgQ09ORklHX0lORVQ9eWAgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3QgbmV0d29ya2luZyBzZXR1cHMuIEl0IHNlZW1zIGZhaXJseSBzdHJhaWdodGZvcndhcmQuXG5cblRvIGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gY29uc3RyYWludHMsIEkgc2hvdWxkIHNwZWNpZmljYWxseSBjaGVjayBmb3IgY29uZmlndXJhdGlvbnMgcmVsYXRpbmcgdG8gZWl0aGVyIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgb3IgYHRjcF9tbWFwYCBpdHNlbGYuIEl04oCZcyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuRmluYWxseSwgSSdsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgYG5ldC9pcHY0L3RjcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRjcF9tbWFwYCBkZWZpbml0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gaG93IGl0J3MgYWN0dWFsbHkgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6MDguNzUxNTYzNDA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODU1OlxcdFxcdHJldHVybiAwO1xcbjE4NTY6XFx0fVxcbjE4NTc6XFx0XFxuMTg1ODpcXHR2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4xODU5OlxcdHtcXG4xODYwOlxcdFxcdHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHZhbCkpO1xcbjE4NjE6XFx0fVxcbjE4NjI6XFx0XFxuMTg2MzpcXHQjaWZkZWYgQ09ORklHX01NVVxcbjE4NjQ6XFx0c3RydWN0IHRjcF96Y192bWEge1xcbjE4NjU6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4xODY2OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjE4Njc6XFx0XFx0cmVmY291bnRfdCByZWZjbnQ7XFxuMTg2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMTg2OTpcXHR9O1xcbjE4NzA6XFx0XFxuMTg3MTpcXHQvKiBLZWVwIHRoZSBzaXplIGFyZ3VtZW50IHRvIF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZCgpIHdpdGhpbiBpbnQuICovXFxuMTg3MjpcXHQjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4xODczOlxcdFxcbjE4NzQ6XFx0c3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuMTg3NTpcXHR7XFxuMTg3NjpcXHRcXHR1bnNpZ25lZCBpbnQgY2h1bms7XFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdHdoaWxlIChucl9wYWdlcykge1xcbjE4Nzk6XFx0XFx0XFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcXG4xODgwOlxcdFxcdFxcdFxcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xcbjE4ODE6XFx0XFx0XFx0X19za19tZW1fcmVkdWNlX2FsbG9jYXRlZChzaywgY2h1bmspO1xcbjE4ODI6XFx0XFx0XFx0bnJfcGFnZXMgLT0gY2h1bms7XFxuMTg4MzpcXHRcXHR9XFxuMTg4NDpcXHR9XFxuMTg4NTpcXHRcXG4xODg2OlxcdHN0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbjE4ODc6XFx0e1xcbjE4ODg6XFx0XFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkID0gMDtcXG4xODg5OlxcdFxcdHVuc2lnbmVkIGludCBjaHVuaztcXG4xODkwOlxcdFxcdGludCByZXQ7XFxuMTg5MTpcXHRcXG4xODkyOlxcdFxcdHdoaWxlIChucl9wYWdlcykge1xcbjE4OTM6XFx0XFx0XFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcXG4xODk0OlxcdFxcdFxcdFxcdCAgICAgIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTkspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzowOC43NTE4MDA3NjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE4NDQ5MjM0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVENQIFplcm8tQ29weSBSZWNlaXZlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9pcHY0L3RjcC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBmaW5kX3RjcF92bWFgIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiAgSSBrbm93IGBmaW5kX3RjcF92bWFgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB0aGF0IGhlbHBzIGxvY2F0ZSB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGZpdHMgaW50byB0aGUgcGljdHVyZSwgYW5kIGVzcGVjaWFsbHkgaG93IGl0IGlzIGNhbGxlZC4gVGhhdCB3aWxsIHJldmVhbCB0aGUgZmxvdyBvZiBob3cgdGhpcyB6ZXJvLWNvcHkgbWVjaGFuaXNtIHdvcmtzLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgZnVuY3Rpb24gY2FsbCBzZWFyY2guIEkgY2FuIGxvb2sgYXQgdGhlIGNhbGwgY2hhaW4gYW5kIHZlcmlmeSBpZiB0aGlzIGhhcyBiZWVuIHVwZGF0ZWQgcmVjZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzo0MC41OTY3MjcwNThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzk3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF96ZXJvY29weV9yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yMDMxPXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3AuYzoyMDMyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMDMzLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIwNzE9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjIwNzI6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsIGludCBpbnEsXFxubmV0L2lwdjQvdGNwLmMtMjA3My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMDYtXFxubmV0L2lwdjQvdGNwLmM6MjEwNzpzdGF0aWMgaW50IHRjcF9jb3B5X3N0cmFnZ2xlcl9kYXRhKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxubmV0L2lwdjQvdGNwLmMtMjEwOC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY29weWxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMzAtXFxubmV0L2lwdjQvdGNwLmM6MjEzMTpzdGF0aWMgaW50IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMTMyLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE1OD1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTYzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqc2VxLFxcbm5ldC9pcHY0L3RjcC5jOjIxNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMTY1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiB0b3RhbF9ieXRlc190b19tYXAsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMjA2PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyMTEtXFx0XFx0XFx0XFx0XFx0dTMyICpzZXEsXFxubmV0L2lwdjQvdGNwLmM6MjIxMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIyMTMtXFx0XFx0XFx0XFx0XFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyMzk9c3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwLmM6MjI0MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIyNDEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIyNjU9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjI5MC0jZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcXG5uZXQvaXB2NC90Y3AuYzoyMjkxOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjIyOTI6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMjkzLVxcdFxcdFxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NTc2PWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4NDgtXFx0XFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgdHNzO1xcbm5ldC9pcHY0L3RjcC5jOjQ4NDk6XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlIHpjID0ge307XFxubmV0L2lwdjQvdGNwLmMtNDg1MC1cXHRcXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg1NC1cXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L3RjcC5jOjQ4NTU6XFx0XFx0ICAgIGxlbiBcXHUwMDNjIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKSlcXG5uZXQvaXB2NC90Y3AuYy00ODU2LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg3Mi1cXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6NDg3MzpcXHRcXHRlcnIgPSB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzaywgXFx1MDAyNnpjLCBcXHUwMDI2dHNzKTtcXG5uZXQvaXB2NC90Y3AuYy00ODc0LVxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4NzYtXFx0XFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjQ4Nzc6XFx0XFx0aWYgKGxlbiBcXHUwMDNlPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIG1zZ19mbGFncykpXFxubmV0L2lwdjQvdGNwLmMtNDg3OC1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xcbm5ldC9pcHY0L3RjcC5jLTQ4NzktXFx0XFx0c3dpdGNoIChsZW4pIHtcXG5uZXQvaXB2NC90Y3AuYzo0ODgwOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpOlxcbm5ldC9pcHY0L3RjcC5jLTQ4ODEtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcXG5uZXQvaXB2NC90Y3AuYzo0ODgyOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbGxlbik6XFxubmV0L2lwdjQvdGNwLmM6NDg4MzpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2NvbnRyb2wpOlxcbm5ldC9pcHY0L3RjcC5jOjQ4ODQ6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGZsYWdzKTpcXG5uZXQvaXB2NC90Y3AuYzo0ODg1OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2xlbik6XFxubmV0L2lwdjQvdGNwLmM6NDg4NjpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgY29weWJ1Zl9hZGRyZXNzKTpcXG5uZXQvaXB2NC90Y3AuYzo0ODg3OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBlcnIpOlxcbm5ldC9pcHY0L3RjcC5jLTQ4ODgtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3Zfc2tfZXJyO1xcbm5ldC9pcHY0L3RjcC5jOjQ4ODk6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGlucSk6XFxubmV0L2lwdjQvdGNwLmMtNDg5MC1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9pbnE7XFxubmV0L2lwdjQvdGNwLmM6NDg5MTpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKTpcXG5uZXQvaXB2NC90Y3AuYy00ODkyLVxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjQwLjY0NzUzMDU0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTA1OTI0ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgWmVyb0NvcHkgUmVjZWl2ZSBmb3IgU3l6a2FsbGVyIEZvY3VzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVENQIFplcm9Db3B5IHJlY2VpdmUgcGF0Y2gsIGFuZCBteSBtYWluIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZnVuY3Rpb25zIHRvIHRhcmdldCB3aXRoIFN5emthbGxlcidzIEZvY3VzU3ltYm9scy4gSSBzZWUgdGhhdCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIGNhbGxlZCBmcm9tIGBkb190Y3BfZ2V0c29ja29wdGAsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIGVudHJ5IHBvaW50LiBBZGRpdGlvbmFsbHksIGB0Y3BfbW1hcGAgaXMgY2FsbGVkIGR1cmluZyBzb2NrZXQgbW1hcHBpbmcuIFRoaXMgbG9va3MgcHJvbWlzaW5nLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoOiBgdGNwX3pjX21lbV91bmNoYXJnZWAsIGB0Y3BfemNfbWVtX2NoYXJnZWAsIGB0Y3BfemNfdm1hX29wZW5gLCBgdGNwX3pjX3ZtYV9jbG9zZWAsIGB0Y3BfbW1hcGAsIGB0Y3BfemNfdm1hX3ZhbGlkYCwgYW5kIGBmaW5kX3RjcF92bWFgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlc2Ugc3RhdGljIG9yIG5vbi1zdGF0aWM/ICBgdGNwX21tYXBgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBiZWNhdXNlIGl0J3Mgc3RvcmVkIGluIGBpbmV0X3N0cmVhbV9vcHNgIGFuZCBgaW5ldDZfc3RyZWFtX29wc2AuIGB0Y3BfemNfdm1hX29wZW5gIGFuZCBgdGNwX3pjX3ZtYV9jbG9zZWAgYXJlIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGluIGB0Y3Bfdm1fb3BzYCwgc28gdGhleSAqY2Fubm90KiBiZSBpbmxpbmVkLiBgdGNwX3pjX21lbV91bmNoYXJnZWAgYW5kIGB0Y3BfemNfbWVtX2NoYXJnZWAgYXJlIGFsc28gc3RhdGljLiBgZmluZF90Y3Bfdm1hYCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBhcmUgYWxzbyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgZG9fdGNwX2dldHNvY2tvcHRgLCB3aGljaCBpcyBub24tc3RhdGljLiBGaW5hbGx5LCBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCBpcyBub24tc3RhdGljLlxuXG5Ob3csIHRoZSBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55IG9mIHRoZXNlIGFyZSB0b28gZ2VuZXJpYy4gYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgKnNlZW1zKiBsaWtlIGl0J3MgY2FsbGVkIGR1cmluZyBhbG1vc3QgZXZlcnkgc29ja2V0IHNlbmQvcmVjZWl2ZSBhbGxvY2F0aW9uLiBUaGF0IG1lYW5zIGl0IG1pZ2h0IGRpbHV0ZSB0aGUgZm9jdXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgdGNwX21tYXBgLCBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBgdGNwX3pjX21lbV9jaGFyZ2VgLCBgdGNwX3pjX21lbV91bmNoYXJnZWAsIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFyZSB2ZXJ5IHNwZWNpZmljIHRvIFRDUCB6ZXJvY29weSBhbmQgbW1hcC4gIFRoZXkgc2VlbSBtdWNoIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRhcmdldGluZyBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLlxuXG5Mb29raW5nIGF0IHRoZSBGb2N1c1N5bWJvbCBndWlkZWxpbmVzLCBgdGNwX21tYXBgIGlzIGEgZGlyZWN0IEFQSSBlbnRyeXBvaW50IGZvciBtbWFwLiBgdGNwX3pjX3ZtYV9vcGVuYCBhbmQgYHRjcF96Y192bWFfY2xvc2VgIGFyZSB2bV9vcHMgY2FsbGJhY2tzLiBgdGNwX3pjX21lbV9jaGFyZ2VgIGFuZCBgdGNwX3pjX21lbV91bmNoYXJnZWAgaGFuZGxlIHRoZSBjb3JlIG1lbW9yeSBhY2NvdW50aW5nIGZvciB6ZXJvY29weSByZWNlaXZlLiBBbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpcyB0aGUgZ2V0c29ja29wdCBlbnRyeXBvaW50IHRoYXQgZmluZHMgdGhlIFRDUCBWTUEuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGB0Y3BfemNfbWVtX2NoYXJnZWAgaXMgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXRzIHNpemUgc3VnZ2VzdHMgaXQncyB1bmxpa2VseS4gQnV0IGV2ZW4gaWYgaXQgaXMsIGB0Y3BfbW1hcGAsIGB0Y3BfemNfdm1hX29wZW5gLCBgdGNwX3pjX3ZtYV9jbG9zZWAsIGFuZCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scy5cblxuQ29uc2lkZXJpbmcgYWxsIHRoaXMsIGl0IHNlZW1zIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvdGNwLmNgIGFuZCBgbmV0L2NvcmUvc29jay5jYC4gSXQncyBtb2RpZnlpbmcgVENQIHNvY2tldCBtbWFwIGFuZCB6ZXJvY29weSBtZW1vcnkgYWNjb3VudGluZy4gVGhlcmUncyBuZXcgYHRjcF96Y192bWFgIHRyYWNraW5nIG1tLCBzaywgbnJfcGFnZXMgd2l0aCBgLm9wZW5gIGFuZCBgLmNsb3NlYCB2bV9vcHMsIGluY2x1ZGluZyBzb2NrIGFuZCBtbSBzdHJ1Y3RzLCBhcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgdG8gYHZtX2ZsYWdzYC4gIEl0J3MgYWxzbyBkaXJlY3RseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHN5c2NhbGxzLlxuXG5Gb3IgdGhlIHJlcXVpcmVkIGNvbmZpZywgSSdsbCBuZWVkIGBJTkVUYCBmb3IgVENQIGFuZCBgTU1VYCBkdWUgdG8gYCNpZmRlZiBDT05GSUdfTU1VYCBpbiBgbmV0L2lwdjQvdGNwLmNgLiAgSSdsbCBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3MgYXJlIG5lZWRlZCwgc3VjaCBhcyBUQ1AgemVyb2NvcHkgcngsIG9yIGB0Y3BfbW1hcGAuIExldCdzIGxvb2sgYXJvdW5kIGBuZXQvaXB2NC9LY29uZmlnYCBvciBncmVwIGZvciBgVENQX1pFUk9DT1BZX1JFQ0VJVkVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjU5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzo1MC4xNTM0NTg1OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE0MjUzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVENQX1pFUk9DT1BZX1JFQ0VJVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q9ODk4PUtlcm5lbCByZXNwb25zZSBjb250ZW50czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTkyMy1gYEVUSFRPT0xfQV9SSU5HU19UQ1BfREFUQV9TUExJVGBgIGluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgdXNhYmxlIHdpdGhcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdDo5MjQ6cGFnZS1mbGlwcGluZyBUQ1AgemVyby1jb3B5IHJlY2VpdmUgKGBgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSlgYCkuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtOTI1LUlmIGVuYWJsZWQgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIHRvIHBsYWNlIGZyYW1lIGhlYWRlcnMgYW5kIGRhdGEgaW50b1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lvdS16Y3J4LnJzdD0xMT10aGUgbmV0d29yayByZWNlaXZlIHBhdGgsIGFsbG93aW5nIHBhY2tldCBkYXRhIHRvIGJlIHJlY2VpdmVkIGRpcmVjdGx5IGludG9cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaW91LXpjcngucnN0OjEyOnVzZXJzcGFjZSBtZW1vcnkuIFRoaXMgZmVhdHVyZSBpcyBkaWZmZXJlbnQgdG8gVENQX1pFUk9DT1BZX1JFQ0VJVkUgaW4gdGhhdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pb3UtemNyeC5yc3QtMTMtdGhlcmUgYXJlIG5vIHN0cmljdCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZCBubyBuZWVkIHRvIG1tYXAoKS9tdW5tYXAoKS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaD03ND1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjctI2RlZmluZSBUQ1BfRkFTVE9QRU5fTk9fQ09PS0lFXFx0MzRcXHQvKiBFbmFibGUgVEZPIHdpdGhvdXQgYSBURk8gY29va2llICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjEyODojZGVmaW5lIFRDUF9aRVJPQ09QWV9SRUNFSVZFXFx0MzVcXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTI5LSNkZWZpbmUgVENQX0lOUVxcdFxcdFxcdDM2XFx0LyogTm90aWZ5IGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGFzIGEgY21zZyBvbiByZWFkICovXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg9NTAwPXN0cnVjdCB0Y3BfYW9fcmVwYWlyIHsgLyoge3MsZ31ldHNvY2tvcHQoVENQX0FPX1JFUEFJUikgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC01MDYtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjUwNzovKiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLikgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtNTA4LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDU3Nj1pbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00ODQ2LSNpZmRlZiBDT05GSUdfTU1VXFxubmV0L2lwdjQvdGNwLmM6NDg0NzpcXHRjYXNlIFRDUF9aRVJPQ09QWV9SRUNFSVZFOiB7XFxubmV0L2lwdjQvdGNwLmMtNDg0OC1cXHRcXHRzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCB0c3M7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00OTUxPWJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDk1My1cXHQvKiBUQ1AgZG9fdGNwX2dldHNvY2tvcHQgaGFzIG9wdGltaXplZCBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uXFxubmV0L2lwdjQvdGNwLmM6NDk1NDpcXHQgKiB0byBhdm9pZCBleHRyYSBzb2NrZXQgbG9jayBmb3IgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXFxubmV0L2lwdjQvdGNwLmMtNDk1NS1cXHQgKi9cXG5uZXQvaXB2NC90Y3AuYzo0OTU2OlxcdGlmIChsZXZlbCA9PSBTT0xfVENQIFxcdTAwMjZcXHUwMDI2IG9wdG5hbWUgPT0gVENQX1pFUk9DT1BZX1JFQ0VJVkUpXFxubmV0L2lwdjQvdGNwLmMtNDk1Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaD03Mj1lbnVtIHsgXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTI0LSNkZWZpbmUgVENQX0ZBU1RPUEVOX05PX0NPT0tJRVxcdDM0XFx0LyogRW5hYmxlIFRGTyB3aXRob3V0IGEgVEZPIGNvb2tpZSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaDoxMjU6I2RlZmluZSBUQ1BfWkVST0NPUFlfUkVDRUlWRVxcdDM1XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyNi0jZGVmaW5lIFRDUF9JTlFcXHRcXHRcXHQzNlxcdC8qIE5vdGlmeSBieXRlcyBhdmFpbGFibGUgdG8gcmVhZCBhcyBhIGNtc2cgb24gcmVhZCAqL1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTMzNj1zdHJ1Y3QgdGNwX2RpYWdfbWQ1c2lnIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0zNDMtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjM0NDovKiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIC4uLikgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMzQ1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEwNjU9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3pjKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTEyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTEyMjpcXHRlcnIgPSBnZXRzb2Nrb3B0KHAxLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsIFxcdTAwMjZ6YywgXFx1MDAyNnpjX2xlbik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTExMjMtXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZ2V0c29ja29wdFxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jPTI1PXN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYy0yODctXFx0e1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYzoyODg6XFx0XFx0LmRlc2NyID0gXFxcImdldHNvY2tvcHQ6IGRlbnkgbmVnYXRpdmUgY3R4LVxcdTAwM2VvcHRsZW4gaW4gVENQX1pFUk9DT1BZX1JFQ0VJVkVcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYy0yODktXFx0XFx0Lmluc25zID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jLTMwMi1cXHRcXHQuZ2V0X2xldmVsID0gSVBQUk9UT19UQ1AsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jOjMwMzpcXHRcXHQuZ2V0X29wdG5hbWUgPSBUQ1BfWkVST0NPUFlfUkVDRUlWRSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMtMzA0LVxcdFxcdC5nZXRfb3B0bGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM9MTU9c3RhdGljIGludCBnZXRzZXRzb2Nrb3B0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTY1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHRfc2suYzoxNjY6XFx0LyogVENQX1pFUk9DT1BZX1JFQ0VJVkUgdHJpZ2dlcnMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTY3LVxcdG1lbXNldChcXHUwMDI2YnVmLCAwLCBzaXplb2YoYnVmKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE2OC1cXHRvcHRsZW4gPSBzaXplb2YoYnVmLnpjKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTY5OlxcdGVyciA9IGdldHNvY2tvcHQoZmQsIFNPTF9UQ1AsIFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBcXHUwMDI2YnVmLCBcXHUwMDI2b3B0bGVuKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTcwLVxcdGlmIChlcnIpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmM6MTcxOlxcdFxcdGxvZ19lcnIoXFxcIlVuZXhwZWN0ZWQgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSkgZXJyPSVkIGVycm5vPSVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0X3NrLmMtMTcyLVxcdFxcdFxcdGVyciwgZXJybm8pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE3OS1cXHRlcnJubyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jOjE4MDpcXHRlcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfWkVST0NPUFlfUkVDRUlWRSwgXFx1MDAyNmJ1ZiwgXFx1MDAyNm9wdGxlbik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE4MS1cXHRpZiAoZXJybm8gIT0gRUlOVkFMKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jOjE4MjpcXHRcXHRsb2dfZXJyKFxcXCJVbmV4cGVjdGVkIGdldHNvY2tvcHQoVENQX1pFUk9DT1BZX1JFQ0VJVkUpIGVycj0lZCBlcnJubz0lZFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdF9zay5jLTE4My1cXHRcXHRcXHRlcnIsIGVycm5vKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2Nrb3B0X3NrLmM9MzA9aW50IF9nZXRzb2Nrb3B0KHN0cnVjdCBicGZfc29ja29wdCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYy03My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jOjc0OlxcdGlmIChjdHgtXFx1MDAzZWxldmVsID09IFNPTF9UQ1AgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvcHRuYW1lID09IFRDUF9aRVJPQ09QWV9SRUNFSVZFKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tvcHRfc2suYzo3NTpcXHRcXHQvKiBWZXJpZnkgdGhhdCBUQ1BfWkVST0NPUFlfUkVDRUlWRSB0cmlnZ2Vycy5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja29wdF9zay5jLTc2LVxcdFxcdCAqIEl0IGhhcyBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBmb3IgcGVyZm9ybWFuY2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jPTE2OT12b2lkICpjaGlsZF90aHJlYWQodm9pZCAqYXJnKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jOjIyNjpcXHRcXHRcXHRyZXMgPSBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1pFUk9DT1BZX1JFQ0VJVkUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjI3LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2emMsIFxcdTAwMjZ6Y19sZW4pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmMtMjM4LVxcdFxcdFxcdFxcdC8qIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVubWFwIHRoZSBwYWdlcyByaWdodCBub3csXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9tbWFwLmM6MjM5OlxcdFxcdFxcdFxcdCAqIGluc3RlYWQgb2YgZG9pbmcgdGhpcyBpbiBuZXh0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfbW1hcC5jLTI0MC1cXHRcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6NTEuNzQ0ODk2Nzk1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTgwNzM5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19NTVVgIOKAkyB0aG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsLCBub3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuIFN0YW5kYXJkIG9wdGlvbnMsIGxpa2VseSBlbmFibGVkIG9uIHByZXR0eSBtdWNoIGFueSBtYWluc3RyZWFtIGFyY2hpdGVjdHVyZS4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSdyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucywgc3RhcnRpbmcgd2l0aCBgQ09ORklHX0lORVRgLiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGRldGFpbHMgc3Vycm91bmRpbmcgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjUzLjcwMjk3NDY4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMDc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjMzOjUzLjc1MTk5NzQ2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDg2NTQzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgSU5FVCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJTkVUYCB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEknbGwgYmUgZGl2aW5nIHN0cmFpZ2h0IGludG8gYG5ldC9LY29uZmlnYC4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIG9mIGNvdXJzZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYElORVRgIGZlYXR1cmUuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluY2x1c2lvbiBvZiBgSU5FVGAgYWZmZWN0cyBvdGhlciBuZXR3b3JrIGZlYXR1cmVzIG9yIGlmIHRoZXJlIGFyZSBhbnkgcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgdHJhY2luZyBob3cgdGhlIGZlYXR1cmUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBJIGNhbiBwcmVkaWN0IGFueSBpc3N1ZXMgZG93bnN0cmVhbSBpZiBJIG1vZGlmeSBhbnkgb2YgdGhlIGZsYWdzIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGZpbmQgYGNvbmZpZyBJTkVUYCBhdCB0aGUgcm9vdCwgb3IgcG9zc2libHkgbmVzdGVkIHVuZGVyIHNvbWUgcGFyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBkZXBlbmRpbmcgb24gaXRzIHNjb3BlLiBNeSBnb2FsIGhlcmUgaXNuJ3QganVzdCB0byAqZmluZCogdGhlIGVudHJ5LCBidXQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgaXRzIGltcGFjdCBvbiB0aGUgbGFyZ2VyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzg1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzM6NTUuODM4NTQzNTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg1OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvS2NvbmZpZy0xMTMtXFxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXFxubmV0L0tjb25maWctMTE1LVxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozMzo1NS44ODU0MDc1MDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM5NTIxMjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AvSVAgWmVyb2NvcHkgRmVhdHVyZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19JTkVUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFRDUC9JUCBuZXR3b3JraW5nLCBhbmQgYENPTkZJR19NTVVgIGlzIHRoZSBvbmUgZW5hYmxpbmcgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBzdXBwb3J0LiBHb29kLiBOb3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBGb2N1c1N5bWJvbHMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBhcyBpdCBzaG91bGQgYmUuXG5cblRoZSBsaXN0ZWQgc3ltYm9scywgYHRjcF9tbWFwYCwgYHRjcF96Y192bWFfb3BlbmAsIGB0Y3BfemNfdm1hX2Nsb3NlYCwgYHRjcF96Y19tZW1fY2hhcmdlYCwgYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBhbmQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYWxsIGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgemVyby1jb3B5IHJlY2VpdmUgYW5kIFRDUCBtbWFwIGFjY291bnRpbmcgZmVhdHVyZXMsIGFzIGV4cGVjdGVkLiBUaGV5J3JlIGFsbCB2ZXJ5IGZvY3VzZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkuIEV4Y2VsbGVudCEgVGhlIHVzZSBvZiB0aGVzZSBzeW1ib2xzIHNwZWNpZmljYWxseSBhdm9pZHMgYW55IHJlbGlhbmNlIG9uIGdlbmVyaWMgZnVuY3Rpb25zIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3IgZ2VuZXJhbCBtZW1vcnkgaGVscGVycy5cblxuQmFzZWQgb24gbXkgcmV2aWV3LCBldmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgbG9naWNhbGx5IHNvdW5kLCBjbGVhcmx5IGRlZmluZWQsIGFuZCwgaW1wb3J0YW50bHksIGNvbXBsaWFudCB3aXRoIGFsbCB0aGUgZXN0YWJsaXNoZWQgZ3VpZGVsaW5lcyBhbmQgZGVzaWduIHByaW5jaXBsZXMgZm9yIHRoaXMgdHlwZSBvZiBmZWF0dXJlIGludGVncmF0aW9uLiBJIHNlZSBubyByZWQgZmxhZ3Mgb3IgcG90ZW50aWFsIGlzc3Vlcy5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIEknbGwgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzIwLCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDowMC4yODA2MjIzNzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ3NTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX21tYXBcIixcbiAgICBcInRjcF96Y192bWFfb3BlblwiLFxuICAgIFwidGNwX3pjX3ZtYV9jbG9zZVwiLFxuICAgIFwidGNwX3pjX21lbV9jaGFyZ2VcIixcbiAgICBcInRjcF96Y19tZW1fdW5jaGFyZ2VcIixcbiAgICBcInRjcF96ZXJvY29weV9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzICh2aWEgdGNwX21tYXAsIHRjcF96Y192bWFfb3BlbiwgYW5kIHRjcF96Y192bWFfY2xvc2UpLCB0cmFja2luZyBtbV9zdHJ1Y3QgYW5kIHNvY2sgcmVmZXJlbmNlcywgYW5kIHVwZGF0ZXMgbWVtb3J5IHJhaXNlIGFjY291bnRpbmcgaW4gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkIHdpdGggdGhlIG5ldyBTS19NRU1fUkVDVl9aRVJPQ09QWSBraW5kLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBNTSBpbnRlcmFjdGlvbiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2Ugc29ja2V0IHN5c2NhbGxzIChtbWFwLCBnZXRzb2Nrb3B0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBtdW5tYXAsIGV0Yy4pLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGZ1enogZm9yIG1lbW9yeSBhY2NvdW50aW5nLCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX21tYXBcIixcbiAgICBcInRjcF96Y192bWFfb3BlblwiLFxuICAgIFwidGNwX3pjX3ZtYV9jbG9zZVwiLFxuICAgIFwidGNwX3pjX21lbV9jaGFyZ2VcIixcbiAgICBcInRjcF96Y19tZW1fdW5jaGFyZ2VcIixcbiAgICBcInRjcF96ZXJvY29weV9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzICh2aWEgdGNwX21tYXAsIHRjcF96Y192bWFfb3BlbiwgYW5kIHRjcF96Y192bWFfY2xvc2UpLCB0cmFja2luZyBtbV9zdHJ1Y3QgYW5kIHNvY2sgcmVmZXJlbmNlcywgYW5kIHVwZGF0ZXMgbWVtb3J5IHJhaXNlIGFjY291bnRpbmcgaW4gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkIHdpdGggdGhlIG5ldyBTS19NRU1fUkVDVl9aRVJPQ09QWSBraW5kLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBNTSBpbnRlcmFjdGlvbiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2Ugc29ja2V0IHN5c2NhbGxzIChtbWFwLCBnZXRzb2Nrb3B0IFRDUF9aRVJPQ09QWV9SRUNFSVZFLCBtdW5tYXAsIGV0Yy4pLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGZ1enogZm9yIG1lbW9yeSBhY2NvdW50aW5nLCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjAwLjM1MDEwMzY2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxMjc5NTM3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDowMC4zNTA1NDYwODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2ODEyNzUwNzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGlmZWN5Y2xlIHRyYWNraW5nIGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzIChzdHJ1Y3QgdGNwX3pjX3ZtYSkuIFRoZSBvbmx5IG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZSBpcyBzdHJ1Y3QgdGNwX3pjX3ZtYSwgd2hlcmUgYWxsIG1lbWJlciBmaWVsZHMgKG5yX3BhZ2VzLCBtbSwgc2ssIHJlZmNudCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEga21hbGxvY19vYmouIFRoZSBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGtlcm5lbC1pbnRlcm5hbCBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1vcnkgYWNjb3VudGluZywgb3IgVk1BIGxpZmVjeWNsZS91c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkOGY2YzBiNTkzMWE0OGExNDA3Y2Q1NGI2YTJhN2RkNTI2ZGJjNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMzozMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaFxuaW5kZXggNTExODUyMjJhYWMyOS4uY2YxOTA1NWE5YzQwMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvc29jay5oXG5AQCAtMTU1Niw2ICsxNTU2LDcgQEAgdm9pZCBfX3NrX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudCk7XG4gXG4gI2RlZmluZSBTS19NRU1fU0VORFx0MFxuICNkZWZpbmUgU0tfTUVNX1JFQ1ZcdDFcbisjZGVmaW5lIFNLX01FTV9SRUNWX1pFUk9DT1BZXHQweDEwMFxuIFxuIC8qIHN5c2N0bF9tZW0gdmFsdWVzIGFyZSBpbiBwYWdlcyAqL1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBza19wcm90X21lbV9saW1pdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG5pbmRleCBiNTMxMDQzOTUzNmUwLi4wZjEwYjkyYzExOGM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhcbkBAIC0zOCw3ICszOCw4IEBAXG4gXG4gI2RlZmluZSBza21lbV9raW5kX25hbWVzXHRcdFx0XFxcbiBcdFx0RU0oU0tfTUVNX1NFTkQpXHRcdFx0XFxcbi1cdFx0RU1lKFNLX01FTV9SRUNWKVxuK1x0XHRFTShTS19NRU1fUkVDVilcdFx0XHRcXFxuK1x0XHRFTWUoU0tfTUVNX1JFQ1ZfWkVST0NPUFkpXG4gXG4gLyogZW51bXMgbmVlZCB0byBiZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlICovXG4gI3VuZGVmIEVNXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCBmYTYwYjc0OTRjNTg2Li4zZDg1YzEzOGUxYzcxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0zMzgwLDcgKzMzODAsNyBAQCBpbnQgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBhbXQsIGludCBraW5kKVxuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNjIHNrX2dldF9ybWVtMChzaywgcHJvdCkpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG4tXHR9IGVsc2UgeyAvKiBTS19NRU1fU0VORCAqL1xuK1x0fSBlbHNlIGlmIChraW5kID09IFNLX01FTV9TRU5EKSB7XG4gXHRcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNTYyNzUyMzUyYWZlNC4uNWNjMmJmYzhhOTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI2Nyw2ICsyNjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcdTAwM2VcbkBAIC0xODYwLDIzICsxODYxLDExOCBAQCB2b2lkIHRjcF9zZXRfcmN2YnVmKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbitzdHJ1Y3QgdGNwX3pjX3ZtYSB7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCBzb2NrICpzaztcbit9O1xuK1xuKy8qIEtlZXAgdGhlIHNpemUgYXJndW1lbnQgdG8gX19za19tZW1fcmFpc2VfYWxsb2NhdGVkKCkgd2l0aGluIGludC4gKi9cbisjZGVmaW5lIFRDUF9aRVJPQ09QWV9NRU1fQ0hVTksgKElOVF9NQVggXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGNodW5rO1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc2ssIGNodW5rKTtcbitcdFx0bnJfcGFnZXMgLT0gY2h1bms7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGNwX3pjX21lbV9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgY2h1bms7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKG5yX3BhZ2VzKSB7XG4rXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsXG4rXHRcdFx0ICAgICAgVENQX1pFUk9DT1BZX01FTV9DSFVOSyk7XG4rXHRcdHJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgY2h1bmsgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRcdCAgICAgICBjaHVuaywgU0tfTUVNX1JFQ1ZfWkVST0NPUFkpO1xuK1x0XHRpZiAoIXJldCkge1xuK1x0XHRcdHRjcF96Y19tZW1fdW5jaGFyZ2Uoc2ssIGNoYXJnZWQpO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHR9XG4rXHRcdGNoYXJnZWQgKz0gY2h1bms7XG4rXHRcdG5yX3BhZ2VzIC09IGNodW5rO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRjcF96Y192bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJlZmNvdW50X2luYyhcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2emNfdm1hLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0dGNwX3pjX21lbV91bmNoYXJnZSh6Y192bWEtXHUwMDNlc2ssIHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyk7XG4rXHRcdG1tZHJvcCh6Y192bWEtXHUwMDNlbW0pO1xuK1x0XHRzb2NrX3B1dCh6Y192bWEtXHUwMDNlc2spO1xuK1x0XHRrZnJlZSh6Y192bWEpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XG4rXHQub3BlbiA9IHRjcF96Y192bWFfb3BlbixcbitcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXG4gfTtcbiBcbiBpbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbitcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWE7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1dSSVRFIHwgVk1fRVhFQykpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQyk7XG4gXG4gXHQvKiBJbnN0cnVjdCB2bV9pbnNlcnRfcGFnZSgpIHRvIG5vdCBtbWFwX3JlYWRfbG9jayhtbSkgKi9cbi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQKTtcbitcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX01JWEVETUFQKTtcbitcbitcdG5yX3BhZ2VzID0gKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0emNfdm1hID0ga21hbGxvY19vYmooKnpjX3ZtYSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghemNfdm1hKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHpjX3ZtYS1cdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xuK1x0emNfdm1hLVx1MDAzZW1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0emNfdm1hLVx1MDAzZXNrID0gc29jay1cdTAwM2VzaztcbitcdHJlZmNvdW50X3NldChcdTAwMjZ6Y192bWEtXHUwMDNlcmVmY250LCAxKTtcbitcdG1tZ3JhYih6Y192bWEtXHUwMDNlbW0pO1xuK1x0c29ja19ob2xkKHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRpZiAodGNwX3pjX21lbV9jaGFyZ2UoemNfdm1hLVx1MDAzZXNrLCBucl9wYWdlcykpIHtcbitcdFx0bW1kcm9wKHpjX3ZtYS1cdTAwM2VtbSk7XG4rXHRcdHNvY2tfcHV0KHpjX3ZtYS1cdTAwM2Vzayk7XG4rXHRcdGtmcmVlKHpjX3ZtYSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnRjcF92bV9vcHM7XG4rXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gemNfdm1hO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdHJldHVybiB2bWEtXHUwMDNldm1fb3BzID09IFx1MDAyNnRjcF92bV9vcHMgXHUwMDI2XHUwMDI2IHpjX3ZtYSBcdTAwMjZcdTAwMjYgemNfdm1hLVx1MDAzZW1tID09IG1tO1xuK31cbitcbiBzdGF0aWMgc2tiX2ZyYWdfdCAqc2tiX2FkdmFuY2VfdG9fZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0X3NrYixcbiBcdFx0XHRcdCAgICAgICB1MzIgKm9mZnNldF9mcmFnKVxuIHtcbkBAIC0yMTczLDcgKzIyNjksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXG4gXHRpZiAodm1hKSB7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbitcdFx0aWYgKCF0Y3BfemNfdm1hX3ZhbGlkKHZtYSwgbW0pKSB7XG4gXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC0yMTgzLDcgKzIyNzksNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuK1x0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MDAuMzUwNTQ3MzE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTE2MzA5NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBUQ1AgWmVyby1Db3B5IFBhdGNoZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyB0aW1lIHRvIGRlbHZlIGludG8gdGhlIGRldGFpbHMuXG5cbkZpcnN0LCBJIHNlZSBhZGRpdGlvbnMgdG8gYGluY2x1ZGUvbmV0L3NvY2suaGAgYW5kIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmhgIHJlbGF0ZWQgdG8gYFNLX01FTV9SRUNWX1pFUk9DT1BZYC4gU3RhbmRhcmQgc3R1ZmYsIGRlZmluaW5nIGEgZmxhZyBhbmQgYWRkaW5nIGl0IHRvIHRyYWNlIGV2ZW50cy4gTm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyB0aGVyZSwgYnV0IGxldCdzIGtlZXAgYW4gZXllIG9uIGhvdyBpdCdzICp1c2VkKi5cblxuTmV4dCwgYG5ldC9jb3JlL3NvY2suY2AgbW9kaWZpZXMgdGhlIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgIGZ1bmN0aW9uLiBBaCwgdGhpcyBpcyB3aGVyZSBpdCdzIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIGNoYW5nZXMgZnJvbSBhIHNpbXBsZSBgZWxzZWAgYmxvY2sgdG8gYW4gYGVsc2UgaWZgIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSBga2luZGAgdmFyaWFibGUuICpDcnVjaWFsbHkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGtpbmRgIGlzIHNldCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGlzIG5ldyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgIGZsYWcuIEkgc2hvdWxkIGNoZWNrIGBuZXQvY29yZS9zb2NrLmNgIGFyb3VuZCBsaW5lIDMzODAsIGp1c3QgdG8gYmUgc3VyZS5cblxuVGhlIG1lYXQgb2YgdGhlIHBhdGNoLCBob3dldmVyLCBpcyBpbiBgbmV0L2lwdjQvdGNwLmNgLiBIZXJlIHdlIGhhdmUgYSBgc3RydWN0IHRjcF96Y192bWFgIGJlaW5nIGludHJvZHVjZWQsIGFsb25nIHdpdGggbmV3IGZ1bmN0aW9uczogYHRjcF96Y19tZW1fdW5jaGFyZ2VgLCBgdGNwX3pjX21lbV9jaGFyZ2VgLCBhbmQgYSBgdGNwX3ZtX29wc2Agc3RydWN0dXJlLiBXZSdyZSBsb29raW5nIGF0IHplcm8tY29weSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggYHRjcF9tbWFwYC4gVGhlIGNvZGUgc2VlbXMgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBgemNfdm1hYCwgdHJhY2tpbmcgdGhlIG51bWJlciBvZiBwYWdlcywgbWVtb3J5IG1hcCwgc29ja2V0LCBhbmQgcmVmY291bnRzLiBgdGNwX3pjX21lbV9jaGFyZ2VgIGFuZCBgdGNwX3pjX21lbV91bmNoYXJnZWAgYXJlIGltcG9ydGFudCBhcyB0aGV5IG11c3QgYmUgdGhlIGJvb2trZWVwaW5nIG9wZXJhdGlvbnMgdG8gdHJhY2sgcmVzb3VyY2VzIHRoYXQgYXJlIG1hbmFnZWQgYnkgdGhpcyBjb2RlLlxuXG5JIHNlZSByZWZlcmVuY2VzIHRvIGB2bWFgIGFuZCBgbW1gIChtZW1vcnkgbWFwKS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIHZtYSBpbiBgdGNwX3pjX3ZtYV92YWxpZGAsIGFuZCB1cGRhdGVzIGBmaW5kX3RjcF92bWFgIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHVzZSBvZiBga21hbGxvY19vYmpgLCB0aGUgcmVmY291bnRpbmcsIGFuZCBtZW1vcnkgbWFwIG1hbmlwdWxhdGlvbiBhcmUgcmVkIGZsYWdzIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgc2NlbmFyaW9zLiAqVGhpcyBpcyB3aGVyZSBLTVNBTiB3aWxsIHNoaW5lKi4gVGhlIHplcm8tY29weSBmdW5jdGlvbmFsaXR5IGxpa2VseSBpbnZvbHZlcyBkaXJlY3RseSBtYXBwaW5nIHVzZXItc3BhY2UgYnVmZmVycyBpbnRvIGtlcm5lbCBzcGFjZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBzaXR1YXRpb25zIGlmIG5vdCBoYW5kbGVkIG1ldGljdWxvdXNseS5cblxuQmFzZWQgb24gdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUgKGB0Y3BfemNfdm1hYCksIG5ldyBtZW1vcnktcmVsYXRlZCBmdW5jdGlvbnMsIGFuZCB0aGUgaW50cmljYWNpZXMgb2YgemVyby1jb3B5IG1lY2hhbmlzbXMsICp0aGlzIHBhdGNoIHNlcmllcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgZm9jdXNlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24qLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlzIGVsZXZhdGVkIGR1ZSB0byB0aGUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgYW5kIHRoZSBjb21wbGV4IGludGVycGxheSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4gSSBtdXN0IGNoZWNrIHRoZSByZWZlcmVuY2UgY291bnQgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc2V0IG9mIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDoyNi40NjY4NTkzNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA4MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29jay5jPTMzMTk9RVhQT1JUX1NZTUJPTChza193YWl0X2RhdGEpO1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTMzMjEtLyoqXFxubmV0L2NvcmUvc29jay5jOjMzMjI6ICpcXHRfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQgLSBpbmNyZWFzZSBtZW1vcnlfYWxsb2NhdGVkXFxubmV0L2NvcmUvc29jay5jLTMzMjMtICpcXHRAc2s6IHNvY2tldFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTMzMzUtICovXFxubmV0L2NvcmUvc29jay5jOjMzMzY6aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG5uZXQvY29yZS9zb2NrLmMtMzMzNy17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MzQ1ND1pbnQgX19za19tZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGtpbmQpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMzQ1OC1cXHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgYW10IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbm5ldC9jb3JlL3NvY2suYzozNDU5OlxcdHJldCA9IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzaywgc2l6ZSwgYW10LCBraW5kKTtcXG5uZXQvY29yZS9zb2NrLmMtMzQ2MC1cXHRpZiAoIXJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MjYuNTE1Mjc0MDI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MjcwNDk3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYG5ldC9jb3JlL3NvY2suY2AgLSBTb2NrZXQgTGlmZWN5Y2xlIFx1MDAyNiBTdGF0ZSBUcmFuc2l0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gbGluZXMgMzMzNi0zNDQwIG9mIGBuZXQvY29yZS9zb2NrLmNgLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIHNlY3Rpb24gZGVhbGluZyB3aXRoIHNvY2tldCBtYW5hZ2VtZW50LCBwcm9iYWJseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIG9mIGEgc29ja2V0IGFuZCBob3cgaXRzIHN0YXRlIHRyYW5zaXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlZXBseSB0byBvcHRpbWl6ZSBob3cgSSB3b3JrIHdpdGggc29ja2V0IGNvbm5lY3Rpb25zLiBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaW5lciBwb2ludHMgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBJIGltYWdpbmUgdGhlcmUnbGwgYmUgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaGVyZSwgcmVhY3RpbmcgdG8gZGlmZmVyZW50IGV2ZW50cyBhbmQgc29ja2V0IGZsYWdzLiBQZXJoYXBzIHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBzZXR0aW5nIG9mIHBhcmFtZXRlcnMgZm9yIHNvY2tldCBiZWhhdmlvci4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBoYW5kbGVzIGJvdGggVENQIGFuZCBVRFAgLSBJIGtub3cgdGhlcmUgYXJlIHZhcmlhdGlvbnMgaW4gaGFuZGxpbmcgZm9yIGNvbm5lY3Rpb24tb3JpZW50ZWQgdnMgY29ubmVjdGlvbmxlc3MgcHJvdG9jb2xzLiBJIGFsc28gd2FudCB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSwgc2luY2Ugc29ja2V0IG9wZXJhdGlvbnMgYXJlIG9idmlvdXNseSBzaGFyZWQuIEhvcGVmdWxseSwgdGhlcmUgaXMgYSBjbGVhciBicmVha2Rvd24gb2YgdGhlIHNvY2tldCdzIGRpZmZlcmVudCBzdGF0ZXMgKGUuZy4sIExJU1RFTiwgQ09OTkVDVEVELCBFU1RBQkxJU0hFRCwgQ0xPU0VELCBldGMuKS4gQW5kLCBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucywgcGFydGljdWxhcmx5IGhvdyBpdCByZXNwb25kcyB0byBkcm9wcGVkIGNvbm5lY3Rpb25zIG9yIG5ldHdvcmsgZmFpbHVyZXMuIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjI4Ljk0MjMyNzMwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMzYsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMzY6XFx0aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG4zMzM3OlxcdHtcXG4zMzM4OlxcdFxcdGJvb2wgbWVtY2dfZW5hYmxlZCA9IGZhbHNlLCBjaGFyZ2VkID0gZmFsc2U7XFxuMzMzOTpcXHRcXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cXHUwMDNlc2tfcHJvdDtcXG4zMzQwOlxcdFxcdGxvbmcgYWxsb2NhdGVkID0gMDtcXG4zMzQxOlxcdFxcbjMzNDI6XFx0XFx0aWYgKCFzay1cXHUwMDNlc2tfYnlwYXNzX3Byb3RfbWVtKSB7XFxuMzM0MzpcXHRcXHRcXHRza19tZW1vcnlfYWxsb2NhdGVkX2FkZChzaywgYW10KTtcXG4zMzQ0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IHNrX21lbW9yeV9hbGxvY2F0ZWQoc2spO1xcbjMzNDU6XFx0XFx0fVxcbjMzNDY6XFx0XFxuMzM0NzpcXHRcXHRpZiAobWVtX2Nncm91cF9za19lbmFibGVkKHNrKSkge1xcbjMzNDg6XFx0XFx0XFx0bWVtY2dfZW5hYmxlZCA9IHRydWU7XFxuMzM0OTpcXHRcXHRcXHRjaGFyZ2VkID0gbWVtX2Nncm91cF9za19jaGFyZ2Uoc2ssIGFtdCwgZ2ZwX21lbWNnX2NoYXJnZSgpKTtcXG4zMzUwOlxcdFxcdFxcdGlmICghY2hhcmdlZClcXG4zMzUxOlxcdFxcdFxcdFxcdGdvdG8gc3VwcHJlc3NfYWxsb2NhdGlvbjtcXG4zMzUyOlxcdFxcdH1cXG4zMzUzOlxcdFxcbjMzNTQ6XFx0XFx0aWYgKCFhbGxvY2F0ZWQpXFxuMzM1NTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzU2OlxcdFxcbjMzNTc6XFx0XFx0LyogVW5kZXIgbGltaXQuICovXFxuMzM1ODpcXHRcXHRpZiAoYWxsb2NhdGVkIFxcdTAwM2M9IHNrX3Byb3RfbWVtX2xpbWl0cyhzaywgMCkpIHtcXG4zMzU5OlxcdFxcdFxcdHNrX2xlYXZlX21lbW9yeV9wcmVzc3VyZShzayk7XFxuMzM2MDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzYxOlxcdFxcdH1cXG4zMzYyOlxcdFxcbjMzNjM6XFx0XFx0LyogVW5kZXIgcHJlc3N1cmUuICovXFxuMzM2NDpcXHRcXHRpZiAoYWxsb2NhdGVkIFxcdTAwM2Ugc2tfcHJvdF9tZW1fbGltaXRzKHNrLCAxKSlcXG4zMzY1OlxcdFxcdFxcdHNrX2VudGVyX21lbW9yeV9wcmVzc3VyZShzayk7XFxuMzM2NjpcXHRcXG4zMzY3OlxcdFxcdC8qIE92ZXIgaGFyZCBsaW1pdC4gKi9cXG4zMzY4OlxcdFxcdGlmIChhbGxvY2F0ZWQgXFx1MDAzZSBza19wcm90X21lbV9saW1pdHMoc2ssIDIpKVxcbjMzNjk6XFx0XFx0XFx0Z290byBzdXBwcmVzc19hbGxvY2F0aW9uO1xcbjMzNzA6XFx0XFxuMzM3MTpcXHRcXHQvKiBHdWFyYW50ZWUgbWluaW11bSBidWZmZXIgc2l6ZSB1bmRlciBwcmVzc3VyZSAoZWl0aGVyIGdsb2JhbFxcbjMzNzI6XFx0XFx0ICogb3IgbWVtY2cpIHRvIG1ha2Ugc3VyZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gUkZDIDczMjMgKFRDUFxcbjMzNzM6XFx0XFx0ICogRXh0ZW5zaW9ucyBmb3IgSGlnaCBQZXJmb3JtYW5jZSkgd29yayBwcm9wZXJseS5cXG4zMzc0OlxcdFxcdCAqXFxuMzM3NTpcXHRcXHQgKiBUaGlzIHJ1bGUgZG9lcyBOT1Qgc3RhbmQgd2hlbiBleGNlZWRzIGdsb2JhbCBvciBtZW1jZydzIGhhcmRcXG4zMzc2OlxcdFxcdCAqIGxpbWl0LCBvciBlbHNlIGEgRG9TIGF0dGFjayBjYW4gYmUgdGFrZW4gcGxhY2UgYnkgc3Bhd25pbmdcXG4zMzc3OlxcdFxcdCAqIGxvdHMgb2Ygc29ja2V0cyB3aG9zZSB1c2FnZSBhcmUgdW5kZXIgbWluaW11bSBidWZmZXIgc2l6ZS5cXG4zMzc4OlxcdFxcdCAqL1xcbjMzNzk6XFx0XFx0aWYgKGtpbmQgPT0gU0tfTUVNX1JFQ1YpIHtcXG4zMzgwOlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2Mgc2tfZ2V0X3JtZW0wKHNrLCBwcm90KSlcXG4zMzgxOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjMzODI6XFx0XFxuMzM4MzpcXHRcXHR9IGVsc2UgaWYgKGtpbmQgPT0gU0tfTUVNX1NFTkQpIHtcXG4zMzg0OlxcdFxcdFxcdGludCB3bWVtMCA9IHNrX2dldF93bWVtMChzaywgcHJvdCk7XFxuMzM4NTpcXHRcXG4zMzg2OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xcbjMzODc6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza193bWVtX3F1ZXVlZCBcXHUwMDNjIHdtZW0wKVxcbjMzODg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuMzM4OTpcXHRcXHRcXHR9IGVsc2UgaWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNnNrLVxcdTAwM2Vza193bWVtX2FsbG9jKSBcXHUwMDNjIHdtZW0wKSB7XFxuMzM5MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4zMzkxOlxcdFxcdFxcdH1cXG4zMzkyOlxcdFxcdH1cXG4zMzkzOlxcdFxcbjMzOTQ6XFx0XFx0aWYgKHNrX2hhc19tZW1vcnlfcHJlc3N1cmUoc2spKSB7XFxuMzM5NTpcXHRcXHRcXHR1NjQgYWxsb2M7XFxuMzM5NjpcXHRcXG4zMzk3OlxcdFxcdFxcdC8qIFRoZSBmb2xsb3dpbmcgJ2F2ZXJhZ2UnIGhldXJpc3RpYyBpcyB3aXRoaW4gdGhlXFxuMzM5ODpcXHRcXHRcXHQgKiBzY29wZSBvZiBnbG9iYWwgYWNjb3VudGluZywgc28gaXQgb25seSBtYWtlc1xcbjMzOTk6XFx0XFx0XFx0ICogc2Vuc2UgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUuXFxuMzQwMDpcXHRcXHRcXHQgKi9cXG4zNDAxOlxcdFxcdFxcdGlmICghc2tfdW5kZXJfZ2xvYmFsX21lbW9yeV9wcmVzc3VyZShzaykpXFxuMzQwMjpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4zNDAzOlxcdFxcbjM0MDQ6XFx0XFx0XFx0LyogVHJ5IHRvIGJlIGZhaXIgYW1vbmcgYWxsIHRoZSBzb2NrZXRzIHVuZGVyIGdsb2JhbFxcbjM0MDU6XFx0XFx0XFx0ICogcHJlc3N1cmUgYnkgYWxsb3dpbmcgdGhlIG9uZXMgdGhhdCBiZWxvdyBhdmVyYWdlXFxuMzQwNjpcXHRcXHRcXHQgKiB1c2FnZSB0byByYWlzZS5cXG4zNDA3OlxcdFxcdFxcdCAqL1xcbjM0MDg6XFx0XFx0XFx0YWxsb2MgPSBza19zb2NrZXRzX2FsbG9jYXRlZF9yZWFkX3Bvc2l0aXZlKHNrKTtcXG4zNDA5OlxcdFxcdFxcdGlmIChza19wcm90X21lbV9saW1pdHMoc2ssIDIpIFxcdTAwM2UgYWxsb2MgKlxcbjM0MTA6XFx0XFx0XFx0ICAgIHNrX21lbV9wYWdlcyhzay1cXHUwMDNlc2tfd21lbV9xdWV1ZWQgK1xcbjM0MTE6XFx0XFx0XFx0XFx0XFx0IGF0b21pY19yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgK1xcbjM0MTI6XFx0XFx0XFx0XFx0XFx0IHNrLVxcdTAwM2Vza19mb3J3YXJkX2FsbG9jKSlcXG4zNDEzOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjM0MTQ6XFx0XFx0fVxcbjM0MTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjI4Ljk0MjYwOTM5N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTc0NjA5NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmV0L2lwdjQvdGNwLmNgIGZpbGUgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCB6ZXJvLWNvcHkgVENQIHJlY2VpdmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbWVjaGFuaWNzLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zLiBJJ2xsIHN0YXJ0IGJ5IHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgYGZpbmRfdGNwX3ZtYWAgZnVuY3Rpb24gd2l0aGluIHRoaXMgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgcGF0aCB6ZXJvLWNvcHkgdGFrZXMgb24gdGhlIHJlY2VpdmluZyBlbmQuIEkgZXhwZWN0IGBmaW5kX3RjcF92bWFgIGlzIGNyaXRpY2FsIHRvIGxvY2F0aW5nIHRoZSByZWxldmFudCBtZW1vcnkgbWFwIG9yIHZpcnR1YWwgbWVtb3J5IGFyZWEsIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHplcm8tY29weS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MzEuMTE3MjIyMDUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU5NjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX3RjcF92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MjIzOT1zdGF0aWMgdm9pZCB0Y3BfemNfZmluYWxpemVfcnhfdHN0YW1wKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyNjQtXFxubmV0L2lwdjQvdGNwLmM6MjI2NTpzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubmV0L2lwdjQvdGNwLmMtMjI2Ni1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMjkxPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjMzMS1cXG5uZXQvaXB2NC90Y3AuYzoyMzMyOlxcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVxcdTAwM2VtbSwgYWRkcmVzcywgXFx1MDAyNm1tYXBfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0yMzMzLVxcdGlmICghdm1hKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDozMS4xNjM4MjQ4NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcyNTQ5ODYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdGNwX3plcm9jb3B5X3JlY2VpdmVgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGF0dGVudGlvbidzIGJlZW4gZHJhd24gdG8gYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIEkgd2FudCB0byBnZXQgYSBjbG9zZXIgbG9vayBhdCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDIzMzAuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB6ZXJvLWNvcHkgaXMgYmVpbmcgaW1wbGVtZW50ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjcml0aWNhbCBsb2dpYyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuIExldCdzIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIHNjYXR0ZXItZ2F0aGVyLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGJ1ZmZlciByZWFzc2VtYmx5IGVmZmljaWVudGx5LCBvciBpZiB0aGVyZSBtaWdodCBiZSBzb21lIGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBleGFtaW5hdGlvbiBvZiBtZW1vcnkgYWRkcmVzc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgcGFydGljdWxhciBzcG90IGluIHRoZSBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgb3B0aW1hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MzUuODg5MzI2NjQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjg1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjg1OlxcdFxcdH1cXG4yMjg2OlxcdFxcdCptbWFwX2xvY2tlZCA9IHRydWU7XFxuMjI4NzpcXHRcXHRyZXR1cm4gdm1hO1xcbjIyODg6XFx0fVxcbjIyODk6XFx0XFxuMjI5MDpcXHQjZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcXG4yMjkxOlxcdHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbjIyOTI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG4yMjkzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXFxuMjI5NDpcXHR7XFxuMjI5NTpcXHRcXHR1MzIgbGVuZ3RoID0gMCwgb2Zmc2V0LCB2bWFfbGVuLCBhdmFpbF9sZW4sIGNvcHlsZW4gPSAwO1xcbjIyOTY6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpemMtXFx1MDAzZWFkZHJlc3M7XFxuMjI5NzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZXNbVENQX1pFUk9DT1BZX1BBR0VfQkFUQ0hfU0laRV07XFxuMjI5ODpcXHRcXHRzMzIgY29weWJ1Zl9sZW4gPSB6Yy1cXHUwMDNlY29weWJ1Zl9sZW47XFxuMjI5OTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4yMzAwOlxcdFxcdGNvbnN0IHNrYl9mcmFnX3QgKmZyYWdzID0gTlVMTDtcXG4yMzAxOlxcdFxcdHVuc2lnbmVkIGludCBwYWdlc190b19tYXAgPSAwO1xcbjIzMDI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuMjMwMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4yMzA0OlxcdFxcdHUzMiBzZXEgPSB0cC1cXHUwMDNlY29waWVkX3NlcTtcXG4yMzA1OlxcdFxcdHUzMiB0b3RhbF9ieXRlc190b19tYXA7XFxuMjMwNjpcXHRcXHRpbnQgaW5xID0gdGNwX2lucShzayk7XFxuMjMwNzpcXHRcXHRib29sIG1tYXBfbG9ja2VkO1xcbjIzMDg6XFx0XFx0aW50IHJldDtcXG4yMzA5OlxcdFxcbjIzMTA6XFx0XFx0emMtXFx1MDAzZWNvcHlidWZfbGVuID0gMDtcXG4yMzExOlxcdFxcdHpjLVxcdTAwM2Vtc2dfZmxhZ3MgPSAwO1xcbjIzMTI6XFx0XFxuMjMxMzpcXHRcXHRpZiAoYWRkcmVzcyBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fCBhZGRyZXNzICE9IHpjLVxcdTAwM2VhZGRyZXNzKVxcbjIzMTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjMxNTpcXHRcXG4yMzE2OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTilcXG4yMzE3OlxcdFxcdFxcdHJldHVybiAtRU5PVENPTk47XFxuMjMxODpcXHRcXG4yMzE5OlxcdFxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG4yMzIwOlxcdFxcbjIzMjE6XFx0XFx0aWYgKGlucSBcXHUwMDI2XFx1MDAyNiBpbnEgXFx1MDAzYz0gY29weWJ1Zl9sZW4pXFxuMjMyMjpcXHRcXHRcXHRyZXR1cm4gcmVjZWl2ZV9mYWxsYmFja190b19jb3B5KHNrLCB6YywgaW5xLCB0c3MpO1xcbjIzMjM6XFx0XFxuMjMyNDpcXHRcXHRpZiAoaW5xIFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuMjMyNTpcXHRcXHRcXHR6Yy1cXHUwMDNlbGVuZ3RoID0gMDtcXG4yMzI2OlxcdFxcdFxcdHpjLVxcdTAwM2VyZWN2X3NraXBfaGludCA9IGlucTtcXG4yMzI3OlxcdFxcdFxcdGlmICghaW5xIFxcdTAwMjZcXHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4yMzI4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjIzMjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjMzMDpcXHRcXHR9XFxuMjMzMTpcXHRcXG4yMzMyOlxcdFxcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVxcdTAwM2VtbSwgYWRkcmVzcywgXFx1MDAyNm1tYXBfbG9ja2VkKTtcXG4yMzMzOlxcdFxcdGlmICghdm1hKVxcbjIzMzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjMzNTpcXHRcXG4yMzM2OlxcdFxcdHZtYV9sZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB6Yy1cXHUwMDNlbGVuZ3RoLCB2bWEtXFx1MDAzZXZtX2VuZCAtIGFkZHJlc3MpO1xcbjIzMzc6XFx0XFx0YXZhaWxfbGVuID0gbWluX3QodTMyLCB2bWFfbGVuLCBpbnEpO1xcbjIzMzg6XFx0XFx0dG90YWxfYnl0ZXNfdG9fbWFwID0gYXZhaWxfbGVuIFxcdTAwMjYgfihQQUdFX1NJWkUgLSAxKTtcXG4yMzM5OlxcdFxcdGlmICh0b3RhbF9ieXRlc190b19tYXApIHtcXG4yMzQwOlxcdFxcdFxcdGlmICghKHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUF9SRUNFSVZFX1pFUk9DT1BZX0ZMQUdfVExCX0NMRUFOX0hJTlQpKVxcbjIzNDE6XFx0XFx0XFx0XFx0emFwX3ZtYV9yYW5nZSh2bWEsIGFkZHJlc3MsIHRvdGFsX2J5dGVzX3RvX21hcCk7XFxuMjM0MjpcXHRcXHRcXHR6Yy1cXHUwMDNlbGVuZ3RoID0gdG90YWxfYnl0ZXNfdG9fbWFwO1xcbjIzNDM6XFx0XFx0XFx0emMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50ID0gMDtcXG4yMzQ0OlxcdFxcdH0gZWxzZSB7XFxuMjM0NTpcXHRcXHRcXHR6Yy1cXHUwMDNlbGVuZ3RoID0gYXZhaWxfbGVuO1xcbjIzNDY6XFx0XFx0XFx0emMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50ID0gYXZhaWxfbGVuO1xcbjIzNDc6XFx0XFx0fVxcbjIzNDg6XFx0XFx0cmV0ID0gMDtcXG4yMzQ5OlxcdFxcdHdoaWxlIChsZW5ndGggKyBQQUdFX1NJWkUgXFx1MDAzYz0gemMtXFx1MDAzZWxlbmd0aCkge1xcbjIzNTA6XFx0XFx0XFx0aW50IG1hcHBhYmxlX29mZnNldDtcXG4yMzUxOlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjIzNTI6XFx0XFxuMjM1MzpcXHRcXHRcXHRpZiAoemMtXFx1MDAzZXJlY3Zfc2tpcF9oaW50IFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuMjM1NDpcXHRcXHRcXHRcXHR1MzIgb2Zmc2V0X2ZyYWc7XFxuMjM1NTpcXHRcXG4yMzU2OlxcdFxcdFxcdFxcdGlmIChza2IpIHtcXG4yMzU3OlxcdFxcdFxcdFxcdFxcdGlmICh6Yy1cXHUwMDNlcmVjdl9za2lwX2hpbnQgXFx1MDAzZSAwKVxcbjIzNTg6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjM1OTpcXHRcXHRcXHRcXHRcXHRza2IgPSBza2ItXFx1MDAzZW5leHQ7XFxuMjM2MDpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgPSBzZXEgLSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcTtcXG4yMzYxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM2MjpcXHRcXHRcXHRcXHRcXHRza2IgPSB0Y3BfcmVjdl9za2Ioc2ssIHNlcSwgXFx1MDAyNm9mZnNldCk7XFxuMjM2MzpcXHRcXHRcXHRcXHR9XFxuMjM2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6MzUuODg5NjQyNTQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg5MTE1NzUxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGFuZCBaZXJvLUNvcHkgVk1BcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIHRoZSBmaXJzdCB0aGluZyBpdCBkb2VzIGlzIGNhbGwgYGZpbmRfdGNwX3ZtYShjdXJyZW50LVx1MDAzZW1tLCBhZGRyZXNzLCBcdTAwMjZtbWFwX2xvY2tlZClgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQgbmVlZHMgdG8gZmluZCB0aGUgcmVsZXZhbnQgVk1BLiBOb3csIGxldCdzIGRpZyBpbnRvIGBmaW5kX3RjcF92bWFgLiBBaGEsIGhlcmUncyBgdGNwX3pjX3ZtYV92YWxpZGA6XG5cbmBgYGNcbnN0YXRpYyBib29sIHRjcF96Y192bWFfdmFsaWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxue1xuXHRjb25zdCBzdHJ1Y3QgdGNwX3pjX3ZtYSAqemNfdm1hID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcblxuXHRyZXR1cm4gdm1hLVx1MDAzZXZtX29wcyA9PSBcdTAwMjZ0Y3Bfdm1fb3BzIFx1MDAyNlx1MDAyNiB6Y192bWEgXHUwMDI2XHUwMDI2IHpjX3ZtYS1cdTAwM2VtbSA9PSBtbTtcbn1cbmBgYFxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgc2VlIHRoYXQgdGhlIGB6Y192bWFgJ3MgYG1tYCBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGN1cnJlbnQgcHJvY2VzcydzIG1lbW9yeSBtYW5hZ2VyLiBCdXQsIGlzIHRoZSBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBWTUEgKGB6Y192bWEtXHUwMDNlc2tgKSBnZXR0aW5nIHZlcmlmaWVkIGhlcmU/IEhtbSwgbm8sIEkgZG9uJ3Qgc2VlIGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBUaGUgY2hlY2sgZm9yIGB2bWEtXHUwMDNldm1fb3BzID09IFx1MDAyNnRjcF92bV9vcHNgIGFuZCBgemNfdm1hIFx1MDAyNlx1MDAyNiB6Y192bWEtXHUwMDNlbW0gPT0gbW1gIGlzIGluIHBsYWNlLCBidXQgc2hvdWxkIHdlIGJlIGFsc28gYXNzZXJ0aW5nIHRoYXQgYHpjX3ZtYS1cdTAwM2VzayA9PSBza2AgdG8gZW5zdXJlIHRoaXMgVk1BIGJlbG9uZ3MgdG8gdGhpcyBzb2NrZXQ/IEl0IGZlZWxzIGxpa2Ugd2UgY291bGQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBpZiB0aGlzIGlzbid0IGNvcnJlY3RseSB2YWxpZGF0ZWQuXG5cbk9rYXksIGxldCBtZSBicm9hZGVuIG15IHNlYXJjaCBub3cuIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgemNfdm1hYCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSdsbCBzZWFyY2ggZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIGB6Y192bWFgIGFuZCBpdHMgbWVtYmVycywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgY29uZmlybSBpZiBzdWNoIGEgY2hlY2sgaXMgcmVhbGx5IG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGVyZSBpdCBuZWVkcyB0byBiZSBwbGFjZWQuIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoIHRvIHNlZSB3aGVyZSBpdCdzIGFsbCBkZWZpbmVkIGFuZCB1c2VkIHRvIG1hcCB0aGUgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQ4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6NDQuODAxMjIwMDk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUyMjM2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjX3ZtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xODU4PXZvaWQgdGNwX3NldF9yY3ZidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTg2My0jaWZkZWYgQ09ORklHX01NVVxcbm5ldC9pcHY0L3RjcC5jOjE4NjQ6c3RydWN0IHRjcF96Y192bWEge1xcbm5ldC9pcHY0L3RjcC5jLTE4NjUtXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE4ODY9c3RhdGljIGludCB0Y3BfemNfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTA3LVxcbm5ldC9pcHY0L3RjcC5jOjE5MDg6c3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm5ldC9pcHY0L3RjcC5jLTE5MDkte1xcbm5ldC9pcHY0L3RjcC5jOjE5MTA6XFx0c3RydWN0IHRjcF96Y192bWEgKnpjX3ZtYSA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbm5ldC9pcHY0L3RjcC5jLTE5MTEtXFxubmV0L2lwdjQvdGNwLmM6MTkxMjpcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250KTtcXG5uZXQvaXB2NC90Y3AuYy0xOTEzLX1cXG5uZXQvaXB2NC90Y3AuYy0xOTE0LVxcbm5ldC9pcHY0L3RjcC5jOjE5MTU6c3RhdGljIHZvaWQgdGNwX3pjX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5uZXQvaXB2NC90Y3AuYy0xOTE2LXtcXG5uZXQvaXB2NC90Y3AuYzoxOTE3OlxcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG5uZXQvaXB2NC90Y3AuYy0xOTE4LVxcbm5ldC9pcHY0L3RjcC5jOjE5MTk6XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2emNfdm1hLVxcdTAwM2VyZWZjbnQpKSB7XFxubmV0L2lwdjQvdGNwLmM6MTkyMDpcXHRcXHR0Y3BfemNfbWVtX3VuY2hhcmdlKHpjX3ZtYS1cXHUwMDNlc2ssIHpjX3ZtYS1cXHUwMDNlbnJfcGFnZXMpO1xcbm5ldC9pcHY0L3RjcC5jOjE5MjE6XFx0XFx0bW1kcm9wKHpjX3ZtYS1cXHUwMDNlbW0pO1xcbm5ldC9pcHY0L3RjcC5jOjE5MjI6XFx0XFx0c29ja19wdXQoemNfdm1hLVxcdTAwM2Vzayk7XFxubmV0L2lwdjQvdGNwLmM6MTkyMzpcXHRcXHRrZnJlZSh6Y192bWEpO1xcbm5ldC9pcHY0L3RjcC5jLTE5MjQtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHRjcF92bV9vcHMgPSB7XFxubmV0L2lwdjQvdGNwLmM6MTkyODpcXHQub3BlbiA9IHRjcF96Y192bWFfb3BlbixcXG5uZXQvaXB2NC90Y3AuYzoxOTI5OlxcdC5jbG9zZSA9IHRjcF96Y192bWFfY2xvc2UsXFxubmV0L2lwdjQvdGNwLmMtMTkzMC19O1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTkzMj1pbnQgdGNwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xOTM0LXtcXG5uZXQvaXB2NC90Y3AuYzoxOTM1OlxcdHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWE7XFxubmV0L2lwdjQvdGNwLmMtMTkzNi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTk0NS1cXHRucl9wYWdlcyA9ICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxubmV0L2lwdjQvdGNwLmM6MTk0NjpcXHR6Y192bWEgPSBrbWFsbG9jX29iaigqemNfdm1hLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm5ldC9pcHY0L3RjcC5jOjE5NDc6XFx0aWYgKCF6Y192bWEpXFxubmV0L2lwdjQvdGNwLmMtMTk0OC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvaXB2NC90Y3AuYy0xOTQ5LVxcbm5ldC9pcHY0L3RjcC5jOjE5NTA6XFx0emNfdm1hLVxcdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xcbm5ldC9pcHY0L3RjcC5jOjE5NTE6XFx0emNfdm1hLVxcdTAwM2VtbSA9IHZtYS1cXHUwMDNldm1fbW07XFxubmV0L2lwdjQvdGNwLmM6MTk1MjpcXHR6Y192bWEtXFx1MDAzZXNrID0gc29jay1cXHUwMDNlc2s7XFxubmV0L2lwdjQvdGNwLmM6MTk1MzpcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnpjX3ZtYS1cXHUwMDNlcmVmY250LCAxKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU0OlxcdG1tZ3JhYih6Y192bWEtXFx1MDAzZW1tKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU1OlxcdHNvY2tfaG9sZCh6Y192bWEtXFx1MDAzZXNrKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU2OlxcdGlmICh0Y3BfemNfbWVtX2NoYXJnZSh6Y192bWEtXFx1MDAzZXNrLCBucl9wYWdlcykpIHtcXG5uZXQvaXB2NC90Y3AuYzoxOTU3OlxcdFxcdG1tZHJvcCh6Y192bWEtXFx1MDAzZW1tKTtcXG5uZXQvaXB2NC90Y3AuYzoxOTU4OlxcdFxcdHNvY2tfcHV0KHpjX3ZtYS1cXHUwMDNlc2spO1xcbm5ldC9pcHY0L3RjcC5jOjE5NTk6XFx0XFx0a2ZyZWUoemNfdm1hKTtcXG5uZXQvaXB2NC90Y3AuYy0xOTYwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTk2My1cXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZ0Y3Bfdm1fb3BzO1xcbm5ldC9pcHY0L3RjcC5jOjE5NjQ6XFx0dm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSB6Y192bWE7XFxubmV0L2lwdjQvdGNwLmMtMTk2NS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5NjctXFxubmV0L2lwdjQvdGNwLmM6MTk2ODpzdGF0aWMgYm9vbCB0Y3BfemNfdm1hX3ZhbGlkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm5ldC9pcHY0L3RjcC5jLTE5NjktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5uZXQvaXB2NC90Y3AuYy0xOTcwLXtcXG5uZXQvaXB2NC90Y3AuYzoxOTcxOlxcdGNvbnN0IHN0cnVjdCB0Y3BfemNfdm1hICp6Y192bWEgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG5uZXQvaXB2NC90Y3AuYy0xOTcyLVxcbm5ldC9pcHY0L3RjcC5jOjE5NzM6XFx0cmV0dXJuIHZtYS1cXHUwMDNldm1fb3BzID09IFxcdTAwMjZ0Y3Bfdm1fb3BzIFxcdTAwMjZcXHUwMDI2IHpjX3ZtYSBcXHUwMDI2XFx1MDAyNiB6Y192bWEtXFx1MDAzZW1tID09IG1tO1xcbm5ldC9pcHY0L3RjcC5jLTE5NzQtfVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjI2NT1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMjcxLVxcdGlmICh2bWEpIHtcXG5uZXQvaXB2NC90Y3AuYzoyMjcyOlxcdFxcdGlmICghdGNwX3pjX3ZtYV92YWxpZCh2bWEsIG1tKSkge1xcbm5ldC9pcHY0L3RjcC5jLTIyNzMtXFx0XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMjgxLVxcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpO1xcbm5ldC9pcHY0L3RjcC5jOjIyODI6XFx0aWYgKCF2bWEgfHwgIXRjcF96Y192bWFfdmFsaWQodm1hLCBtbSkpIHtcXG5uZXQvaXB2NC90Y3AuYy0yMjgzLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNDo0Ni40NTM0NjU0NjFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE5NDA4NTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoIGFuZCBTYW5pdGl6ZXIgVXNhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LiBGaXJzdCwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IHdlIG5lZWQgdG8gYmUgcHJlY2lzZS4gVGhlIGNydWNpYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTiBpcyB0aGUga2V5IGhlcmUuIFN0YW5kYXJkIEtBU0FOIGNvbmZpZ3VyYXRpb25zLCBsaWtlIHRoZSB1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcgd2UncmUgbGlrZWx5IHVzaW5nLCBhcmUgYWxyZWFkeSByb2J1c3QuIFRoZXkgZ2l2ZSB1cyBhIGZ1bGwgc3VpdGUgb2YgZGVidWcgdG9vbHMg4oCTIEtBU0FOJ3Mgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4sIExPQ0tERVAgZm9yIGxvY2tpbmcgaXNzdWVzLCB0aGUgVUIgc2FuaXRpemVycywgYW5kIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBsYXNlci1mb2N1c2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlLlxuXG5UaGUgZnVuZGFtZW50YWwgcnVsZSB0aGF0IGxlYXBzIG91dDogaWYgS0FTQU4gb3IgYW55IG9mIHRoZSBvdGhlciBzdGFuZGFyZCBkZXRlY3RvcnMgY2FuIGNhdGNoIHRoZSBidWcsIEtNU0FOIGlzIHN1cGVyZmx1b3VzLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIHJlc291cmNlcy5cblxuTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGFib3V0IHNvY2tldCBhY2NvdW50aW5nIGFuZCB6ZXJvLWNvcHkgcmVjZWl2ZSBWTUFzLlxuXG4xLiAgSXQncyBpbnRyb2R1Y2luZyBgU0tfTUVNX1JFQ1ZfWkVST0NPUFlgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhpcyBpcyBhYm91dCB0cmFja2luZy4gV2UndmUgZ290IHRoZSBhZGRpdGlvbiB0byBgc29jay5oYCBhbmQgdGhlIHJlbGV2YW50IHRyYWNlIGV2ZW50cy5cblxuMi4gIFdpdGhpbiBgX19za19tZW1fcmFpc2VfYWxsb2NhdGVkYCwgdGhpcyBuZXcgYFNLX01FTV9SRUNWX1pFUk9DT1BZYCBpcyBzcGVjaWZpY2FsbHkgKmF2b2lkaW5nKiB0aGUgYFNLX01FTV9TRU5EYCBicmFuY2guIEludGVyZXN0aW5nLCBpdCdzIGRpdmVydGluZyBzb21lIHNvcnQgb2YgbG9naWMuXG5cbjMuICBUaGUgYHRjcF9tbWFwYCBmdW5jdGlvbiBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB3ZSdyZSBzZWVpbmcgYWxsb2NhdGlvbiBvZiBhIGBzdHJ1Y3QgdGNwX3pjX3ZtYWAuIEl0J3MgdXNpbmcgYGttYWxsb2Nfb2JqYC4gV2FpdCBhIHNlY29uZCEgSSBuZWVkIHRvIGJlIHN1cmU7IGxldCBtZSBnbyBzdHJhaWdodCB0byB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgaG93IGBrbWFsbG9jX29iamAgd29ya3MuIFdoYXQgYXJlIHRoZSBhbGxvY2F0aW9uIGNoYXJhY3RlcmlzdGljcz8gSXMgaXQgZ29pbmcgdG8gZG8gc29tZXRoaW5nIHRoYXQgS0FTQU4gb3IgS01TQU4gd2lsbCBiZSB0cmlnZ2VyZWQgYnk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjM0OjUwLjY0NzU1MzU4M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTc4NzMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGttYWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzM9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyMy0gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTI0OiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjUtXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzUtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzNjojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzctXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgQ09VTlQpXFxuLS1cXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxcbmxpYi9kZWNvbXByZXNzX3VueHouYzoxNjQ6I2RlZmluZSBrbWFsbG9jX29iaih0eXBlKSBtYWxsb2Moc2l6ZW9mKHR5cGUpKVxcbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjUtI2RlZmluZSBrZnJlZShwdHIpIGZyZWUocHRyKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19hcnJheSh1bnNpZ25lZCBuLCBzaXplX3QgcywgZ2ZwX3QgZ2ZwKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo2ODojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjktXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSksIDApKVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6NzE6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzItXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSkgKiAoQ09VTlQpLCAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzQ6NTIuMjAzMzQ1NTY3WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1MDA3MTA2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdGNwX3pjX3ZtYWAgU3RydWN0dXJlIGFuZCBaZXJvLUNvcHkgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBgc3RydWN0IHRjcF96Y192bWFgLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uLCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBucl9wYWdlc2AsIGBtbWAsIGByZWZjbnRgLCBhbmQgYHNrYC4gIE5vdywgSSdtIGNoZWNraW5nIGhvdyBpdCdzIGluaXRpYWxpemVkIGluIGB0Y3BfbW1hcGAuICBUaGUgYGttYWxsb2Nfb2JqYCBjYWxsIHN1Z2dlc3RzIGFsbG9jYXRpb24sIGFuZCB0aGUgc3Vic2VxdWVudCBhc3NpZ25tZW50cyB0byBlYWNoIGZpZWxkIChgbnJfcGFnZXNgLCBgbW1gLCBgc2tgKSBhbG9uZyB3aXRoIHRoZSBgcmVmY291bnRfc2V0YCBjYWxsIGNvbmZpcm1zIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGFsbCBpdHMgbWVtYmVycyEgVGhhdCdzIGdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUncyBwYWRkaW5nLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaWYgdW5pbml0aWFsaXplZCBkYXRhIHdlcmUgcmVhZC4gT24gYW1kNjQsIGJhc2VkIG9uIHRoZSBrbm93biBzaXplcyBvZiB0aG9zZSBtZW1iZXJzLCBJIGNhbiBzZWU6IGBucl9wYWdlc2AgaXMgOCBieXRlcywgYG1tYCBpcyA4IGJ5dGVzLCBgcmVmY250YCBpcyA0IGJ5dGVzLCBzbyB0aGVyZSBpcyBwYWRkaW5nIG9mIDQgYnl0ZXMsIGJlZm9yZSB0aGUgOCBieXRlcyBvZiBgc2tgLiBUaGlzIHN1bXMgdXAgdG8gYSB0b3RhbCBvZiAzMiBieXRlcyBmb3IgdGhlIHN0cnVjdC5cblxuTXkga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IG9mIHRoaXMgYHpjX3ZtYWAgZGF0YSBnZXRzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiAgSXQgYXBwZWFycyB0aGlzIHN0cnVjdHVyZSBpcyBlbnRpcmVseSBrZXJuZWwtaW50ZXJuYWwuIEl0J3Mgc3RvcmVkIGluIGB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhYCwgd2hpY2ggc2VlbXMgc2FmZSwgZnJvbSBhIGN1cnNvcnkgaW5zcGVjdGlvbi4gSSdtIHNlZWluZyBpdCdzIGFjY2Vzc2VkIHdpdGhpbiBgdGNwX3pjX3ZtYV9vcGVuYCwgYHRjcF96Y192bWFfY2xvc2VgLCBhbmQgYHRjcF96Y192bWFfdmFsaWRgLCBhbmQgdGhlIGNvZGUgSSdtIHJldmlld2luZyBtYWtlcyBubyBtZW50aW9uIG9mIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0IHRvIHVzZXIgc3BhY2UuIFRoZSBhY2Nlc3NlcyBsb29rIGNvbnRyb2xsZWQsIGFuZCB0aGUgcmVmY291bnQgbWFuYWdlbWVudCBhbmQgY2xlYW51cCBpbiBgdGNwX3pjX3ZtYV9jbG9zZWAgbG9vayBjb3JyZWN0LiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBoZXJlIVxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJ20gZm9jdXNpbmcgb24gemVyby1jb3B5IG9wZXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gc29ja2V0IHJlY2VpdmUgYnVmZmVycy4gSSdtIGxvb2tpbmcgYXQgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgcGFnZXMgZ2V0IG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgdmlhIG1lY2hhbmlzbXMgbGlrZSBgemFwX3ZtYV9yYW5nZWAgYW5kIGB2bV9pbnNlcnRfcGFnZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZmluZF90Y3Bfdm1hYCBkb2VzIG5vdCBieXBhc3MgY2hlY2tzIGZvciB0aGlzIG1hcHBpbmcuXG5cblRoZSBjaGFuZ2UgaW4gYGZpbmRfdGNwX3ZtYWAgaXMgdGhlIGNyaXRpY2FsIHBvaW50LiAgVGhlIGNvZGUgbm93IHVzZXMgYHRjcF96Y192bWFfdmFsaWRgLiAgVGhhdCdzIGEgdmVyeSBnb29kIGNoZWNrOiBgdm1hLVx1MDAzZXZtX29wcyA9PSBcdTAwMjZ0Y3Bfdm1fb3BzIFx1MDAyNlx1MDAyNiB6Y192bWEgXHUwMDI2XHUwMDI2IHpjX3ZtYS1cdTAwM2VtbSA9PSBtbWAuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IFZNQSB0eXBlLCB0aGF0IHdlIGhhdmUgdmFsaWQgcHJpdmF0ZSBkYXRhIChgemNfdm1hYCksIGFuZCB0aGF0IGl0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgYG1tYC5cblxuQWxzbywgSSBzZWUgdGhlIGFkZGl0aW9uYWwgZmxhZ3MgYFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORGAgc2V0IGluIGB0Y3BfbW1hcGAsIHdoaWNoIGFyZSBnb29kIGZvciB6ZXJvLWNvcHkuXG5cbkZpbmFsbHksIHJlZ2FyZGluZyBtZW1vcnkgY2hhcmdpbmcvdW5jaGFyZ2luZywgYHRjcF96Y19tZW1fY2hhcmdlYCBhbmQgYHRjcF96Y19tZW1fdW5jaGFyZ2VgIGNhbGwgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAgYW5kIGBfX3NrX21lbV9yZWR1Y2VfYWxsb2NhdGVkYC4gSSdtIHZlcmlmeWluZyB0aGUgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gSSdtIGNoZWNraW5nIHRoYXQgd2hlbiBga2luZCA9PSBTS19NRU1fUkVDVl9aRVJPQ09QWWAsIHRoZSBsb2dpYyBiZWhhdmVzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBieXBhc3MgYW55IGNoZWNrcy4gVGhlcmUgYXJlIG5vIHJlbGV2YW50IGJyYW5jaCBjb25kaXRpb25zIEkgc2VlIHRvIGNoZWNrIGZvciB0aGlzIHNwZWNpZmljIGNhc2UuIEkgd2lsbCBjaGVjayBmb3IgYW55IHRyYWNlIGV2ZW50cyBmb3IgdGhlIGJ1ZmZlciBsaW1pdHMgaW4gdGhlIGtlcm5lbC4gSSB3aWxsIHNlYXJjaCBmb3IgdGhlIHVzZXMgb2YgYHNrbWVtX2tpbmRfbmFtZXNgIHRvIHNlZS4gVGhpcyBjb25maXJtcyB0aGUgbGltaXRzIGFyZSBiZWluZyByZXNwZWN0ZWQuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGVybXMgb2YgbWVtb3J5IGV4cG9zdXJlLiBJJ3ZlIGZvY3VzZWQgb24gemVyby1jb3B5IGFzcGVjdHMgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGtleSBjaGVja3MgYXJlIGluIHBsYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MzU6MDEuNzA0MDU5NTkyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza21lbV9raW5kX25hbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtMzgtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oOjM5OiNkZWZpbmUgc2ttZW1fa2luZF9uYW1lc1xcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtNDAtXFx0XFx0RU0oU0tfTUVNX1NFTkQpXFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oPTUyPXRjcF9zdGF0ZV9uYW1lc1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo1Mzpza21lbV9raW5kX25hbWVzXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTU0LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTY4LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo2OTojZGVmaW5lIHNob3dfc2ttZW1fa2luZF9uYW1lcyh2YWwpXFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaDo3MDpcXHRfX3ByaW50X3N5bWJvbGljKHZhbCwgc2ttZW1fa2luZF9uYW1lcylcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmgtNzEtXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg9OTQ9VFJBQ0VfRVZFTlQoc29ja19leGNlZWRfYnVmX2xpbWl0LFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvc29jay5oLTEzNi1cXHRcXHRfX2VudHJ5LVxcdTAwM2V3bWVtX3F1ZXVlZCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9zb2NrLmg6MTM3OlxcdFxcdHNob3dfc2ttZW1fa2luZF9uYW1lcyhfX2VudHJ5LVxcdTAwM2VraW5kKVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3NvY2suaC0xMzgtXFx0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNTowMS43NTA1NDkwNzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjcyNzQ2ODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0cmFjZSBldmVudHMgYXJlIGRlZmluZWQsIHNvIHdlJ3JlIGdvb2QgdGhlcmU7IG5vIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIHdlJ3JlIG5vdCBmYWxsaW5nIGludG8gYSBLTVNBTi13b3J0aHkgc2l0dWF0aW9uLiBXZSBuZWVkIHRvIGNoZWNrIHRob3NlIGZvdXIgY3JpdGVyaWEsIGFuZCBJIGNhbiBzYXkgd2l0aCBjb25maWRlbmNlIHRoYXQgbm9uZSBvZiB0aGVtIGFyZSB0cmlnZ2VyZWQgaGVyZS5cblxuKiAgICoqQ3JpdGVyaW9uIDE6KiogTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZTsgc28sIG5vIHdvcnJpZXMgYWJvdXQgdW5pbml0aWFsaXplZCBmaWVsZHMgbGVha2luZyBvdXQuXG4qICAgKipDcml0ZXJpb24gMjoqKiBBbGwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHVzZS4gTm8gZGVwZW5kZW5jeSBvbiBwb3RlbnRpYWxseSBnYXJiYWdlIHZhbHVlcy5cbiogICAqKkNyaXRlcmlvbiAzOioqIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRlZCBpcyBgc3RydWN0IHRjcF96Y192bWFgLiBBbmQgaXQncyB0aG9yb3VnaGx5IGluaXRpYWxpemVkIOKAkyBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IHNldCBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uLiBObyBjaGFuY2Ugb2YgbGF0ZXIgY29kZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGl0LlxuKiAgICoqQ3JpdGVyaW9uIDQ6KiogVGhpcyBwYXRjaCBkb2Vzbid0IGFsdGVyIGFueSBidWZmZXIgYWNjZXNzIGxvZ2ljIGluIGEgd2F5IHRoYXQgcmlza3MgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBJdCBmb2N1c2VzIG9uIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGZvciBUQ1AgemVyb2NvcHkgcmVjZWl2ZSBWTUFzLlxuXG5XaGF0IGFib3V0IG90aGVyIHJpc2tzPyBSZWZjb3VudGluZywgVk1BIGxpZmVjeWNsZSwgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLiBCdXQgSSdtIGNvbmZpZGVudCB0aG9zZSBhcmUgYmVpbmcgYWRkcmVzc2VkIGJ5IEtBU0FOLCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbG9ja2RlcCwgcGFnZSBhbGxvY2F0b3IgY2hlY2tzLCBhbmQgVUJTQU4vV0FSTl9PTi4gVGhlc2UgYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLiBLTVNBTiB3b3VsZG4ndCBvZmZlciBhbnkgc3BlY2lmaWMgYmVuZWZpdCBoZXJlIHRoYXQgS0FTQU4gd291bGRuJ3QgYWxyZWFkeSBjb3Zlci5cblxuSSdtIGZvbGxvd2luZyB0aGUgZXhwbGljaXQgZ3VpZGFuY2U6IFRoZXJlJ3Mgbm8gcG9pbnQgaW4gcnVubmluZyBhIEtNU0FOIHNlc3Npb24gaWYgdGhlIGJ1Z3MgY2FuIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gV2UgYXJlIHNhZmUuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCByZWZjb3VudGluZywgVk1BIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIGFuZCByZWxhdGVkIGlzc3Vlcywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSB0aG9zZSB0b29scy4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB3ZSdyZSB0b3VjaGluZyBvciBpbnRyb2R1Y2luZyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgYmVpbmcgaW50cm9kdWNlZCBoZXJlLlxuXG5TbywgKk5lZWRzS01TQU49ZmFsc2UqIGlzIHRoZSBjb3JyZWN0IGNhbGwuIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjAxLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzozNTowOC40NzgwMzM3ODFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGxpZmVjeWNsZSB0cmFja2luZyBmb3IgVENQIHplcm9jb3B5IHJlY2VpdmUgVk1BcyAoc3RydWN0IHRjcF96Y192bWEpLiBUaGUgb25seSBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmUgaXMgc3RydWN0IHRjcF96Y192bWEsIHdoZXJlIGFsbCBtZW1iZXIgZmllbGRzIChucl9wYWdlcywgbW0sIHNrLCByZWZjbnQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24gdmlhIGttYWxsb2Nfb2JqLiBUaGUgc3RydWN0dXJlIGlzIHB1cmVseSBrZXJuZWwtaW50ZXJuYWwgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHJlZmVyZW5jZSBjb3VudGluZywgbWVtb3J5IGFjY291bnRpbmcsIG9yIFZNQSBsaWZlY3ljbGUvdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBsaWZlY3ljbGUgdHJhY2tpbmcgZm9yIFRDUCB6ZXJvY29weSByZWNlaXZlIFZNQXMgKHN0cnVjdCB0Y3BfemNfdm1hKS4gVGhlIG9ubHkgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlIGlzIHN0cnVjdCB0Y3BfemNfdm1hLCB3aGVyZSBhbGwgbWVtYmVyIGZpZWxkcyAobnJfcGFnZXMsIG1tLCBzaywgcmVmY250KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uIHZpYSBrbWFsbG9jX29iai4gVGhlIHN0cnVjdHVyZSBpcyBwdXJlbHkga2VybmVsLWludGVybmFsIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHJlbGF0ZSB0byByZWZlcmVuY2UgY291bnRpbmcsIG1lbW9yeSBhY2NvdW50aW5nLCBvciBWTUEgbGlmZWN5Y2xlL3VzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgcmF0aGVyIHRoYW4gS01TQU4uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[1] Phase: Succeeded StartedAt: 2026-09-15 03:35:19 +0000 UTC FinishedAt: 2026-09-15 03:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 03:35:19 +0000 UTC FinishedAt: 2026-09-15 03:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2] Phase: Succeeded StartedAt: 2026-09-15 03:35:19 +0000 UTC FinishedAt: 2026-09-15 04:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-15 03:35:19 +0000 UTC FinishedAt: 2026-09-15 04:10:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 03:35:19 +0000 UTC FinishedAt: 2026-09-15 03:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 03:35:19 +0000 UTC FinishedAt: 2026-09-15 03:35:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-convert-artifact-1867261472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 03:35:29 +0000 UTC FinishedAt: 2026-09-15 03:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 03:35:29 +0000 UTC FinishedAt: 2026-09-15 03:51:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*50bf9560-2c99-4244-8f4e-647e51d59ead,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-convert-artifact-1867261472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a7799273-f302-451a-af2d-fea670fd1765", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-build-action-2260534502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 03:35:29 +0000 UTC FinishedAt: 2026-09-15 03:51:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*50bf9560-2c99-4244-8f4e-647e51d59ead,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-convert-artifact-1867261472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a7799273-f302-451a-af2d-fea670fd1765", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-build-action-2260534502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 03:51:27 +0000 UTC FinishedAt: 2026-09-15 03:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 03:51:27 +0000 UTC FinishedAt: 2026-09-15 03:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 03:51:27 +0000 UTC FinishedAt: 2026-09-15 03:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 03:51:27 +0000 UTC FinishedAt: 2026-09-15 03:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-convert-artifact-2810167879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 03:51:37 +0000 UTC FinishedAt: 2026-09-15 03:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 03:51:37 +0000 UTC FinishedAt: 2026-09-15 03:53:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a7799273-f302-451a-af2d-fea670fd1765,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-build-action-2260534502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 03:53:43 +0000 UTC FinishedAt: 2026-09-15 03:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 03:53:43 +0000 UTC FinishedAt: 2026-09-15 03:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 03:53:43 +0000 UTC FinishedAt: 2026-09-15 04:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 03:53:43 +0000 UTC FinishedAt: 2026-09-15 04:09:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*50bf9560-2c99-4244-8f4e-647e51d59ead,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-convert-artifact-2810167879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "22eb85f1-b8a0-44b2-9db3-53c366ba7b32", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-build-action-2287731147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 03:53:43 +0000 UTC FinishedAt: 2026-09-15 04:09:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*50bf9560-2c99-4244-8f4e-647e51d59ead,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-convert-artifact-2810167879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "22eb85f1-b8a0-44b2-9db3-53c366ba7b32", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-build-action-2287731147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 04:09:46 +0000 UTC FinishedAt: 2026-09-15 04:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 04:09:46 +0000 UTC FinishedAt: 2026-09-15 04:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Failed StartedAt: 2026-09-15 04:09:46 +0000 UTC FinishedAt: 2026-09-15 04:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_mmap","tcp_zc_vma_open","tcp_zc_vma_close","tcp_zc_mem_charge","tcp_zc_mem_uncharge","tcp_zerocopy_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MMU"],"series_id":"e368a81f-631d-4d2a-86da-8b3bb3d7b3db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Failed StartedAt: 2026-09-15 04:09:46 +0000 UTC FinishedAt: 2026-09-15 04:09:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*22eb85f1-b8a0-44b2-9db3-53c366ba7b32,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gvp9/series-workflow8gvp9-build-action-2287731147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil