Name: series-workflow5t98g Phase: Succeeded StartedAt: 2026-09-07 04:29:54 +0000 UTC FinishedAt: 2026-09-07 08:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[0] Phase: Succeeded StartedAt: 2026-09-07 04:29:54 +0000 UTC FinishedAt: 2026-09-07 04:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 04:29:54 +0000 UTC FinishedAt: 2026-09-07 04:51:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_DIGITAL", "NFC_SIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_DIGITAL", "NFC_SIM" ], "series_id": "74cb49d2-c597-4d56-ae04-02da483eea00" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_llcp_recv_hdlc", "nfc_llcp_recv_dm", "nfc_llcp_rx_skb", "nfc_llcp_recv", "nfc_llcp_data_received" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfRElHSVRBTCYjMzQ7LAogICAgJiMzNDtORkNfU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZjX2xsY3BfcmVjdl9oZGxjJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3JlY3ZfZG0mIzM0OywKICAgICYjMzQ7bmZjX2xsY3Bfcnhfc2tiJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3JlY3YmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfZGF0YV9yZWNlaXZlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBza2IgbGVuZ3RoIGJvdW5kcyBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSBiZWZvcmUgYWNjZXNzaW5nIGJ5dGUgb2Zmc2V0IDIgKHNrYi1cdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFja2V0IGxlbmd0aCBib3VuZGFyeSBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIG1hbGZvcm1lZCBMTENQIHBhY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gdGhlIE5GQyBMTENQIGxheWVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgTkZDIGRyaXZlcnMgKGUuZy4gbmZjc2ltKSBhbmQgQUZfTkZDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNzkxOWQ1MDA1ZTRhMWZjNWI0OWRlYzE4Zjc4YWRiMjY0NDZkNDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDo1MDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuaW5kZXggY2FjMWI1NDg3MDY0ZC4uODlkNmY0NTk5ZTExYSAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcbkBAIC0xMDc3LDYgJiM0MzsxMDc3LDEyIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIFx0cHR5cGUgPSBuZmNfbGxjcF9wdHlwZShza2IpO1xuIFx0ZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTtcbiBcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XG4mIzQzO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICYjNDM7IExMQ1BfU0VRVUVOQ0VfU0laRSkge1xuJiM0MztcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRucyA9IG5mY19sbGNwX25zKHNrYik7XG4gXHRuciA9IG5mY19sbGNwX25yKHNrYik7XG4gXG5AQCAtMTI1NCw2ICYjNDM7MTI2MCwxMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gXG4gXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuIFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgMSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRyZWFzb24gPSBza2ItXHUwMDNlZGF0YVsyXTtcbiBcbiBcdHByX2RlYnVnKFwmIzM0OyVkICVkIHJlYXNvbiAlZFxcblwmIzM0Oywgc3NhcCwgZHNhcCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX0RJR0lUQUwmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX3JlY3ZfaGRsYyYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2X2RtJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3J4X3NrYiYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2JiMzNDssCiAgICAmIzM0O25mY19sbGNwX2RhdGFfcmVjZWl2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYWNrZXQgbGVuZ3RoIGJvdW5kYXJ5IGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3NpbmcgbWFsZm9ybWVkIExMQ1AgcGFja2V0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiB0aGUgTkZDIExMQ1AgbGF5ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBORkMgZHJpdmVycyAoZS5nLiBuZmNzaW0pIGFuZCBBRl9ORkMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3OTE5ZDUwMDVlNGExZmM1YjQ5ZGVjMThmNzhhZGIyNjQ0NmQ0NDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA0OjUwOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX2NvcmUuYyBiL25ldC9uZmMvbGxjcF9jb3JlLmMKaW5kZXggY2FjMWI1NDg3MDY0ZC4uODlkNmY0NTk5ZTExYSAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3BfY29yZS5jCkBAIC0xMDc3LDYgJiM0MzsxMDc3LDEyIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLAogCXB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTsKIAlkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpOwogCXNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7CiYjNDM7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKSB7CiYjNDM7CQluZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlucyA9IG5mY19sbGNwX25zKHNrYik7CiAJbnIgPSBuZmNfbGxjcF9ucihza2IpOwogCkBAIC0xMjU0LDYgJiM0MzsxMjYwLDEwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwKIAogCWRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7CiAJc3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTExDUF9IRUFERVJfU0laRSAmIzQzOyAxKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXJlYXNvbiA9IHNrYi0mZ3Q7ZGF0YVsyXTsKIAogCXByX2RlYnVnKCYjMzQ7JWQgJWQgcmVhc29uICVkXG4mIzM0Oywgc3NhcCwgZHNhcCwgcmVhc29uKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5OQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMTENQIENvcmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBicmVha2luZyBkb3duIHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmZjL2xsY3BfY29yZS5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCB0aGUgcGFja2V0IGhhbmRsaW5nIGluIGBuZmNfbGxjcF9yZWN2X2hkbGNgIGFuZCBgbmZjX2xsY3BfcmVjdl9kbWAuIEdvb2QuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGV5JiMzOTt2ZSBhZGRlZCBsZW5ndGggY2hlY2tzIHRvIHRoZSBpbmNvbWluZyBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIFNwZWNpZmljYWxseSwgdGhleSBhcmUgZW5zdXJpbmcgdGhhdCB0aGUgcmVjZWl2ZWQgcGFja2V0IG1lZXRzIGEgbWluaW11bSBsZW5ndGggcmVxdWlyZW1lbnQuIEl0IG1ha2VzIHNlbnNlOyB3ZSB3YW50IHRvIHZhbGlkYXRlIHRoZSByZWNlaXZlZCBmcmFtZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbS4KClRoZSBjb2RlIHNuaXBwZXRzIHNob3cgY2hlY2tzIGxpa2UgYHNrYi0mZ3Q7bGVuICZsdDsgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkVgIGFuZCBgc2tiLSZndDtsZW4gJmx0OyBMTENQX0hFQURFUl9TSVpFICYjNDM7IDFgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGZvciBwYWNrZXRzIHRoYXQgYXQgbGVhc3QgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGhlYWRlciBhbmQgZWl0aGVyIHNlcXVlbmNlIG51bWJlcnMgb3IganVzdCBhIHNpbmdsZSBieXRlIG9mIGRhdGEsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gSWYgdGhlIHBhY2tldCBpcyB0b28gc2hvcnQsIHRoZSBjb2RlIG5vdyBzZWVtcyB0byBiZSBzZW5kaW5nIGJhY2sgYSBETSAoRGlzY29ubmVjdCBNb2RlKSBmcmFtZSB3aXRoIGEgYE5PQ09OTmAgcmVhc29uLiBUaGlzIGlzIGEgc2Vuc2libGUgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSByZXN0IG9mIGBuZXQvbmZjL2xsY3BfY29yZS5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZXNlIGBza2JgIHN0cnVjdHVyZXMgYXJlIHVzZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBuZXcgY2hlY2tzIGRvbiYjMzk7dCBicmVhayBhbnkgdmFsaWQsIGJ1dCBwcmV2aW91c2x5IG92ZXJsb29rZWQsIGNhc2VzLiBBcmUgd2UgcG90ZW50aWFsbHkgcmVqZWN0aW5nIHZhbGlkLCBidXQgbWluaW1hbGx5IHNpemVkLCBMTENQIGZyYW1lcz8gT3IgYXJlIHdlLCBhcyBJIHN1c3BlY3QsIGp1c3QgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IHRyeSB0byBkZXJlZmVyZW5jZSBpbnZhbGlkIG1lbW9yeT8KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9uZmMvYCB0byB1bmRlcnN0YW5kIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIE5GQyBhbmQgTExDUC4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFzIHRvIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgdGhpcyBsZW5ndGggY2hlY2sgaXMgYmVpbmcgYXBwbGllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbjEwNzE6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuMTA3NDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTA3NTpcdFx0dTggZHNhcCwgc3NhcCwgcHR5cGUsIG5zLCBucjtcbjEwNzY6XHRcbjEwNzc6XHRcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcbjEwNzg6XHRcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4xMDc5Olx0XHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuMTA4MDpcdFxuMTA4MTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XG4xMDgyOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwODM6XHRcdFx0cmV0dXJuO1xuMTA4NDpcdFx0fVxuMTA4NTpcdFxuMTA4NjpcdFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xuMTA4NzpcdFx0bnIgPSBuZmNfbGxjcF9ucihza2IpO1xuMTA4ODpcdFxuMTA4OTpcdFx0cHJfZGVidWcoXCYjMzQ7JWQgJWQgUiAlZCBTICVkXFxuXCYjMzQ7LCBkc2FwLCBzc2FwLCBuciwgbnMpO1xuMTA5MDpcdFxuMTA5MTpcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xuMTA5MjpcdFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XG4xMDkzOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwOTQ6XHRcdFx0cmV0dXJuO1xuMTA5NTpcdFx0fVxuMTA5NjpcdFxuMTA5NzpcdFx0c2sgPSBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2s7XG4xMDk4Olx0XHRsb2NrX3NvY2soc2spO1xuMTA5OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4xMTAwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMTAxOlx0XHRcdG5mY19sbGNwX3NvY2tfcHV0KGxsY3Bfc29jayk7XG4xMTAyOlx0XHRcdHJldHVybjtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdC8qIFBhc3MgdGhlIHBheWxvYWQgdXBzdHJlYW0gKi9cbjExMDY6XHRcdGlmIChwdHlwZSA9PSBMTENQX1BEVV9JKSB7XG4xMTA3Olx0XHRcdHByX2RlYnVnKFwmIzM0O0kgZnJhbWUsIHF1ZXVlaW5nIG9uICVwXFxuXCYjMzQ7LCBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2spO1xuMTEwODpcdFxuMTEwOTpcdFx0XHRpZiAobnMgPT0gbGxjcF9zb2NrLVx1MDAzZXJlY3ZfbilcbjExMTA6XHRcdFx0XHRsbGNwX3NvY2stXHUwMDNlcmVjdl9uID0gKGxsY3Bfc29jay1cdTAwM2VyZWN2X24gJiM0MzsgMSkgJSAxNjtcbjExMTE6XHRcdFx0ZWxzZVxuMTExMjpcdFx0XHRcdHByX2VycihcJiMzNDtSZWNlaXZlZCBvdXQgb2Ygc2VxdWVuY2UgSSBQRFVcXG5cJiMzNDspO1xuMTExMzpcdFxuMTExNDpcdFx0XHRza2JfcHVsbChza2IsIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKTtcbjExMTU6XHRcdFx0aWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2IoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZXNrLCBza2IpKSB7XG4xMTE2Olx0XHRcdFx0LypcbjExMTc6XHRcdFx0XHQgKiBJIGZyYW1lcyB3aWxsIGJlIGZyZWVkIGZyb20gdGhlIHNvY2tldCBsYXllciwgc28gd2VcbjExMTg6XHRcdFx0XHQgKiBuZWVkIHRvIGtlZXAgdGhlbSBhbGl2ZSB1bnRpbCBzb21lb25lIHJlY2VpdmVzIHRoZW0uXG4xMTE5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3BfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjQ1Olx0XG4xMjQ2Olx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ09OTkVDVEVEO1xuMTI0NzpcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbjEyNDg6XHRcbjEyNDk6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMjUwOlx0XG4xMjUxOlx0XHRuZmNfbGxjcF9zb2NrX3B1dChsbGNwX3NvY2spO1xuMTI1MjpcdH1cbjEyNTM6XHRcbjEyNTQ6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4xMjU1Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTI1NjpcdHtcbjEyNTc6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XG4xMjU4Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4xMjU5Olx0XHR1OCBkc2FwLCBzc2FwLCByZWFzb247XG4xMjYwOlx0XG4xMjYxOlx0XHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuMTI2MjpcdFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbjEyNjM6XHRcbjEyNjQ6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICYjNDM7IDEpXG4xMjY1Olx0XHRcdHJldHVybjtcbjEyNjY6XHRcbjEyNjc6XHRcdHJlYXNvbiA9IHNrYi1cdTAwM2VkYXRhWzJdO1xuMTI2ODpcdFxuMTI2OTpcdFx0cHJfZGVidWcoXCYjMzQ7JWQgJWQgcmVhc29uICVkXFxuXCYjMzQ7LCBzc2FwLCBkc2FwLCByZWFzb24pO1xuMTI3MDpcdFxuMTI3MTpcdFx0c3dpdGNoIChyZWFzb24pIHtcbjEyNzI6XHRcdGNhc2UgTExDUF9ETV9OT0JPVU5EOlxuMTI3MzpcdFx0Y2FzZSBMTENQX0RNX1JFSjpcbjEyNzQ6XHRcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3BfY29ubmVjdGluZ19zb2NrX2dldChsb2NhbCwgZHNhcCk7XG4xMjc1Olx0XHRcdGJyZWFrO1xuMTI3NjpcdFxuMTI3NzpcdFx0ZGVmYXVsdDpcbjEyNzg6XHRcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xuMTI3OTpcdFx0XHRicmVhaztcbjEyODA6XHRcdH1cbjEyODE6XHRcbjEyODI6XHRcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xuMTI4MzpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtBbHJlYWR5IGNsb3NlZFxcblwmIzM0Oyk7XG4xMjg0Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5GQ1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA5Olx0XHRkZWZhdWx0IG5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcbiAgMTI6XHRcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgbmZjLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBORkNfRElHSVRBTFxuICAxODpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgMTk6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgMjA6XHRcdHNlbGVjdCBDUkNfSVRVX1RcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGRlZmF1bHQgblxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBidWlsZCBORkMgZGlnaXRhbCBwcm90b2NvbCBzdGFjayBzdXBwb3J0LlxuICAyNTpcdFx0ICBUaGlzIGlzIG5lZWRlZCBieSBORkMgY2hpcHNldHMgd2hvc2UgZmlybXdhcmUgb25seSBpbXBsZW1lbnRcbiAgMjY6XHRcdCAgdGhlIE5GQyBhbmFsb2cgbGF5ZXIuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMjk6XHRcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxuICAzMDpcdFxuICAzMTpcdHNvdXJjZSBcJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnXCYjMzQ7XG4gIDMyOlx0c291cmNlIFwmIzM0O25ldC9uZmMvaGNpL0tjb25maWdcJiMzNDtcbiAgMzM6XHRcbiAgMzQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGxsY3BfY29yZS5jIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBsbGNwX2NvcmUuY2Agd2l0aGluIHRoZSBgbmV0L25mYy9gIGRpcmVjdG9yeS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgdGhlcmUuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2FyeSBmb3IgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBpbmNsdWRlIHBhdGhzIGFyZSBzZXQsIHdoYXQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIG1pZ2h0IGJlIGluIHBsYXkgKGxpa2UgZmVhdHVyZSBmbGFncyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBzZXR0aW5ncyksIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcyBiYXNlZCBvbiBrZXJuZWwgdmVyc2lvbnMgb3Igb3RoZXIgZmFjdG9ycy4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBkaXJlY3RseSBhZmZlY3QgYGxsY3BfY29yZS5jYCYjMzk7cyBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xuICAgNzpcdG9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xuICAgODpcdG9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuICAgOTpcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbiAgMTA6XHRcbiAgMTE6XHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbiAgMTI6XHRcdFx0bGxjcF9zb2NrLm9cbiAgMTM6XHRcbiAgMTQ6XHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjE2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5GQyAmYW1wOyBMTENQIEZ1enppbmcgUm9hZG1hcCoqCgpPa2F5LCBzbyBgbGxjcF9jb3JlLm9gIGlzIGJ1aWx0IGludG8gYG5mYy5vYCB3aGVuIHdlJiMzOTt2ZSBnb3QgYENPTkZJR19ORkNgIGVuYWJsZWQg4oCTIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgd2UgY2FuIHBva2UgYW5kIHByb2QgYXQgdGhlIE5GQyBhbmQgTExDUCBsYXllcnMgZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCkNhbiB3ZSBnZW5lcmF0ZSB2aXJ0dWFsIE5GQyBkZXZpY2VzLCBMTENQIHNvY2tldHMsIG9yIGV2ZW4gc3RpbXVsYXRlIGFjdGl2aXR5IHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQsIGlkZWFsbHkgbGV2ZXJhZ2luZyBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXI/IFRoZSBhbnN3ZXIsIHRoYW5rZnVsbHksIHNlZW1zIHRvIGJlIHllcyEgU3l6a2FsbGVyIGl0c2VsZiBwcm92aWRlcyBzb21lIGludGVyZXN0aW5nIE5GQyB2aXJ0dWFsIGRldmljZXMgYW5kIGRyaXZlcnMg4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoaW5ncyBsaWtlIGB2aXJ0dWFsIG5mY3NpbWAgd2hpY2ggdGllcyBpbiB3aXRoIGBDT05GSUdfTkZDX1NJTWAgb3IgcG9zc2libHkgZGlyZWN0IGFjY2VzcyB0aHJvdWdoIHJhdyBzb2NrL0xMQ1Agc29ja2V0cyBvciBuZXRsaW5rLiBOb3csIHRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgaG93IHRvIGxldmVyYWdlIHRob3NlIHJlc291cmNlcy4gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZmMvYCBhbmQgYG5ldC9uZmMvYCBkaXJlY3RvcmllcyBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHJvdXRlIHRvIGlkZW50aWZ5aW5nIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1ldGhvZHMgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZjX2xsY3BfcmVjdl9oZGxjfG5mY19sbGNwX3JlY3ZfZG0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmM9MTA0Mj1pbnQgbmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDY5LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMDcwOnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDcxLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTIwOT1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2NjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjUzLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjU0OnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTI1NS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNDkyPXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzMi1cdFx0cHJfZGVidWcoXCYjMzQ7RE1cXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNTMzOlx0XHRuZmNfbGxjcF9yZWN2X2RtKGxvY2FsLCBza2IpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNTM0LVx0XHRicmVhaztcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDQtXHRcdHByX2RlYnVnKFwmIzM0O0kgZnJhbWVcXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNTQ1Olx0XHRuZmNfbGxjcF9yZWN2X2hkbGMobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYG5mY19sbGNwX3J4X3NrYmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgYG5mY19sbGNwX3J4X3NrYmAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBORkMgc3RhY2suIFRoaXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgcmVjZWl2ZWQgU0tCcyBhcmUgaGFuZGxlZCBpbiBMTENQLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcCwgYnV0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29kZWJhc2UsIEkgbWlnaHQgbmVlZCB0byBsZXZlcmFnZSBzb21lIG1vcmUgc29waGlzdGljYXRlZCBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgY3JpdGljYWwgaGFuZGxlciBmb3IgaW5jb21pbmcgZGF0YSwgc28gaWRlbnRpZnlpbmcgYWxsIHRoZSB1cHN0cmVhbSBwcm9jZXNzaW5nIHN0ZXBzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIHRyYWNlIGhlcmUgd2lsbCBxdWlja2x5IGV4cG9zZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3J4X3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvcmUuYz0yMT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxsY3BfZGV2aWNlc19sb2NrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQtXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNDQ4PXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfYWdmKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDgzLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDg0Olx0XHRuZmNfbGxjcF9yeF9za2IobG9jYWwsIG5ld19za2IpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNDg1LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ5MS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTQ5MjpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ5My17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNTU1PXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3MC1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTU3MTpcdG5mY19sbGNwX3J4X3NrYihsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVidWdnaW5nIE5ldHdvcmsgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgcnhfd29ya2AgZnVuY3Rpb24gaXMgYmVpbmcgc2NoZWR1bGVkLCBvciB3aGVyZSB0aGUgYGxsY3BfY29yZWAgZW50cnlwb2ludHMgYXJlIGxvY2F0ZWQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgbmV0d29yayBzdGFjayBhbmFseXNpcywgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY3JpdGljYWwgcG9pbnRzIG9mIHByb2Nlc3NpbmcgZm9yIGluY29taW5nIHBhY2tldHMsIHBlcmhhcHMgbG9va2luZyBmb3Iga2VybmVsIG1vZHVsZSBob29rcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IHRoZSBwYWNrZXRzIGFyZSByZWNlaXZlZCwgcXVldWVkLCBhbmQgdWx0aW1hdGVseSBwcm9jZXNzZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZXMgdG8gbG9vayBmb3IgY2FsbHMgb3IgcmVmZXJlbmNlcyB0byB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRyaWdnZXJzIHRoZWlyIGV4ZWN1dGlvbiBhbmQgZnJvbSB3aGVyZS4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGludGVycnVwdCBoYW5kbGVycyBvciB0aW1lcnMgaW52b2x2ZWQsIHRvby4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvaGNpL2NvcmUuYz02Mz1zdGF0aWMgdm9pZCBuZmNfaGNpX21zZ190eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTI1LVxubmV0L25mYy9oY2kvY29yZS5jOjEyNjpzdGF0aWMgdm9pZCBuZmNfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMjcte1xubmV0L25mYy9oY2kvY29yZS5jLTEyOC1cdHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2hjaV9kZXYsXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTI5Olx0XHRcdFx0XHRcdG1zZ19yeF93b3JrKTtcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMzAtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz04NTQ9c3RhdGljIHZvaWQgbmZjX2hjaV9yZWN2X2Zyb21fbGxjKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTI2LVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZoZGV2LVx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XG5uZXQvbmZjL2hjaS9jb3JlLmM6OTI3Olx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9oY2kvY29yZS5jLTkyOC1cdH1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTAyMD1pbnQgbmZjX2hjaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xMDMxLVxubmV0L25mYy9oY2kvY29yZS5jOjEwMzI6XHRJTklUX1dPUksoXHUwMDI2aGRldi1cdTAwM2Vtc2dfcnhfd29yaywgbmZjX2hjaV9tc2dfcnhfd29yayk7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMTAzMy1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTA0MD12b2lkIG5mY19oY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xMDYxLVxubmV0L25mYy9oY2kvY29yZS5jOjEwNjI6XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9oY2kvY29yZS5jLTEwNjMtXG4tLVxubmV0L25mYy9sbGNwLmg9NTA9c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcbi0tXG5uZXQvbmZjL2xsY3AuaC02MC1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0IHR4X3dvcms7XG5uZXQvbmZjL2xsY3AuaDo2MTpcdHN0cnVjdCB3b3JrX3N0cnVjdFx0IHJ4X3dvcms7XG5uZXQvbmZjL2xsY3AuaC02Mi1cdHN0cnVjdCBza19idWZmICpyeF9wZW5kaW5nO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTYwPXN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2NS1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNldHhfd29yayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE2NjpcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNlcnhfd29yayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2Ny1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNldGltZW91dF93b3JrKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE0OTI9c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTU0LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTU1OnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTU2LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1Ny1cdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTU4Olx0XHRcdFx0XHRcdCAgICByeF93b3JrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1OS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNTc4PXN0YXRpYyB2b2lkIF9fbmZjX2xsY3BfcmVjdihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4Ni1cdHRpbWVyX2RlbGV0ZShcdTAwMjZsb2NhbC1cdTAwM2VsaW5rX3RpbWVyKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTU4NzpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG9jYWwtXHUwMDNlcnhfd29yayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1ODgtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTY2Mz1pbnQgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpuZGV2KVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTY4OS1cdGxvY2FsLVx1MDAzZXJ4X3BlbmRpbmcgPSBOVUxMO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNjkwOlx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNjkxLVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0zOT1zdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDpzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTQxLXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTU1ND1zdGF0aWMgaW50IG5jaV9jbG9zZV9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTYxNC1cbm5ldC9uZmMvbmNpL2NvcmUuYzo2MTU6XHQvKiByeF93b3JrIG1heSB0YWtlIHJlcV9sb2NrIHZpYSBuY2lfZGVhY3RpdmF0ZV90YXJnZXQgKi9cbm5ldC9uZmMvbmNpL2NvcmUuYy02MTYtXHRmbHVzaF93b3JrcXVldWUobmRldi1cdTAwM2VyeF93cSk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTYzMT1zdGF0aWMgdm9pZCBuY2lfZGF0YV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtNjM1LVx0c2V0X2JpdChOQ0lfREFUQV9FWENIQU5HRV9UTywgXHUwMDI2bmRldi1cdTAwM2VmbGFncyk7XG5uZXQvbmZjL25jaS9jb3JlLmM6NjM2Olx0cXVldWVfd29yayhuZGV2LVx1MDAzZXJ4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTYzNy19XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEyNTE9aW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNjYtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI2NzpcdElOSVRfV09SSyhcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmssIG5jaV9yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY4LVx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDslc19uY2lfcnhfd3FcJiMzNDssIGRldl9uYW1lKGRldikpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMzUxPWludCBuY2lfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM2Mi1cdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5kZXYtXHUwMDNlcnhfcSwgc2tiKTtcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzYzOlx0cXVldWVfd29yayhuZGV2LVx1MDAzZXJ4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTEzNjQtXG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTE1MjA9c3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTU4LVxubmV0L25mYy9uY2kvY29yZS5jOjE1NTk6c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9uY2kvY29yZS5jLTE1NjAte1xubmV0L25mYy9uY2kvY29yZS5jOjE1NjE6XHRzdHJ1Y3QgbmNpX2RldiAqbmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2Rldiwgcnhfd29yayk7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTU2Mi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9uY2kvZGF0YS5jPTI2PXZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25mYy9uY2kvZGF0YS5jLTQ4LVxubmV0L25mYy9uY2kvZGF0YS5jOjQ5Olx0LyogQ2xhaW0gY29tcGxldGlvbiBhdG9taWNhbGx5IC0tIGJvdGggY2xvc2UgYW5kIHJ4X3dvcmsgbWF5IHJhY2UgaGVyZSAqL1xubmV0L25mYy9uY2kvZGF0YS5jLTUwLVx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoTkNJX0RBVEFfRVhDSEFOR0UsIFx1MDAyNm5kZXYtXHUwMDNlZmxhZ3MpKSB7XG4tLVxubmV0L25mYy9uY2kvaGNpLmM9MzgyPXN0YXRpYyB2b2lkIG5jaV9oY2lfaGNwX21lc3NhZ2Vfcngoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDA0LVxubmV0L25mYy9uY2kvaGNpLmM6NDA1OnN0YXRpYyB2b2lkIG5jaV9oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9uY2kvaGNpLmMtNDA2LXtcbm5ldC9uZmMvbmNpL2hjaS5jLTQwNy1cdHN0cnVjdCBuY2lfaGNpX2RldiAqaGRldiA9XG5uZXQvbmZjL25jaS9oY2kuYzo0MDg6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2hjaV9kZXYsIG1zZ19yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQwOS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9uY2kvaGNpLmM9NDI3PXZvaWQgbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiKHZvaWQgKmNvbnRleHQsXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTAzLVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3F1ZXVlLCBoY3Bfc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjUwNDpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9uY2kvaGNpLmMtNTA1LVx0fVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTc4Nj1zdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzk0LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZGV2LVx1MDAzZXJ4X2hjcF9mcmFncyk7XG5uZXQvbmZjL25jaS9oY2kuYzo3OTU6XHRJTklUX1dPUksoXHUwMDI2aGRldi1cdTAwM2Vtc2dfcnhfd29yaywgbmNpX2hjaV9tc2dfcnhfd29yayk7XG5uZXQvbmZjL25jaS9oY2kuYy03OTYtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3F1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTExDUCBSZWNlaXZlIENhbGxzKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvd2VyIGxheWVycyBvZiB0aGUgTkZDIHN0YWNrIGhhbmRsZSBpbmNvbWluZyBMTENQIGRhdGEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsIHNpdGVzIGZvciBlaXRoZXIgYF9fbmZjX2xsY3BfcmVjdmAgb3IgYG5mY19sbGNwX3JlY3ZgLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3IgcmVjZWl2aW5nIExMQ1AgZnJhbWVzLiBLbm93aW5nIHdoZXJlIGl0JiMzOTtzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaW5jb21pbmcgZGF0YSBpcyByb3V0ZWQgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBwaW5wb2ludGluZyBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoaW4gdGhlIHJlY2VpdmUgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTIyMz1pbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG4tLVxubmV0L25mYy9sbGNwLmgtMjI2LS8qIENvbW1hbmRzIEFQSSAqL1xubmV0L25mYy9sbGNwLmg6MjI3OnZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcbm5ldC9uZmMvbGxjcC5oLTIyOC11OCAqbmZjX2xsY3BfYnVpbGRfdGx2KHU4IHR5cGUsIGNvbnN0IHU4ICp2YWx1ZSwgdTggdmFsdWVfbGVuZ3RoLCB1OCAqdGx2X2xlbmd0aCk7XG4tLVxubmV0L25mYy9sbGNwLmg9MjMzPXZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKnNkcF9oZWFkKTtcbm5ldC9uZmMvbGxjcC5oOjIzNDp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XG5uZXQvbmZjL2xsY3AuaC0yMzUtaW50IG5mY19sbGNwX3NlbmRfc3ltbShzdHJ1Y3QgbmZjX2RldiAqZGV2KTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0zNzE9aW50IG5mY19sbGNwX3NlbmRfc3ltbShzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM5OS1cdGVyciA9IG5mY19kYXRhX2V4Y2hhbmdlKGRldiwgbG9jYWwtXHUwMDNldGFyZ2V0X2lkeCwgc2tiLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDAwOlx0XHRcdFx0IG5mY19sbGNwX3JlY3YsIGxvY2FsKTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwMS1vdXQ6XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz03NjE9c3RhdGljIHZvaWQgbmZjX2xsY3BfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy03OTctXHRcdFx0cmV0ID0gbmZjX2RhdGFfZXhjaGFuZ2UobG9jYWwtXHUwMDNlZGV2LCBsb2NhbC1cdTAwM2V0YXJnZXRfaWR4LFxubmV0L25mYy9sbGNwX2NvcmUuYzo3OTg6XHRcdFx0XHRcdFx0c2tiLCBuZmNfbGxjcF9yZWN2LCBsb2NhbCk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTc5OS1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTg0OT1zdGF0aWMgY29uc3QgdTggKm5mY19sbGNwX2Nvbm5lY3Rfc24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90ICpzbl9sZW4pXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy04NzQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3NTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X3VpKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTg3Ni1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy05MTAtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjkxMTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtOTEyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTA0Mj1pbnQgbmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDY5LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMDcwOnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDcxLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE2My1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE2NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Rpc2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE2NS1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMDgtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyMDk6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjEwLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyNTMtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyNTQ6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjU1LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyOTUtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyOTY6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9zbmwoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTI5Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ0Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTQ0ODpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2FnZihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDQ5LXtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE0OTI9c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTEyLVx0XHRwcl9kZWJ1ZyhcJiMzNDtVSVxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MTM6XHRcdG5mY19sbGNwX3JlY3ZfdWkobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MTQtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxNy1cdFx0cHJfZGVidWcoXCYjMzQ7Q09OTkVDVFxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MTg6XHRcdG5mY19sbGNwX3JlY3ZfY29ubmVjdChsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxOS1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTIyLVx0XHRwcl9kZWJ1ZyhcJiMzNDtESVNDXFxuXCYjMzQ7KTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUyMzpcdFx0bmZjX2xsY3BfcmVjdl9kaXNjKGxvY2FsLCBza2IpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNTI0LVx0XHRicmVhaztcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjctXHRcdHByX2RlYnVnKFwmIzM0O0NDXFxuXCYjMzQ7KTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUyODpcdFx0bmZjX2xsY3BfcmVjdl9jYyhsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUyOS1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTMyLVx0XHRwcl9kZWJ1ZyhcJiMzNDtETVxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MzM6XHRcdG5mY19sbGNwX3JlY3ZfZG0obG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzQtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzNy1cdFx0cHJfZGVidWcoXCYjMzQ7U05MXFxuXCYjMzQ7KTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUzODpcdFx0bmZjX2xsY3BfcmVjdl9zbmwobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzktXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0NC1cdFx0cHJfZGVidWcoXCYjMzQ7SSBmcmFtZVxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1NDU6XHRcdG5mY19sbGNwX3JlY3ZfaGRsYyhsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0Ni1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTQ5LVx0XHRwcl9kZWJ1ZyhcJiMzNDtBR0YgZnJhbWVcXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNTUwOlx0XHRuZmNfbGxjcF9yZWN2X2FnZihsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1MS1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNTU1PXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTU3ODpzdGF0aWMgdm9pZCBfX25mY19sbGNwX3JlY3Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3OS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTg5LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTkwOnZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTkxLXtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1OTgtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1OTk6XHRfX25mY19sbGNwX3JlY3YobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2MDAtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTYwMj1pbnQgbmZjX2xsY3BfZGF0YV9yZWNlaXZlZChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTYxMjpcdF9fbmZjX2xsY3BfcmVjdihsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTkZDIExMQ1AgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiB0aGUgTkZDIExMQ1AgcHJvdG9jb2wgcHJvY2Vzc2luZyB3aXRoaW4gYG5mY19sbGNwX3JlY3ZfaGRsY2AgYW5kIGBuZmNfbGxjcF9yZWN2X2RtYC4gQmVmb3JlLCB3ZSB3ZXJlIGdyYWJiaW5nIHNlcXVlbmNlIGluZm9ybWF0aW9uIChgbnNgLCBgbnJgKSBhbmQgdGhlIERNIHJlYXNvbiBjb2RlIHdpdGhvdXQgcHJvcGVybHkgdmVyaWZ5aW5nIHRoZSBpbmNvbWluZyBTS0ImIzM5O3MgbGVuZ3RoLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IHBvaW50LgoKU28sIHRoZSBmaXggaW50cm9kdWNlcyBsZW5ndGggY2hlY2tzOiBlbnN1cmluZyBgc2tiLSZndDtsZW5gIGlzIHN1ZmZpY2llbnQgYmVmb3JlIGFjY2Vzc2luZyBkYXRhIGJleW9uZCB0aGUgaGVhZGVyLiBHb29kIGNhdGNoIOKAkyB0aGlzIGRpcmVjdGx5IGFkZHJlc3NlcyBhbiBpbXBvcnRhbnQgdnVsbmVyYWJpbGl0eSB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciwgd29yc2UsIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHJlYWRzLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gRmlyc3QsIHJlYWNoYWJpbGl0eS4gWWVzLCBhYnNvbHV0ZWx5LiBORkMgTExDUCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggTkZDIHNvY2tldHMgYW5kIHZhcmlvdXMgTkZDIGRyaXZlcnMsIGluY2x1ZGluZyB2aXJ0dWFsIG9uZXMuIEFuZCBTeXprYWxsZXIgaXMgYWxyZWFkeSB0YXJnZXRpbmcgdGhpcyBhcmVhISBUaGF0JiMzOTtzIGEgaHVnZSBncmVlbiBmbGFnLiBTZWNvbmQsIGV4ZWN1dGFibGUgY29kZTogZGVmaW5pdGVseSDigJMgaXQmIzM5O3MgcmlnaHQgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgcHJvdG9jb2wgc3RhY2sgd2l0aGluIGBuZXQvbmZjYC4gVGhpcmQsIGNvbnRyb2wgZmxvdy4gWWVzLCB0aGlzIHBhdGNoIGlzIGFkZGluZyBjaGVja3M7IGl0IGNoYW5nZXMgdGhlIHdheSB0aGUgY29kZSBoYW5kbGVzIGluY29taW5nIGRhdGEsIGFuZCB0aHVzIGFsdGVycyB0aGUgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBTS0IuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbj8gQmFzZWQgb24gcmVhY2hhYmlsaXR5LCB0aGUgYWRkaXRpb24gb2YgZGVmZW5zaXZlIGNoZWNrcywgYW5kIHRoZSBmYWN0IHRoaXMgaXMgaW4gY29yZSBuZXR3b3JraW5nLCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3MgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcy4gV2UgbmVlZCBgTkZDYCBlbmFibGVkLCB3aGljaCByZWxpZXMgb24gYFJGS0lMTGAuIEZyb20gdGhlcmUsIHdlIHdhbnQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGxpa2UgYENPTkZJR19ORkNfU0lNYCBvciBgQ09ORklHX05GQ19ESUdJVEFMYCBpbiB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIExMQ1AgYW5kIHZpcnR1YWwgTkZDIHRlc3RpbmcgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgdGVzdGluZy4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O05lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIE5GQ1xuICAgODpcdFxuICAgOTpcdGNvbmZpZyBORkNfVFJGNzk3MEFcbiAgMTA6XHRcdHRyaXN0YXRlIFwmIzM0O1RleGFzIEluc3RydW1lbnRzIFRSRjc5NzBhIE5GQyBkcml2ZXJcJiMzNDtcbiAgMTE6XHRcdGRlcGVuZHMgb24gU1BJIFx1MDAyNlx1MDAyNiBORkNfRElHSVRBTCBcdTAwMjZcdTAwMjYgR1BJT0xJQlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBORkMgZHJpdmVyIGZvciBUZXhhcyBJbnN0cnVtZW50cyYjMzk7IFRSRjc5NzBhXG4gIDE0Olx0XHQgIGRldmljZS4gU3VjaCBkZXZpY2Ugc3VwcG9ydHMgNSBkaWZmZXJlbnQgcHJvdG9jb2xzOiBJU08xNDQ0M0EsXG4gIDE1Olx0XHQgIElTTzE0NDQzQiwgRmVMaUNhLCBJU08xNTY5MyBhbmQgSVNPMTgwMDAtMy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIFRSRjc5NzBhIGludG8gdGhlIGtlcm5lbCBvclxuICAxODpcdFx0ICBzYXkgTSAgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAxOTpcdFx0ICB0cmY3OTcwYS5rby5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTkZDX01FSV9QSFlcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O01FSSBidXMgTkZDIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRkZXBlbmRzIG9uIElOVEVMX01FSSBcdTAwMjZcdTAwMjYgTkZDX0hDSVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCB0byB1c2UgYW4gbWVpIGJ1cyBuZmMgZGV2aWNlLiBTZWxlY3QgdGhpcyBpZiB5b3VcbiAgMjY6XHRcdCAgd2lsbCB1c2UgYW4gSENJIE5GQyBkcml2ZXIgZm9yIGFuIE5GQyBjaGlwIGNvbm5lY3RlZCBiZWhpbmQgYW5cbiAgMjc6XHRcdCAgSW50ZWwmIzM5O3MgTWFuYWdlbWVudCBFbmdpbmUgY2hpcC5cbiAgMjg6XHRcbiAgMjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgTkZDX1NJTVxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBkcml2ZXIgZGVjbGFyZXMgdHdvIHZpcnR1YWwgTkZDIGRldmljZXMgc3VwcG9ydGluZyBORkMtREVQXG4gIDM2Olx0XHQgIHByb3RvY29sLiBBbiBMTENQIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlbSBhbmRcbiAgMzc6XHRcdCAgYWxsIHBhY2tldHMgc2VudCBmcm9tIG9uZSBkZXZpY2UgaXMgc2VudCBiYWNrIHRvIHRoZSBvdGhlciwgYWN0aW5nIGFzXG4gIDM4Olx0XHQgIGxvb3BiYWNrIGRldmljZXMuXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDIyCgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDcyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBORkMgTExDUCBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIE5GQyBMTENQIGZ1enppbmcgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19ORkNgIGlzIHRoZSBrZXkgZW5hYmxlciBmb3IgYGxsY3BfY29yZS5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhpcy4gYENPTkZJR19ORkNfRElHSVRBTGAgYW5kIGBDT05GSUdfTkZDX1NJTWAgbG9vayBsaWtlIHZpcnR1YWwgZHJpdmVycyBzcGVjaWZpY2FsbHkgZm9yIGZ1enppbmcsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4KCkkgc3RhcnRlZCBieSBsb29raW5nIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBpdCBzZWVtcyB0byBiZSBgbmZjX2xsY3BfcmVjdl9oZGxjYCBhbmQgYG5mY19sbGNwX3JlY3ZfZG1gLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgc3RhdGljLCBzbyBJIGNoZWNrZWQgdGhlIGNvZGUgaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgLiBMaW5lIDEwNzAgY29uZmlybXMgYG5mY19sbGNwX3JlY3ZfaGRsY2AgaXMgc3RhdGljLCBhbmQgbGluZSAxMjU0IHNob3dzIGBuZmNfbGxjcF9yZWN2X2RtYCBpcyBhbHNvIHN0YXRpYy4gRXZlbiBzdGF0aWMgZnVuY3Rpb25zIGhhdmUgc3ltYm9scyBpbiB2bWxpbnV4LCBzbyBsZXQmIzM5O3Mga2VlcCBhbiBleWUgb24gdGhvc2UuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBhbnkgcmVsYXRlZCBlbnRyeSBwb2ludHMsIHNvIGBuZmNfbGxjcF9yeF9za2JgLCBgbmZjX2xsY3BfcmVjdmAgYW5kIGBuZmNfbGxjcF9kYXRhX3JlY2VpdmVkYCBjYXVnaHQgbXkgZXllLgoKTm93IEkgbmVlZCB0byBkZWNpZGUgaWYgdGhvc2UgYXJlIHN1aXRhYmxlIGBGb2N1c1N5bWJvbHNgLiBZZXMsIHRoZXkgYXJlIGZlYXR1cmUtc3BlY2lmaWMgYW5kIHBhdGNoZWQuIFRoZXJlZm9yZSwgdGhlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGluY2x1ZGU6IGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBgbmZjX2xsY3BfcmVjdl9kbWAsIGBuZmNfbGxjcF9yeF9za2JgLCBgbmZjX2xsY3BfZGF0YV9yZWNlaXZlZGAsIGFuZCBgbmZjX2xsY3BfcmVjdmAuCgpGb3IgdGhlIGBFbmFibGVDb25maWdzYCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgTkZDYCwgYE5GQ19ESUdJVEFMYCwgYW5kIGBORkNfU0lNYCBhcmUgdGhlIHJpZ2h0IG9uZXMuIEkgbmVlZGVkIHRvIHZlcmlmeSB0aGlzLiBDaGVja2luZyB0aGUgYG5ldC9uZmMvTWFrZWZpbGVgIGNvbmZpcm1zIHRoaXMuIGBvYmotJChDT05GSUdfTkZDKSAmIzQzOz0gbmZjLm9gIHRlbGxzIG1lIGBORkNgIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbW9kdWxlIHN1Z2dlc3RzIHRoYXQgYE5GQ19ESUdJVEFMYCBhbmQgYE5GQ19TSU1gIGFyZSB0aGUgdmlydHVhbCB0ZXN0IGVuYWJsZXJzLgoKRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSYjMzk7dmUgZm9sbG93ZWQgYWxsIG9mIHRoZSBzdGVwcyBpbiB0aGUgaW5zdHJ1Y3Rpb25zLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZToKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtuZmNfbGxjcF9yZWN2X2hkbGMmIzM0OywgJiMzNDtuZmNfbGxjcF9yZWN2X2RtJiMzNDssICYjMzQ7bmZjX2xsY3Bfcnhfc2tiJiMzNDssICYjMzQ7bmZjX2xsY3BfcmVjdiYjMzQ7LCAmIzM0O25mY19sbGNwX2RhdGFfcmVjZWl2ZWQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtORkMmIzM0OywgJiMzNDtORkNfRElHSVRBTCYjMzQ7LCAmIzM0O05GQ19TSU0mIzM0O11gCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgdW5kZXJzdGFuZGFibGUuCgpOb3cgSSYjMzk7bSByZWFkeSB0byBtYWtlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX0RJR0lUQUwmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX3JlY3ZfaGRsYyYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2X2RtJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3J4X3NrYiYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2JiMzNDssCiAgICAmIzM0O25mY19sbGNwX2RhdGFfcmVjZWl2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYWNrZXQgbGVuZ3RoIGJvdW5kYXJ5IGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3NpbmcgbWFsZm9ybWVkIExMQ1AgcGFja2V0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiB0aGUgTkZDIExMQ1AgbGF5ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBORkMgZHJpdmVycyAoZS5nLiBuZmNzaW0pIGFuZCBBRl9ORkMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19ESUdJVEFMJiMzNDssCiAgICAmIzM0O05GQ19TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZmNfbGxjcF9yZWN2X2hkbGMmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVjdl9kbSYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yeF9za2ImIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVjdiYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9kYXRhX3JlY2VpdmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFja2V0IGxlbmd0aCBib3VuZGFyeSBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIG1hbGZvcm1lZCBMTENQIHBhY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gdGhlIE5GQyBMTENQIGxheWVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgTkZDIGRyaXZlcnMgKGUuZy4gbmZjc2ltKSBhbmQgQUZfTkZDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3Npbmcgc2tiIGxlbmd0aCBib3VuZHMgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgYmVmb3JlIGFjY2Vzc2luZyBieXRlIG9mZnNldCAyIChza2ItXHUwMDNlZGF0YVsyXSkgZm9yIHNlcXVlbmNlIG51bWJlcnMgLyByZWFzb24gY29kZXMuIFRoZXNlIGNoYW5nZXMgZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkcyBvbiB0cnVuY2F0ZWQgTkZDIExMQ1AgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHNwYXRpYWwgbWVtb3J5IGVycm9ycyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc5MTlkNTAwNWU0YTFmYzViNDlkZWMxOGY3OGFkYjI2NDQ2ZDQ0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDQ6NTA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuYwppbmRleCBjYWMxYjU0ODcwNjRkLi44OWQ2ZjQ1OTllMTFhIDEwMDY0NAotLS0gYS9uZXQvbmZjL2xsY3BfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbGxjcF9jb3JlLmMKQEAgLTEwNzcsNiAmIzQzOzEwNzcsMTIgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsCiAJcHR5cGUgPSBuZmNfbGxjcF9wdHlwZShza2IpOwogCWRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7CiAJc3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkUpIHsKJiM0MzsJCW5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCW5zID0gbmZjX2xsY3BfbnMoc2tiKTsKIAluciA9IG5mY19sbGNwX25yKHNrYik7CiAKQEAgLTEyNTQsNiAmIzQzOzEyNjAsMTAgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLAogCiAJZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTsKIAlzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpOwomIzQzOwomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyBMTENQX0hFQURFUl9TSVpFICYjNDM7IDEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJcmVhc29uID0gc2tiLSZndDtkYXRhWzJdOwogCiAJcHJfZGVidWcoJiMzNDslZCAlZCByZWFzb24gJWRcbiYjMzQ7LCBzc2FwLCBkc2FwLCByZWFzb24pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxMQoJCQkJCQkJb3V0cHV0OiA4MAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoqKkFzc2Vzc2luZyB0aGUgTmVlZCBmb3IgS01TQU4gRnV6emluZyBvbiBUaGlzIFBhdGNoKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIEtNU0FOIGZ1enppbmcgaXMgd2FycmFudGVkIGZvciB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFyZWFzIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIGFuZCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEdpdmVuIHRoZSBkb21haW4sIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggc2hhcmVkIHJlc291cmNlcywgYnVmZmVycywgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgbmZjIHN1YnN5c3RlbSBpcywgb2YgY291cnNlLCBpbnRlcmVzdGluZy4KClRoZXJlZm9yZSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgbmV0L25mYy9sbGNwX2NvcmUuY2AuIEkmIzM5O2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbmF2aWdhdGUgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgYXJvdW5kIDEwNzcgYW5kIDEyNTQuIFRob3NlIGxpbmUgbnVtYmVycyBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIGxpa2VseSBpbmRpY2F0aXZlIG9mIGludGVyZXN0aW5nIGNvbnRyb2wgZmxvdyBvciBkYXRhIG1hbmlwdWxhdGlvbi4gSSYjMzk7bGwgcmVhZCB3aXRoIGFuIGV5ZSBmb3IgYW55IHBvaW50ZXIgYXJpdGhtZXRpYywgYnVmZmVyIGFjY2Vzc2VzLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBmb2N1c2luZyBvbiBob3cgZGF0YSBpcyBoYW5kbGVkIGFuZCBhbGxvY2F0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhIEtNU0FOIHJ1biB3b3VsZCBiZSBiZW5lZmljaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbjEwNzE6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuMTA3NDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTA3NTpcdFx0dTggZHNhcCwgc3NhcCwgcHR5cGUsIG5zLCBucjtcbjEwNzY6XHRcbjEwNzc6XHRcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcbjEwNzg6XHRcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4xMDc5Olx0XHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuMTA4MDpcdFxuMTA4MTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XG4xMDgyOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwODM6XHRcdFx0cmV0dXJuO1xuMTA4NDpcdFx0fVxuMTA4NTpcdFxuMTA4NjpcdFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xuMTA4NzpcdFx0bnIgPSBuZmNfbGxjcF9ucihza2IpO1xuMTA4ODpcdFxuMTA4OTpcdFx0cHJfZGVidWcoXCYjMzQ7JWQgJWQgUiAlZCBTICVkXFxuXCYjMzQ7LCBkc2FwLCBzc2FwLCBuciwgbnMpO1xuMTA5MDpcdFxuMTA5MTpcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xuMTA5MjpcdFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XG4xMDkzOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwOTQ6XHRcdFx0cmV0dXJuO1xuMTA5NTpcdFx0fVxuMTA5NjpcdFxuMTA5NzpcdFx0c2sgPSBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2s7XG4xMDk4Olx0XHRsb2NrX3NvY2soc2spO1xuMTA5OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4xMTAwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMTAxOlx0XHRcdG5mY19sbGNwX3NvY2tfcHV0KGxsY3Bfc29jayk7XG4xMTAyOlx0XHRcdHJldHVybjtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdC8qIFBhc3MgdGhlIHBheWxvYWQgdXBzdHJlYW0gKi9cbjExMDY6XHRcdGlmIChwdHlwZSA9PSBMTENQX1BEVV9JKSB7XG4xMTA3Olx0XHRcdHByX2RlYnVnKFwmIzM0O0kgZnJhbWUsIHF1ZXVlaW5nIG9uICVwXFxuXCYjMzQ7LCBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2spO1xuMTEwODpcdFxuMTEwOTpcdFx0XHRpZiAobnMgPT0gbGxjcF9zb2NrLVx1MDAzZXJlY3ZfbilcbjExMTA6XHRcdFx0XHRsbGNwX3NvY2stXHUwMDNlcmVjdl9uID0gKGxsY3Bfc29jay1cdTAwM2VyZWN2X24gJiM0MzsgMSkgJSAxNjtcbjExMTE6XHRcdFx0ZWxzZVxuMTExMjpcdFx0XHRcdHByX2VycihcJiMzNDtSZWNlaXZlZCBvdXQgb2Ygc2VxdWVuY2UgSSBQRFVcXG5cJiMzNDspO1xuMTExMzpcdFxuMTExNDpcdFx0XHRza2JfcHVsbChza2IsIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKTtcbjExMTU6XHRcdFx0aWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2IoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZXNrLCBza2IpKSB7XG4xMTE2Olx0XHRcdFx0LypcbjExMTc6XHRcdFx0XHQgKiBJIGZyYW1lcyB3aWxsIGJlIGZyZWVkIGZyb20gdGhlIHNvY2tldCBsYXllciwgc28gd2VcbjExMTg6XHRcdFx0XHQgKiBuZWVkIHRvIGtlZXAgdGhlbSBhbGl2ZSB1bnRpbCBzb21lb25lIHJlY2VpdmVzIHRoZW0uXG4xMTE5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI0NTpcdFxuMTI0NjpcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NPTk5FQ1RFRDtcbjEyNDc6XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4xMjQ4Olx0XG4xMjQ5Olx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTI1MDpcdFxuMTI1MTpcdFx0bmZjX2xsY3Bfc29ja19wdXQobGxjcF9zb2NrKTtcbjEyNTI6XHR9XG4xMjUzOlx0XG4xMjU0Olx0c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuMTI1NTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyNTY6XHR7XG4xMjU3Olx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuMTI1ODpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTI1OTpcdFx0dTggZHNhcCwgc3NhcCwgcmVhc29uO1xuMTI2MDpcdFxuMTI2MTpcdFx0ZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTtcbjEyNjI6XHRcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XG4xMjYzOlx0XG4xMjY0Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDUF9IRUFERVJfU0laRSAmIzQzOyAxKVxuMTI2NTpcdFx0XHRyZXR1cm47XG4xMjY2Olx0XG4xMjY3Olx0XHRyZWFzb24gPSBza2ItXHUwMDNlZGF0YVsyXTtcbjEyNjg6XHRcbjEyNjk6XHRcdHByX2RlYnVnKFwmIzM0OyVkICVkIHJlYXNvbiAlZFxcblwmIzM0Oywgc3NhcCwgZHNhcCwgcmVhc29uKTtcbjEyNzA6XHRcbjEyNzE6XHRcdHN3aXRjaCAocmVhc29uKSB7XG4xMjcyOlx0XHRjYXNlIExMQ1BfRE1fTk9CT1VORDpcbjEyNzM6XHRcdGNhc2UgTExDUF9ETV9SRUo6XG4xMjc0Olx0XHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX2Nvbm5lY3Rpbmdfc29ja19nZXQobG9jYWwsIGRzYXApO1xuMTI3NTpcdFx0XHRicmVhaztcbjEyNzY6XHRcbjEyNzc6XHRcdGRlZmF1bHQ6XG4xMjc4Olx0XHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2tfZ2V0KGxvY2FsLCBkc2FwLCBzc2FwKTtcbjEyNzk6XHRcdFx0YnJlYWs7XG4xMjgwOlx0XHR9XG4xMjgxOlx0XG4xMjgyOlx0XHRpZiAobGxjcF9zb2NrID09IE5VTEwpIHtcbjEyODM6XHRcdFx0cHJfZGVidWcoXCYjMzQ7QWxyZWFkeSBjbG9zZWRcXG5cJiMzNDspO1xuMTI4NDpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTExDUCBEZXRhaWxzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgTExDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRob3NlIGtleSB2YXJpYWJsZXMg4oCTIGBuZmNfbGxjcF9uc2AsIGBuZmNfbGxjcF9ucmAsIGBuZmNfbGxjcF9wdHlwZWAsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIHN1c3BlY3QgdGhleSYjMzk7bGwgYmUgaW4gb25lIG9mIHRoZSByZWxldmFudCBoZWFkZXJzLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4uCgpCZXlvbmQganVzdCBmaW5kaW5nIHRoZWlyIGRlZmluaXRpb25zLCBJIGFsc28gbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhlYWRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyLCB0aGUgYXJyYW5nZW1lbnQgb2YgaXRzIGZpZWxkcywgYW5kIGFueSBwb3RlbnRpYWwgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoaXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBlZmZpY2llbnQgcGFja2V0IGNyYWZ0aW5nIGFuZCBwYXJzaW5nLCBhbmQgZm9yIGRlYnVnZ2luZyBhbnkgbG93ZXItbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm9ibGVtcyB0aGF0IG1pZ2h0IGFyaXNlLiBUaGUgc3BlY2lmaWMgYnl0ZSBsYXlvdXQgaXMgcHJvYmFibHkgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgTExDUF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3AuaD02PWVudW0gbGxjcF9zdGF0ZSB7XG4tLVxubmV0L25mYy9sbGNwLmgtMTMtXG5uZXQvbmZjL2xsY3AuaDoxNDojZGVmaW5lIExMQ1BfREVGQVVMVF9MVE8gMTAwXG5uZXQvbmZjL2xsY3AuaDoxNTojZGVmaW5lIExMQ1BfREVGQVVMVF9SVyAgMVxubmV0L25mYy9sbGNwLmg6MTY6I2RlZmluZSBMTENQX0RFRkFVTFRfTUlVIDEyOFxubmV0L25mYy9sbGNwLmgtMTctXG5uZXQvbmZjL2xsY3AuaDoxODojZGVmaW5lIExMQ1BfTUFYX0xUTyAgMHhmZlxubmV0L25mYy9sbGNwLmg6MTk6I2RlZmluZSBMTENQX01BWF9SVyAgIDE1XG5uZXQvbmZjL2xsY3AuaDoyMDojZGVmaW5lIExMQ1BfTUFYX01JVVggMHg3ZmZcbm5ldC9uZmMvbGxjcC5oOjIxOiNkZWZpbmUgTExDUF9NQVhfTUlVIChMTENQX01BWF9NSVVYICYjNDM7IDEyOClcbm5ldC9uZmMvbGxjcC5oLTIyLVxubmV0L25mYy9sbGNwLmg6MjM6I2RlZmluZSBMTENQX1dLU19OVU1fU0FQICAgMTZcbm5ldC9uZmMvbGxjcC5oOjI0OiNkZWZpbmUgTExDUF9TRFBfTlVNX1NBUCAgIDE2XG5uZXQvbmZjL2xsY3AuaDoyNTojZGVmaW5lIExMQ1BfTE9DQUxfTlVNX1NBUCAzMlxubmV0L25mYy9sbGNwLmg6MjY6I2RlZmluZSBMTENQX0xPQ0FMX1NBUF9PRkZTRVQgKExMQ1BfV0tTX05VTV9TQVAgJiM0MzsgTExDUF9TRFBfTlVNX1NBUClcbm5ldC9uZmMvbGxjcC5oOjI3OiNkZWZpbmUgTExDUF9NQVhfU0FQIChMTENQX1dLU19OVU1fU0FQICYjNDM7IExMQ1BfU0RQX05VTV9TQVAgJiM0MzsgTExDUF9MT0NBTF9OVU1fU0FQKVxubmV0L25mYy9sbGNwLmg6Mjg6I2RlZmluZSBMTENQX1NEUF9VTkJPVU5EICAgKExMQ1BfTUFYX1NBUCAmIzQzOyAxKVxubmV0L25mYy9sbGNwLmgtMjktXG4tLVxubmV0L25mYy9sbGNwLmg9MTQxPXN0cnVjdCBuZmNfbGxjcF91aV9jYiB7XG4tLVxubmV0L25mYy9sbGNwLmgtMTUwLVxubmV0L25mYy9sbGNwLmg6MTUxOiNkZWZpbmUgTExDUF9IRUFERVJfU0laRSAgIDJcbm5ldC9uZmMvbGxjcC5oOjE1MjojZGVmaW5lIExMQ1BfU0VRVUVOQ0VfU0laRSAxXG5uZXQvbmZjL2xsY3AuaDoxNTM6I2RlZmluZSBMTENQX0FHRl9QRFVfSEVBREVSX1NJWkUgMlxubmV0L25mYy9sbGNwLmgtMTU0LVxubmV0L25mYy9sbGNwLmgtMTU1LS8qIExMQ1AgdmVyc2lvbnM6IDEuMSBpcyAxLjAgcGx1cyBTRFAgKi9cbm5ldC9uZmMvbGxjcC5oOjE1NjojZGVmaW5lIExMQ1BfVkVSU0lPTl8xMCAweDEwXG5uZXQvbmZjL2xsY3AuaDoxNTc6I2RlZmluZSBMTENQX1ZFUlNJT05fMTEgMHgxMVxubmV0L25mYy9sbGNwLmgtMTU4LVxubmV0L25mYy9sbGNwLmgtMTU5LS8qIExMQ1AgUERVIHR5cGVzICovXG5uZXQvbmZjL2xsY3AuaDoxNjA6I2RlZmluZSBMTENQX1BEVV9TWU1NICAgICAweDBcbm5ldC9uZmMvbGxjcC5oOjE2MTojZGVmaW5lIExMQ1BfUERVX1BBWCAgICAgIDB4MVxubmV0L25mYy9sbGNwLmg6MTYyOiNkZWZpbmUgTExDUF9QRFVfQUdGICAgICAgMHgyXG5uZXQvbmZjL2xsY3AuaDoxNjM6I2RlZmluZSBMTENQX1BEVV9VSSAgICAgICAweDNcbm5ldC9uZmMvbGxjcC5oOjE2NDojZGVmaW5lIExMQ1BfUERVX0NPTk5FQ1QgIDB4NFxubmV0L25mYy9sbGNwLmg6MTY1OiNkZWZpbmUgTExDUF9QRFVfRElTQyAgICAgMHg1XG5uZXQvbmZjL2xsY3AuaDoxNjY6I2RlZmluZSBMTENQX1BEVV9DQyAgICAgICAweDZcbm5ldC9uZmMvbGxjcC5oOjE2NzojZGVmaW5lIExMQ1BfUERVX0RNICAgICAgIDB4N1xubmV0L25mYy9sbGNwLmg6MTY4OiNkZWZpbmUgTExDUF9QRFVfRlJNUiAgICAgMHg4XG5uZXQvbmZjL2xsY3AuaDoxNjk6I2RlZmluZSBMTENQX1BEVV9TTkwgICAgICAweDlcbm5ldC9uZmMvbGxjcC5oOjE3MDojZGVmaW5lIExMQ1BfUERVX0kgICAgICAgIDB4Y1xubmV0L25mYy9sbGNwLmg6MTcxOiNkZWZpbmUgTExDUF9QRFVfUlIgICAgICAgMHhkXG5uZXQvbmZjL2xsY3AuaDoxNzI6I2RlZmluZSBMTENQX1BEVV9STlIgICAgICAweGVcbm5ldC9uZmMvbGxjcC5oLTE3My1cbm5ldC9uZmMvbGxjcC5oLTE3NC0vKiBQYXJhbWV0ZXJzIFRMViB0eXBlcyAqL1xubmV0L25mYy9sbGNwLmg6MTc1OiNkZWZpbmUgTExDUF9UTFZfVkVSU0lPTiAweDFcbm5ldC9uZmMvbGxjcC5oOjE3NjojZGVmaW5lIExMQ1BfVExWX01JVVggICAgMHgyXG5uZXQvbmZjL2xsY3AuaDoxNzc6I2RlZmluZSBMTENQX1RMVl9XS1MgICAgIDB4M1xubmV0L25mYy9sbGNwLmg6MTc4OiNkZWZpbmUgTExDUF9UTFZfTFRPICAgICAweDRcbm5ldC9uZmMvbGxjcC5oOjE3OTojZGVmaW5lIExMQ1BfVExWX1JXICAgICAgMHg1XG5uZXQvbmZjL2xsY3AuaDoxODA6I2RlZmluZSBMTENQX1RMVl9TTiAgICAgIDB4NlxubmV0L25mYy9sbGNwLmg6MTgxOiNkZWZpbmUgTExDUF9UTFZfT1BUICAgICAweDdcbm5ldC9uZmMvbGxjcC5oOjE4MjojZGVmaW5lIExMQ1BfVExWX1NEUkVRICAgMHg4XG5uZXQvbmZjL2xsY3AuaDoxODM6I2RlZmluZSBMTENQX1RMVl9TRFJFUyAgIDB4OVxubmV0L25mYy9sbGNwLmg6MTg0OiNkZWZpbmUgTExDUF9UTFZfTUFYICAgICAweGFcbm5ldC9uZmMvbGxjcC5oLTE4NS1cbm5ldC9uZmMvbGxjcC5oLTE4Ni0vKiBXZWxsIGtub3duIExMQ1AgU0FQICovXG5uZXQvbmZjL2xsY3AuaDoxODc6I2RlZmluZSBMTENQX1NBUF9TRFAgICAweDFcbm5ldC9uZmMvbGxjcC5oOjE4ODojZGVmaW5lIExMQ1BfU0FQX0lQICAgIDB4MlxubmV0L25mYy9sbGNwLmg6MTg5OiNkZWZpbmUgTExDUF9TQVBfT0JFWCAgMHgzXG5uZXQvbmZjL2xsY3AuaDoxOTA6I2RlZmluZSBMTENQX1NBUF9TTkVQICAweDRcbm5ldC9uZmMvbGxjcC5oOjE5MTojZGVmaW5lIExMQ1BfU0FQX01BWCAgIDB4ZmZcbm5ldC9uZmMvbGxjcC5oLTE5Mi1cbm5ldC9uZmMvbGxjcC5oLTE5My0vKiBEaXNjb25uZWN0aW9uIHJlYXNvbiBjb2RlICovXG5uZXQvbmZjL2xsY3AuaDoxOTQ6I2RlZmluZSBMTENQX0RNX0RJU0MgICAgMHgwMFxubmV0L25mYy9sbGNwLmg6MTk1OiNkZWZpbmUgTExDUF9ETV9OT0NPTk4gIDB4MDFcbm5ldC9uZmMvbGxjcC5oOjE5NjojZGVmaW5lIExMQ1BfRE1fTk9CT1VORCAweDAyXG5uZXQvbmZjL2xsY3AuaDoxOTc6I2RlZmluZSBMTENQX0RNX1JFSiAgICAgMHgwM1xubmV0L25mYy9sbGNwLmgtMTk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYG5mY19sbGNwX25zYCBhbmQgYG5mY19sbGNwX25yYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHN5c3RlbSBpcyBkb2luZyB3aXRoIHRoZXNlIHR3byB2YXJpYWJsZXMsIGBuZmNfbGxjcF9uc2AgYW5kIGBuZmNfbGxjcF9ucmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkZWx2aW5nIGludG8gdGhlaXIgcHVycG9zZSBhbmQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHJvbGVzIHdpdGhpbiB0aGUgTkZDIExvdyBMZXZlbCBDb21tdW5pY2F0aW9uIFByb3RvY29sIChMTENQKSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGF0IGRvICYjMzQ7TlMmIzM0OyBhbmQgJiMzNDtOUiYjMzQ7IHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQ/IEFyZSB0aGV5IHNlcXVlbmNlIG51bWJlcnMsIGNvdW50ZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQXJlIHRoZXkgcmVsYXRlZCB0byBzZW5kaW5nIG9yIHJlY2VpdmluZz8gQXJlIHRoZXkgbGlua2VkIHRvIGFueSBzcGVjaWZpYyBMTENQIGZyYW1lIHR5cGVzLCBsaWtlIEluZm9ybWF0aW9uIChJKSwgVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAoVUkpLCBvciBTdXBlcnZpc29yeSAoUyk/IFRoZSBkZXRhaWxzIHdpbGwgbGlrZWx5IGJlIGJ1cmllZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgc28gSSYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0byB0cmFjZSB0aGVpciB1c2FnZSB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGVuIGl0JiMzOTtzIGFib3V0IGNvbm5lY3RpbmcgdGhlc2UgdmFyaWFibGVzIHRvIGhvdyB0aGUgTkZDIGNvbnRyb2xsZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJJiMzOTttIGxvb2tpbmcgYXQgYSBzZW5kZXIvcmVjZWl2ZXIgcmVsYXRpb25zaGlwIG9yIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBhIHBlZXItdG8tcGVlciBjb25uZWN0aW9uLiBVbHRpbWF0ZWx5LCBmaWd1cmluZyBvdXQgd2hhdCB0aGVzZSB2YXJpYWJsZXMgc3RhbmQgZm9yIGlzIHRoZSBpbml0aWFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb21tdW5pY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX25bc3JdJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvcmUuYz02OTk9c3RhdGljIHU4IG5mY19sbGNwX3NzYXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTcwMy1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6NzA0OnN0YXRpYyB1OCBuZmNfbGxjcF9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxubmV0L25mYy9sbGNwX2NvcmUuYy03MDUte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzA4LVxubmV0L25mYy9sbGNwX2NvcmUuYzo3MDk6c3RhdGljIHU4IG5mY19sbGNwX25yKGNvbnN0IHN0cnVjdCBza19idWZmICpwZHUpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTcxMC17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xMDcwPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4NS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4NjpcdG5zID0gbmZjX2xsY3BfbnMoc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4NzpcdG5yID0gbmZjX2xsY3BfbnIoc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4OC1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMzQtXHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZXR4X3BlbmRpbmdfcXVldWUsIHMsIHRtcCkge1xubmV0L25mYy9sbGNwX2NvcmUuYzoxMTM1Olx0XHRcdG4gPSBuZmNfbGxjcF9ucyhzKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTEzNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGxsY3BfY29yZS5jOiBMaW5lcyA2OTUtNzIwKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgTExDUCBjb3JlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDY5NS03MjAuIExldCBtZSBwdWxsIHRoYXQgdXAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkga25vdyB0aGlzIGFyZWEgZGVhbHMgd2l0aC4uLiAqW3BhdXNlcywgbWVudGFsbHkgcmV2aWV3aW5nIGxsY3BfY29yZSYjMzk7cyBmdW5jdGlvbl0qIC4uLnByb2JhYmx5IHRoZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgbG9naWMsIG9yIHBlcmhhcHMgc2Vzc2lvbiBlc3RhYmxpc2htZW50L3Rlcm1pbmF0aW9uLCBvciBwb3NzaWJseSBkYXRhIHRyYW5zbWlzc2lvbiBmbG93IGNvbnRyb2wuIEdpdmVuIHRoZSBsaW5lIHJhbmdlLCBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IGZvY3VzZWQgYml0IG9mIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBvciBjb2RlIGJsb2NrIHRoZXNlIGxpbmVzIGJlbG9uZyB0byB3aXRoaW4gdGhlIGxhcmdlciBMTENQIGNvbnRleHQuIElzIHRoaXMgcGFydCBvZiB0aGUgY29ubmVjdCByZXF1ZXN0IGhhbmRsaW5nPyBUaGUgZGF0YSBhY2tub3dsZWRnbWVudCBwcm9jZXNzPyBPciBtYXliZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSB0aW1lciBtYW5hZ2VtZW50IGZvciBrZWVwLWFsaXZlIHBhY2tldHMgb3IgY29ubmVjdGlvbiB0aW1lb3V0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWxseSBzdWJ0bGUgZXJyb3IgaGFuZGxpbmcgb3Igc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBoZXJlLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGhvcGluZyBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgdGhvdWdoIHdpdGggTExDUCYjMzk7cyBpbmhlcmVudCB0aHJlYWRpbmcgbW9kZWwsIHRoYXQmIzM5O3MgYWx3YXlzIGEgcG9zc2liaWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqc2F5cyouIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgYW5kIHRoZW4gem9vbSBpbiBvbiBhbnkgcGFydGljdWxhcmx5IGRlbnNlIG9yIGNvbXBsZXgtbG9va2luZyBjb25kaXRpb25hbCBicmFuY2hlcy4gTXkgYWltIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVudGlvbiBvZiB0aGUgY29kZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBMTENQIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NTpcdHtcbiA2OTY6XHRcdHJldHVybiAoKHBkdS1cdTAwM2VkYXRhWzBdIFx1MDAyNiAweDAzKSBcdTAwM2NcdTAwM2MgMikgfCAoKHBkdS1cdTAwM2VkYXRhWzFdIFx1MDAyNiAweGMwKSBcdTAwM2VcdTAwM2UgNik7XG4gNjk3Olx0fVxuIDY5ODpcdFxuIDY5OTpcdHN0YXRpYyB1OCBuZmNfbGxjcF9zc2FwKGNvbnN0IHN0cnVjdCBza19idWZmICpwZHUpXG4gNzAwOlx0e1xuIDcwMTpcdFx0cmV0dXJuIHBkdS1cdTAwM2VkYXRhWzFdIFx1MDAyNiAweDNmO1xuIDcwMjpcdH1cbiA3MDM6XHRcbiA3MDQ6XHRzdGF0aWMgdTggbmZjX2xsY3BfbnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcbiA3MDU6XHR7XG4gNzA2Olx0XHRyZXR1cm4gcGR1LVx1MDAzZWRhdGFbMl0gXHUwMDNlXHUwMDNlIDQ7XG4gNzA3Olx0fVxuIDcwODpcdFxuIDcwOTpcdHN0YXRpYyB1OCBuZmNfbGxjcF9ucihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxuIDcxMDpcdHtcbiA3MTE6XHRcdHJldHVybiBwZHUtXHUwMDNlZGF0YVsyXSBcdTAwMjYgMHhmO1xuIDcxMjpcdH1cbiA3MTM6XHRcbiA3MTQ6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9zZXRfbnJucyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgc3RydWN0IHNrX2J1ZmYgKnBkdSlcbiA3MTU6XHR7XG4gNzE2Olx0XHRwZHUtXHUwMDNlZGF0YVsyXSA9IChzb2NrLVx1MDAzZXNlbmRfbiBcdTAwM2NcdTAwM2MgNCkgfCAoc29jay1cdTAwM2VyZWN2X24pO1xuIDcxNzpcdFx0c29jay1cdTAwM2VzZW5kX24gPSAoc29jay1cdTAwM2VzZW5kX24gJiM0MzsgMSkgJSAxNjtcbiA3MTg6XHRcdHNvY2stXHUwMDNlcmVjdl9hY2tfbiA9IChzb2NrLVx1MDAzZXJlY3ZfbiAtIDEpICUgMTY7XG4gNzE5Olx0fVxuIDcyMDpcdFxuIDcyMTpcdHZvaWQgbmZjX2xsY3Bfc2VuZF90b19yYXdfc29jayhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIDcyMjpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBkaXJlY3Rpb24pXG4gNzIzOlx0e1xuIDcyNDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5ID0gTlVMTCwgKm5za2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5GQyBMTENQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZS4gU3BlY2lmaWNhbGx5IGluIGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBpdCBhY2Nlc3NlcyBgc2tiLSZndDtkYXRhWzJdYCB1c2luZyBgbmZjX2xsY3BfbnMoc2tiKWAgYW5kIGBuZmNfbGxjcF9ucihza2IpYC4gSWYgdGhlIGBza2ItJmd0O2xlbmAgd2FzIGxlc3MgdGhhbiAzICh3aGljaCBpcyBgTExDUF9IRUFERVJfU0laRWAgb2YgMiBwbHVzIGBMTENQX1NFUVVFTkNFX1NJWkVgIG9mIDEpLCB0aGF0IGBza2ItJmd0O2RhdGFbMl1gIGFjY2VzcyB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQhIFNpbWlsYXJseSwgaW4gYG5mY19sbGNwX3JlY3ZfZG1gLCBpdCByZWFkcyBgcmVhc29uID0gc2tiLSZndDtkYXRhWzJdYC4gIElmIGBza2ItJmd0O2xlbmAgd2FzIGxlc3MgdGhhbiAzIChhZ2FpbiwgYExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgMWApLCB0aGF0IHJlYWQgd291bGQgYWxzbyBiZSBvdXQtb2YtYm91bmRzLgoKU28sIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBpbnRyb2R1Y2luZyBib3VuZHMgY2hlY2tzIHRvIHByZXZlbnQgdGhvc2Ugb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb24gYHNrYi0mZ3Q7ZGF0YWAuICBUaGVzZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gYHNrYmAgZGF0YSBidWZmZXJzIGFyZSBjbGFzc2ljIHNsYWIvc2tiIGJ1ZmZlciBpc3N1ZXMsIGFuZCBJJiMzOTtkIGV4cGVjdCBLQVNBTiB0byBiZSBmbGFnZ2luZyB0aGVtLgoKTm93LCBJIGFsd2F5cyBoYXZlIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuIExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgcXVlc3Rpb24gaXM6IEFyZSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/IEluIGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBpZiBgc2tiLSZndDtsZW5gIGlzIGxlc3MgdGhhbiBgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkVgLCBpdCBjYWxscyBgbmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pOyByZXR1cm47YC4gIEkgbmVlZCB0byByZXZpZXcgYG5mY19sbGNwX3NlbmRfZG1gIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZjX2xsY3Bfc2VuZF9kbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTI0MD1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTI0MS1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQyOmludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbik7XG5uZXQvbmZjL2xsY3AuaC0yNDMtaW50IG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTkzPWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyNi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYyNzppbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02Mjgte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9OTExPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTAzOC1cdC8qIFNlbmQgRE0gKi9cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTAzOTpcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIHJlYXNvbik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwNDAtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTA3MD1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwODEtXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkUpIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4MjpcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xMDgzLVx0XHRyZXR1cm47XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDkyLVx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwOTM6XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA5NC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTE2ND1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Rpc2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExODEtXHRpZiAobGxjcF9zb2NrID09IE5VTEwpIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE4MjpcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xMTgzLVx0XHRyZXR1cm47XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjAyLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjAzOlx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9ESVNDKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTIwNC1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTEyMDk9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTIyMS1cdFx0cHJfZXJyKFwmIzM0O0ludmFsaWQgQ0NcXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxMjIyOlx0XHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExvdy1MZXZlbCBMTENQIFNlbmQgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXNzZWN0IGBuZmNfbGxjcF9zZW5kX2RtYCDigJMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIERpcmVjdCBNb2RlIERhdGEgKERNKSBpcyBiZWluZyBzZW50IGF0IHRoZSBMTENQIGxldmVsLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgc3RlcHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQsIGFueSBmcmFtaW5nIG9yIGVycm9yIGNvcnJlY3Rpb24gbWVjaGFuaXNtcyB1c2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBORkMgbGF5ZXJzLiBHb3R0YSBnZXQgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgTExDUCBzZW5kIG9wZXJhdGlvbi4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3BfY29tbWFuZHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjI2Olx0XG4gNjI3Olx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxuIDYyODpcdHtcbiA2Mjk6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNjMwOlx0XHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuIDYzMTpcdFx0dTE2IHNpemUgPSAxOyAvKiBSZWFzb24gY29kZSAqL1xuIDYzMjpcdFxuIDYzMzpcdFx0cHJfZGVidWcoXCYjMzQ7U2VuZGluZyBETSByZWFzb24gMHgleFxcblwmIzM0OywgcmVhc29uKTtcbiA2MzQ6XHRcbiA2MzU6XHRcdGlmIChsb2NhbCA9PSBOVUxMKVxuIDYzNjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA2Mzc6XHRcbiA2Mzg6XHRcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiA2Mzk6XHRcdGlmIChkZXYgPT0gTlVMTClcbiA2NDA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNjQxOlx0XG4gNjQyOlx0XHRzaXplICYjNDM7PSBMTENQX0hFQURFUl9TSVpFO1xuIDY0MzpcdFx0c2l6ZSAmIzQzOz0gZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IGRldi1cdTAwM2V0eF90YWlscm9vbSAmIzQzOyBORkNfSEVBREVSX1NJWkU7XG4gNjQ0Olx0XG4gNjQ1Olx0XHRza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gNjQ2Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gNjQ3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDY0ODpcdFxuIDY0OTpcdFx0c2tiX3Jlc2VydmUoc2tiLCBkZXYtXHUwMDNldHhfaGVhZHJvb20gJiM0MzsgTkZDX0hFQURFUl9TSVpFKTtcbiA2NTA6XHRcbiA2NTE6XHRcdHNrYiA9IGxsY3BfYWRkX2hlYWRlcihza2IsIGRzYXAsIHNzYXAsIExMQ1BfUERVX0RNKTtcbiA2NTI6XHRcbiA2NTM6XHRcdHNrYl9wdXRfZGF0YShza2IsIFx1MDAyNnJlYXNvbiwgMSk7XG4gNjU0Olx0XG4gNjU1Olx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZsb2NhbC1cdTAwM2V0eF9xdWV1ZSwgc2tiKTtcbiA2NTY6XHRcbiA2NTc6XHRcdHJldHVybiAwO1xuIDY1ODpcdH1cbiA2NTk6XHRcbiA2NjA6XHRpbnQgbmZjX2xsY3Bfc2VuZF9pX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxuIDY2MTpcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIDY2MjpcdHtcbiA2NjM6XHRcdHN0cnVjdCBza19idWZmICpwZHU7XG4gNjY0Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzb2NrLVx1MDAzZXNrO1xuIDY2NTpcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTcKCQkJCQkJCW91dHB1dDogMTU4CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgY3J1Y2lhbCwgdnVsbmVyYWJpbGl0eS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgdHdvIGZ1bmN0aW9ucyBoZXJlOiBgbmZjX2xsY3BfcmVjdl9oZGxjKClgIGFuZCBgbmZjX2xsY3BfcmVjdl9kbSgpYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgbmV0d29yayBwYWNrZXRzLCBzcGVjaWZpY2FsbHksIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgZGF0YS4KCkJlZm9yZSB0aGlzIHBhdGNoLCBpZiBhIG1hbGljaW91cyBhY3RvciBzZW50IGEgc2hvcnQgcGFja2V04oCUb25lIHdoZXJlIHRoZSBsZW5ndGggb2YgYHNrYi0mZ3Q7ZGF0YWAgd2FzIGxlc3MgdGhhbiB0aGUgZXhwZWN0ZWQgaGVhZGVyIHNpemUgcGx1cyBzZXF1ZW5jZSBvciByZWFzb24gYnl0ZXPigJR3ZSYjMzk7ZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gSW4gYG5mY19sbGNwX3JlY3ZfaGRsYygpYCwgdGhlIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBza2ItJmd0O2RhdGFbMl1gIHdpdGhvdXQgdmVyaWZ5aW5nIHRoYXQgdGhlIGBza2JgIHdhcyBhY3R1YWxseSBsb25nIGVub3VnaC4gVGhlIHNhbWUgaXNzdWUgZXhpc3RlZCBpbiBgbmZjX2xsY3BfcmVjdl9kbSgpYCB3aXRoIHRoZSBhY2Nlc3MgdG8gYHNrYi0mZ3Q7ZGF0YVsyXWAuIFRoaXMgaXMgdGhlIGNsYXNzaWMga2luZCBvZiBzcGF0aWFsIG1lbW9yeSBlcnJvciB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHNpbXBsZSBhbmQgZWxlZ2FudDogaXQgYWRkcyBwcm9wZXIgbGVuZ3RoIGNoZWNrcy4gTm93LCBiZWZvcmUgYWNjZXNzaW5nIGBza2ItJmd0O2RhdGFbMl1gLCBib3RoIGZ1bmN0aW9ucyB3aWxsIHZlcmlmeSB0aGF0IHRoZSBwYWNrZXQgbGVuZ3RoIGlzIHN1ZmZpY2llbnQuIElmIHRoZSBwYWNrZXQgaXMgdG9vIHNob3J0LCBhIERNIChEaXNjb25uZWN0IE1vZGUpIGlzIHNlbnQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBObyBtb3JlIG91dC1vZi1ib3VuZHMgcmVhZHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbXkgYXNzZXNzbWVudDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBjYXJlZnVsbHkgYW5kIEkgY2FuIHNheSBjb25maWRlbnRseSB0aGF0OgoKKiAgIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLgoqICAgTm8gdmFyaWFibGVzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuCiogICBUaGVyZSBhcmUgbm8gbWVtb3J5IGluZm9ybWF0aW9uIGxlYWtzLgoqICAgVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFscyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4KCkdpdmVuIHRoZXNlIG9ic2VydmF0aW9ucywgdGhpcyBwYXRjaCBpcyBhIGNsZWFyIHdpbjsgaXQgc29sdmVzIGFuIGlkZW50aWZpZWQgc3BhdGlhbCBtZW1vcnkgZXJyb3IgKG91dC1vZi1ib3VuZHMgcmVhZCkgd2l0aG91dCBpbnRyb2R1Y2luZyBhbnkgb3RoZXIgcmlza3MuIFRoaXMgaXMgd2h5IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgZnV6emluZyBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIGFyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gYE5lZWRzS01TQU49ZmFsc2VgIGlzIGFjY3VyYXRlIGhlcmUsIGFuZCB0aGUgcHJvdmlkZWQgcmVhc29uaW5nIGlzIGFsc28gY2xlYXIgYW5kIHZhbGlkLiBUaGUgY29kZSBpcyBnb29kLiBUaW1lIHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3Npbmcgc2tiIGxlbmd0aCBib3VuZHMgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgYmVmb3JlIGFjY2Vzc2luZyBieXRlIG9mZnNldCAyIChza2ItXHUwMDNlZGF0YVsyXSkgZm9yIHNlcXVlbmNlIG51bWJlcnMgLyByZWFzb24gY29kZXMuIFRoZXNlIGNoYW5nZXMgZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkcyBvbiB0cnVuY2F0ZWQgTkZDIExMQ1AgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHNwYXRpYWwgbWVtb3J5IGVycm9ycyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVx1MDAzZWRhdGFbMl0pIGZvciBzZXF1ZW5jZSBudW1iZXJzIC8gcmVhc29uIGNvZGVzLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZHMgb24gdHJ1bmNhdGVkIE5GQyBMTENQIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzcGF0aWFsIG1lbW9yeSBlcnJvcnMgY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MjIuNjIzMTA0NjQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMDExNzMyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfRElHSVRBTFwiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX3JlY3ZfaGRsY1wiLFxuICAgIFwibmZjX2xsY3BfcmVjdl9kbVwiLFxuICAgIFwibmZjX2xsY3Bfcnhfc2tiXCIsXG4gICAgXCJuZmNfbGxjcF9yZWN2XCIsXG4gICAgXCJuZmNfbGxjcF9kYXRhX3JlY2VpdmVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3Npbmcgc2tiIGxlbmd0aCBib3VuZHMgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgYmVmb3JlIGFjY2Vzc2luZyBieXRlIG9mZnNldCAyIChza2ItXFx1MDAzZWRhdGFbMl0pIGZvciBzZXF1ZW5jZSBudW1iZXJzIC8gcmVhc29uIGNvZGVzLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZHMgb24gdHJ1bmNhdGVkIE5GQyBMTENQIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzcGF0aWFsIG1lbW9yeSBlcnJvcnMgY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBhY2tldCBsZW5ndGggYm91bmRhcnkgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBtYWxmb3JtZWQgTExDUCBwYWNrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHByb3RvY29sIGxvZ2ljIGluIHRoZSBORkMgTExDUCBsYXllciwgd2hpY2ggaXMgYWNjZXNzaWJsZSBhbmQgZnV6emFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIE5GQyBkcml2ZXJzIChlLmcuIG5mY3NpbSkgYW5kIEFGX05GQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDoyMi42MjMxMTAwMTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Nzc3NDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3OTE5ZDUwMDVlNGExZmM1YjQ5ZGVjMThmNzhhZGIyNjQ0NmQ0NDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDo1MDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xcbmluZGV4IGNhYzFiNTQ4NzA2NGQuLjg5ZDZmNDU5OWUxMWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xcbisrKyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcXG5AQCAtMTA3Nyw2ICsxMDc3LDEyIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbiBcXHRwdHlwZSA9IG5mY19sbGNwX3B0eXBlKHNrYik7XFxuIFxcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XFxuIFxcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XFxuK1xcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XFxuK1xcdFxcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRucyA9IG5mY19sbGNwX25zKHNrYik7XFxuIFxcdG5yID0gbmZjX2xsY3BfbnIoc2tiKTtcXG4gXFxuQEAgLTEyNTQsNiArMTI2MCwxMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuIFxcbiBcXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xcbiBcXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xcbitcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIDEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHJlYXNvbiA9IHNrYi1cXHUwMDNlZGF0YVsyXTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlZCAlZCByZWFzb24gJWRcXFxcblxcXCIsIHNzYXAsIGRzYXAsIHJlYXNvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUwOjIzLjE3MTgzNjEwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY5NTYzMDkyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfRElHSVRBTFwiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX3JlY3ZfaGRsY1wiLFxuICAgIFwibmZjX2xsY3BfcmVjdl9kbVwiLFxuICAgIFwibmZjX2xsY3Bfcnhfc2tiXCIsXG4gICAgXCJuZmNfbGxjcF9yZWN2XCIsXG4gICAgXCJuZmNfbGxjcF9kYXRhX3JlY2VpdmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwYWNrZXQgbGVuZ3RoIGJvdW5kYXJ5IGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3NpbmcgbWFsZm9ybWVkIExMQ1AgcGFja2V0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiB0aGUgTkZDIExMQ1AgbGF5ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBORkMgZHJpdmVycyAoZS5nLiBuZmNzaW0pIGFuZCBBRl9ORkMgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzkxOWQ1MDA1ZTRhMWZjNWI0OWRlYzE4Zjc4YWRiMjY0NDZkNDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDo1MDoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXG5pbmRleCBjYWMxYjU0ODcwNjRkLi44OWQ2ZjQ1OTllMTFhIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xuKysrIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuQEAgLTEwNzcsNiArMTA3NywxMiBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbiBcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcbiBcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4gXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuK1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyBMTENQX1NFUVVFTkNFX1NJWkUpIHtcbitcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRucyA9IG5mY19sbGNwX25zKHNrYik7XG4gXHRuciA9IG5mY19sbGNwX25yKHNrYik7XG4gXG5AQCAtMTI1NCw2ICsxMjYwLDEwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbiBcbiBcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4gXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuK1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyAxKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRyZWFzb24gPSBza2ItXHUwMDNlZGF0YVsyXTtcbiBcbiBcdHByX2RlYnVnKFwiJWQgJWQgcmVhc29uICVkXFxuXCIsIHNzYXAsIGRzYXAsIHJlYXNvbik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDoyMy4xNzE4Mzc1NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjIyODkwNjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExMQ1AgQ29yZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGJyZWFraW5nIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5ldC9uZmMvbGxjcF9jb3JlLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgdGhlIHBhY2tldCBoYW5kbGluZyBpbiBgbmZjX2xsY3BfcmVjdl9oZGxjYCBhbmQgYG5mY19sbGNwX3JlY3ZfZG1gLiBHb29kLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhleSd2ZSBhZGRlZCBsZW5ndGggY2hlY2tzIHRvIHRoZSBpbmNvbWluZyBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIFNwZWNpZmljYWxseSwgdGhleSBhcmUgZW5zdXJpbmcgdGhhdCB0aGUgcmVjZWl2ZWQgcGFja2V0IG1lZXRzIGEgbWluaW11bSBsZW5ndGggcmVxdWlyZW1lbnQuIEl0IG1ha2VzIHNlbnNlOyB3ZSB3YW50IHRvIHZhbGlkYXRlIHRoZSByZWNlaXZlZCBmcmFtZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbS5cblxuVGhlIGNvZGUgc25pcHBldHMgc2hvdyBjaGVja3MgbGlrZSBgc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIExMQ1BfU0VRVUVOQ0VfU0laRWAgYW5kIGBza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgMWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBmb3IgcGFja2V0cyB0aGF0IGF0IGxlYXN0IGNvbnRhaW4gdGhlIG5lY2Vzc2FyeSBoZWFkZXIgYW5kIGVpdGhlciBzZXF1ZW5jZSBudW1iZXJzIG9yIGp1c3QgYSBzaW5nbGUgYnl0ZSBvZiBkYXRhLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIElmIHRoZSBwYWNrZXQgaXMgdG9vIHNob3J0LCB0aGUgY29kZSBub3cgc2VlbXMgdG8gYmUgc2VuZGluZyBiYWNrIGEgRE0gKERpc2Nvbm5lY3QgTW9kZSkgZnJhbWUgd2l0aCBhIGBOT0NPTk5gIHJlYXNvbi4gVGhpcyBpcyBhIHNlbnNpYmxlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LlxuXG5Ob3csIEknbSBnb2luZyB0byBuZWVkIG1vcmUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBgbmV0L25mYy9sbGNwX2NvcmUuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVzZSBgc2tiYCBzdHJ1Y3R1cmVzIGFyZSB1c2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgbmV3IGNoZWNrcyBkb24ndCBicmVhayBhbnkgdmFsaWQsIGJ1dCBwcmV2aW91c2x5IG92ZXJsb29rZWQsIGNhc2VzLiBBcmUgd2UgcG90ZW50aWFsbHkgcmVqZWN0aW5nIHZhbGlkLCBidXQgbWluaW1hbGx5IHNpemVkLCBMTENQIGZyYW1lcz8gT3IgYXJlIHdlLCBhcyBJIHN1c3BlY3QsIGp1c3QgZW5zdXJpbmcgd2UgZG9uJ3QgdHJ5IHRvIGRlcmVmZXJlbmNlIGludmFsaWQgbWVtb3J5P1xuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9uZmMvYCB0byB1bmRlcnN0YW5kIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIE5GQyBhbmQgTExDUC4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFzIHRvIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgdGhpcyBsZW5ndGggY2hlY2sgaXMgYmVpbmcgYXBwbGllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5OSwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDozNS40MDA3NDczOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbGxjcF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4xMDcxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEwNzI6XFx0e1xcbjEwNzM6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcXG4xMDc0OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4xMDc1OlxcdFxcdHU4IGRzYXAsIHNzYXAsIHB0eXBlLCBucywgbnI7XFxuMTA3NjpcXHRcXG4xMDc3OlxcdFxcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcXG4xMDc4OlxcdFxcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XFxuMTA3OTpcXHRcXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xcbjEwODA6XFx0XFxuMTA4MTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XFxuMTA4MjpcXHRcXHRcXHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XFxuMTA4MzpcXHRcXHRcXHRyZXR1cm47XFxuMTA4NDpcXHRcXHR9XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdG5zID0gbmZjX2xsY3BfbnMoc2tiKTtcXG4xMDg3OlxcdFxcdG5yID0gbmZjX2xsY3BfbnIoc2tiKTtcXG4xMDg4OlxcdFxcbjEwODk6XFx0XFx0cHJfZGVidWcoXFxcIiVkICVkIFIgJWQgUyAlZFxcXFxuXFxcIiwgZHNhcCwgc3NhcCwgbnIsIG5zKTtcXG4xMDkwOlxcdFxcbjEwOTE6XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xcbjEwOTI6XFx0XFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XFxuMTA5MzpcXHRcXHRcXHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XFxuMTA5NDpcXHRcXHRcXHRyZXR1cm47XFxuMTA5NTpcXHRcXHR9XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdHNrID0gXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlc2s7XFxuMTA5ODpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjEwOTk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkge1xcbjExMDA6XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xMTAxOlxcdFxcdFxcdG5mY19sbGNwX3NvY2tfcHV0KGxsY3Bfc29jayk7XFxuMTEwMjpcXHRcXHRcXHRyZXR1cm47XFxuMTEwMzpcXHRcXHR9XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdC8qIFBhc3MgdGhlIHBheWxvYWQgdXBzdHJlYW0gKi9cXG4xMTA2OlxcdFxcdGlmIChwdHlwZSA9PSBMTENQX1BEVV9JKSB7XFxuMTEwNzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiSSBmcmFtZSwgcXVldWVpbmcgb24gJXBcXFxcblxcXCIsIFxcdTAwMjZsbGNwX3NvY2stXFx1MDAzZXNrKTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0XFx0XFx0aWYgKG5zID09IGxsY3Bfc29jay1cXHUwMDNlcmVjdl9uKVxcbjExMTA6XFx0XFx0XFx0XFx0bGxjcF9zb2NrLVxcdTAwM2VyZWN2X24gPSAobGxjcF9zb2NrLVxcdTAwM2VyZWN2X24gKyAxKSAlIDE2O1xcbjExMTE6XFx0XFx0XFx0ZWxzZVxcbjExMTI6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJSZWNlaXZlZCBvdXQgb2Ygc2VxdWVuY2UgSSBQRFVcXFxcblxcXCIpO1xcbjExMTM6XFx0XFxuMTExNDpcXHRcXHRcXHRza2JfcHVsbChza2IsIExMQ1BfSEVBREVSX1NJWkUgKyBMTENQX1NFUVVFTkNFX1NJWkUpO1xcbjExMTU6XFx0XFx0XFx0aWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2IoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlc2ssIHNrYikpIHtcXG4xMTE2OlxcdFxcdFxcdFxcdC8qXFxuMTExNzpcXHRcXHRcXHRcXHQgKiBJIGZyYW1lcyB3aWxsIGJlIGZyZWVkIGZyb20gdGhlIHNvY2tldCBsYXllciwgc28gd2VcXG4xMTE4OlxcdFxcdFxcdFxcdCAqIG5lZWQgdG8ga2VlcCB0aGVtIGFsaXZlIHVudGlsIHNvbWVvbmUgcmVjZWl2ZXMgdGhlbS5cXG4xMTE5OlxcdFxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDozNS40MDI5MzM5MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQ1OlxcdFxcbjEyNDY6XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DT05ORUNURUQ7XFxuMTI0NzpcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xMjUwOlxcdFxcbjEyNTE6XFx0XFx0bmZjX2xsY3Bfc29ja19wdXQobGxjcF9zb2NrKTtcXG4xMjUyOlxcdH1cXG4xMjUzOlxcdFxcbjEyNTQ6XFx0c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbjEyNTU6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEyNTY6XFx0e1xcbjEyNTc6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcXG4xMjU4OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4xMjU5OlxcdFxcdHU4IGRzYXAsIHNzYXAsIHJlYXNvbjtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0ZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTtcXG4xMjYyOlxcdFxcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XFxuMTI2MzpcXHRcXG4xMjY0OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyAxKVxcbjEyNjU6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRyZWFzb24gPSBza2ItXFx1MDAzZWRhdGFbMl07XFxuMTI2ODpcXHRcXG4xMjY5OlxcdFxcdHByX2RlYnVnKFxcXCIlZCAlZCByZWFzb24gJWRcXFxcblxcXCIsIHNzYXAsIGRzYXAsIHJlYXNvbik7XFxuMTI3MDpcXHRcXG4xMjcxOlxcdFxcdHN3aXRjaCAocmVhc29uKSB7XFxuMTI3MjpcXHRcXHRjYXNlIExMQ1BfRE1fTk9CT1VORDpcXG4xMjczOlxcdFxcdGNhc2UgTExDUF9ETV9SRUo6XFxuMTI3NDpcXHRcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9jb25uZWN0aW5nX3NvY2tfZ2V0KGxvY2FsLCBkc2FwKTtcXG4xMjc1OlxcdFxcdFxcdGJyZWFrO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRkZWZhdWx0OlxcbjEyNzg6XFx0XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xcbjEyNzk6XFx0XFx0XFx0YnJlYWs7XFxuMTI4MDpcXHRcXHR9XFxuMTI4MTpcXHRcXG4xMjgyOlxcdFxcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xcbjEyODM6XFx0XFx0XFx0cHJfZGVidWcoXFxcIkFscmVhZHkgY2xvc2VkXFxcXG5cXFwiKTtcXG4xMjg0OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MzUuNDAzMDU1NTExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5GQ1xcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdGRlZmF1bHQgblxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxcbiAgMTI6XFx0XFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIG5mYy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIE5GQ19ESUdJVEFMXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgMTk6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cXG4gIDI1OlxcdFxcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XFxuICAyNjpcXHRcXHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI5OlxcdFxcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvbmNpL0tjb25maWdcXFwiXFxuICAzMjpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxuICAzMzpcXHRcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MzUuNDAzMTUwOTAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNDUyMTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBsbGNwX2NvcmUuYyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBsbGNwX2NvcmUuY2Agd2l0aGluIHRoZSBgbmV0L25mYy9gIGRpcmVjdG9yeS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgdGhlcmUuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgaW5jbHVkZSBwYXRocyBhcmUgc2V0LCB3aGF0IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyBtaWdodCBiZSBpbiBwbGF5IChsaWtlIGZlYXR1cmUgZmxhZ3Mgb3IgcGxhdGZvcm0tc3BlY2lmaWMgc2V0dGluZ3MpLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgYmFzZWQgb24ga2VybmVsIHZlcnNpb25zIG9yIG90aGVyIGZhY3RvcnMuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgZGlyZWN0bHkgYWZmZWN0IGBsbGNwX2NvcmUuY2AncyBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MzcuMjI3Njc0OTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBORkMgc3Vic3lzdGVtLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfTkZDKSArPSBuZmMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG4gICA4OlxcdG9iai0kKENPTkZJR19ORkNfSENJKSArPSBoY2kvXFxuICAgOTpcXHRvYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICs9IG5mY19kaWdpdGFsLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0bmZjLW9ianMgOj0gY29yZS5vIG5ldGxpbmsubyBhZl9uZmMubyByYXdzb2NrLm8gbGxjcF9jb3JlLm8gbGxjcF9jb21tYW5kcy5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdGxsY3Bfc29jay5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdG5mY19kaWdpdGFsLW9ianMgOj0gZGlnaXRhbF9jb3JlLm8gZGlnaXRhbF90ZWNobm9sb2d5Lm8gZGlnaXRhbF9kZXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDozNy4yMjc3NzA3NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDY0NjYwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5GQyBcdTAwMjYgTExDUCBGdXp6aW5nIFJvYWRtYXAqKlxuXG5Pa2F5LCBzbyBgbGxjcF9jb3JlLm9gIGlzIGJ1aWx0IGludG8gYG5mYy5vYCB3aGVuIHdlJ3ZlIGdvdCBgQ09ORklHX05GQ2AgZW5hYmxlZCDigJMgZ29vZCB0byBrbm93LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB3ZSBjYW4gcG9rZSBhbmQgcHJvZCBhdCB0aGUgTkZDIGFuZCBMTENQIGxheWVycyBmb3IgZnV6emluZyBwdXJwb3Nlcy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLlxuXG5DYW4gd2UgZ2VuZXJhdGUgdmlydHVhbCBORkMgZGV2aWNlcywgTExDUCBzb2NrZXRzLCBvciBldmVuIHN0aW11bGF0ZSBhY3Rpdml0eSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LCBpZGVhbGx5IGxldmVyYWdpbmcgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyPyBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBzZWVtcyB0byBiZSB5ZXMhIFN5emthbGxlciBpdHNlbGYgcHJvdmlkZXMgc29tZSBpbnRlcmVzdGluZyBORkMgdmlydHVhbCBkZXZpY2VzIGFuZCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGluZ3MgbGlrZSBgdmlydHVhbCBuZmNzaW1gIHdoaWNoIHRpZXMgaW4gd2l0aCBgQ09ORklHX05GQ19TSU1gIG9yIHBvc3NpYmx5IGRpcmVjdCBhY2Nlc3MgdGhyb3VnaCByYXcgc29jay9MTENQIHNvY2tldHMgb3IgbmV0bGluay4gTm93LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBmaWd1cmUgb3V0IGhvdyB0byBsZXZlcmFnZSB0aG9zZSByZXNvdXJjZXMuIEknbGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZmMvYCBhbmQgYG5ldC9uZmMvYCBkaXJlY3RvcmllcyBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHJvdXRlIHRvIGlkZW50aWZ5aW5nIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1ldGhvZHMgSSdtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDMuMjkyNDM0NDk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4Nzg4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3BfcmVjdl9oZGxjfG5mY19sbGNwX3JlY3ZfZG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jPTEwNDI9aW50IG5mY19sbGNwX3F1ZXVlX2lfZnJhbWVzKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDY5LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA3MDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwNzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTEyMDk9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjUzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTI1NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjU1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTQ5Mj1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzMi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRE1cXFxcblxcXCIpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUzMzpcXHRcXHRuZmNfbGxjcF9yZWN2X2RtKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzNC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0NC1cXHRcXHRwcl9kZWJ1ZyhcXFwiSSBmcmFtZVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTQ1OlxcdFxcdG5mY19sbGNwX3JlY3ZfaGRsYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUwOjQzLjQ2ODMxOTAxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk1MzIxOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgbmZjX2xsY3Bfcnhfc2tiYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIGBuZmNfbGxjcF9yeF9za2JgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBORkMgc3RhY2suIFRoaXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgcmVjZWl2ZWQgU0tCcyBhcmUgaGFuZGxlZCBpbiBMTENQLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAsIGJ1dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IG5lZWQgdG8gbGV2ZXJhZ2Ugc29tZSBtb3JlIHNvcGhpc3RpY2F0ZWQgc3RhdGljIGFuYWx5c2lzIHRvb2xzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgY3JpdGljYWwgaGFuZGxlciBmb3IgaW5jb21pbmcgZGF0YSwgc28gaWRlbnRpZnlpbmcgYWxsIHRoZSB1cHN0cmVhbSBwcm9jZXNzaW5nIHN0ZXBzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIHRyYWNlIGhlcmUgd2lsbCBxdWlja2x5IGV4cG9zZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDo0NS44NjM2NDUzMjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjI2NjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZmNfbGxjcF9yeF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jPTIxPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjItXFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMzpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNC1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTQ0OD1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2FnZihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDgzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTQ4NDpcXHRcXHRuZmNfbGxjcF9yeF9za2IobG9jYWwsIG5ld19za2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ4NS1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ5MS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0OTI6c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDkzLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTU1NT1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3MC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1NzE6XFx0bmZjX2xsY3Bfcnhfc2tiKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDYuMDA5OTIwMzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NTkwMzAxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIE5ldHdvcmsgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGByeF93b3JrYCBmdW5jdGlvbiBpcyBiZWluZyBzY2hlZHVsZWQsIG9yIHdoZXJlIHRoZSBgbGxjcF9jb3JlYCBlbnRyeXBvaW50cyBhcmUgbG9jYXRlZC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgc29tZSBuZXR3b3JrIHN0YWNrIGFuYWx5c2lzLCBzbyBJJ20gbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBvaW50cyBvZiBwcm9jZXNzaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzLCBwZXJoYXBzIGxvb2tpbmcgZm9yIGtlcm5lbCBtb2R1bGUgaG9va3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyB0aGUgcGFja2V0cyBhcmUgcmVjZWl2ZWQsIHF1ZXVlZCwgYW5kIHVsdGltYXRlbHkgcHJvY2Vzc2VkIHdpdGhpbiB0aGlzIHN5c3RlbS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2VzIHRvIGxvb2sgZm9yIGNhbGxzIG9yIHJlZmVyZW5jZXMgdG8gdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24gYW5kIGZyb20gd2hlcmUuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgaGFuZGxlcnMgb3IgdGltZXJzIGludm9sdmVkLCB0b28uIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDo0Ny43Njg5NTQ0MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTM5OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2hjaS9jb3JlLmM9NjM9c3RhdGljIHZvaWQgbmZjX2hjaV9tc2dfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTI1LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMjY6c3RhdGljIHZvaWQgbmZjX2hjaV9tc2dfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9oY2kvY29yZS5jLTEyNy17XFxubmV0L25mYy9oY2kvY29yZS5jLTEyOC1cXHRzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19oY2lfZGV2LFxcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMjk6XFx0XFx0XFx0XFx0XFx0XFx0bXNnX3J4X3dvcmspO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMzAtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz04NTQ9c3RhdGljIHZvaWQgbmZjX2hjaV9yZWN2X2Zyb21fbGxjKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjYtXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jOjkyNzpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZoZGV2LVxcdTAwM2Vtc2dfcnhfd29yayk7XFxubmV0L25mYy9oY2kvY29yZS5jLTkyOC1cXHR9XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTAyMD1pbnQgbmZjX2hjaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTEwMzEtXFxubmV0L25mYy9oY2kvY29yZS5jOjEwMzI6XFx0SU5JVF9XT1JLKFxcdTAwMjZoZGV2LVxcdTAwM2Vtc2dfcnhfd29yaywgbmZjX2hjaV9tc2dfcnhfd29yayk7XFxubmV0L25mYy9oY2kvY29yZS5jLTEwMzMtXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTA0MD12b2lkIG5mY19oY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTEwNjEtXFxubmV0L25mYy9oY2kvY29yZS5jOjEwNjI6XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2aGRldi1cXHUwMDNlbXNnX3J4X3dvcmspO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMDYzLVxcbi0tXFxubmV0L25mYy9sbGNwLmg9NTA9c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcXG4tLVxcbm5ldC9uZmMvbGxjcC5oLTYwLVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdCB0eF93b3JrO1xcbm5ldC9uZmMvbGxjcC5oOjYxOlxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdCByeF93b3JrO1xcbm5ldC9uZmMvbGxjcC5oLTYyLVxcdHN0cnVjdCBza19idWZmICpyeF9wZW5kaW5nO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNjUtXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTY2OlxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF93b3JrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2Ny1cXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZsb2NhbC1cXHUwMDNldGltZW91dF93b3JrKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTQ5Mj1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1NC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1NTU6c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTU2LXtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NTctXFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICByeF93b3JrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NTktXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTU3OD1zdGF0aWMgdm9pZCBfX25mY19sbGNwX3JlY3Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4Ni1cXHR0aW1lcl9kZWxldGUoXFx1MDAyNmxvY2FsLVxcdTAwM2VsaW5rX3RpbWVyKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1ODc6XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4OC19XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE2NjM9aW50IG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTY4OS1cXHRsb2NhbC1cXHUwMDNlcnhfcGVuZGluZyA9IE5VTEw7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNjkwOlxcdElOSVRfV09SSyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTY5MS1cXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0zOT1zdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5uZXQvbmZjL25jaS9jb3JlLmM6NDA6c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtNDEtc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz01NTQ9c3RhdGljIGludCBuY2lfY2xvc2VfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTYxNC1cXG5uZXQvbmZjL25jaS9jb3JlLmM6NjE1OlxcdC8qIHJ4X3dvcmsgbWF5IHRha2UgcmVxX2xvY2sgdmlhIG5jaV9kZWFjdGl2YXRlX3RhcmdldCAqL1xcbm5ldC9uZmMvbmNpL2NvcmUuYy02MTYtXFx0Zmx1c2hfd29ya3F1ZXVlKG5kZXYtXFx1MDAzZXJ4X3dxKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz02MzE9c3RhdGljIHZvaWQgbmNpX2RhdGFfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtNjM1LVxcdHNldF9iaXQoTkNJX0RBVEFfRVhDSEFOR0VfVE8sIFxcdTAwMjZuZGV2LVxcdTAwM2VmbGFncyk7XFxubmV0L25mYy9uY2kvY29yZS5jOjYzNjpcXHRxdWV1ZV93b3JrKG5kZXYtXFx1MDAzZXJ4X3dxLCBcXHUwMDI2bmRldi1cXHUwMDNlcnhfd29yayk7XFxubmV0L25mYy9uY2kvY29yZS5jLTYzNy19XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTI1MT1pbnQgbmNpX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY2LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjY3OlxcdElOSVRfV09SSyhcXHUwMDI2bmRldi1cXHUwMDNlcnhfd29yaywgbmNpX3J4X3dvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY4LVxcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXFxcIiVzX25jaV9yeF93cVxcXCIsIGRldl9uYW1lKGRldikpO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEzNTE9aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEzNjItXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZXJ4X3EsIHNrYik7XFxubmV0L25mYy9uY2kvY29yZS5jOjEzNjM6XFx0cXVldWVfd29yayhuZGV2LVxcdTAwM2VyeF93cSwgXFx1MDAyNm5kZXYtXFx1MDAzZXJ4X3dvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzY0LVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTE1MjA9c3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTE1NTgtXFxubmV0L25mYy9uY2kvY29yZS5jOjE1NTk6c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTYwLXtcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTU2MTpcXHRzdHJ1Y3QgbmNpX2RldiAqbmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2Rldiwgcnhfd29yayk7XFxubmV0L25mYy9uY2kvY29yZS5jLTE1NjItXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9uZmMvbmNpL2RhdGEuYz0yNj12b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25mYy9uY2kvZGF0YS5jLTQ4LVxcbm5ldC9uZmMvbmNpL2RhdGEuYzo0OTpcXHQvKiBDbGFpbSBjb21wbGV0aW9uIGF0b21pY2FsbHkgLS0gYm90aCBjbG9zZSBhbmQgcnhfd29yayBtYXkgcmFjZSBoZXJlICovXFxubmV0L25mYy9uY2kvZGF0YS5jLTUwLVxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KE5DSV9EQVRBX0VYQ0hBTkdFLCBcXHUwMDI2bmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYz0zODI9c3RhdGljIHZvaWQgbmNpX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTQwNC1cXG5uZXQvbmZjL25jaS9oY2kuYzo0MDU6c3RhdGljIHZvaWQgbmNpX2hjaV9tc2dfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9uY2kvaGNpLmMtNDA2LXtcXG5uZXQvbmZjL25jaS9oY2kuYy00MDctXFx0c3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2ID1cXG5uZXQvbmZjL25jaS9oY2kuYzo0MDg6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuY2lfaGNpX2RldiwgbXNnX3J4X3dvcmspO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQwOS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NDI3PXZvaWQgbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiKHZvaWQgKmNvbnRleHQsXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy01MDMtXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XFxubmV0L25mYy9uY2kvaGNpLmM6NTA0OlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy01MDUtXFx0fVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9Nzg2PXN0cnVjdCBuY2lfaGNpX2RldiAqbmNpX2hjaV9hbGxvY2F0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc5NC1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZoZGV2LVxcdTAwM2VyeF9oY3BfZnJhZ3MpO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjc5NTpcXHRJTklUX1dPUksoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF93b3JrLCBuY2lfaGNpX21zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy03OTYtXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlbXNnX3J4X3F1ZXVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDcuODY4MTAwMjAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NTM5MDkwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBMTENQIFJlY2VpdmUgQ2FsbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIE5GQyBzdGFjayBoYW5kbGUgaW5jb21pbmcgTExDUCBkYXRhLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsIHNpdGVzIGZvciBlaXRoZXIgYF9fbmZjX2xsY3BfcmVjdmAgb3IgYG5mY19sbGNwX3JlY3ZgLiBJJ20gYXNzdW1pbmcgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb3JlIGxvZ2ljIGZvciByZWNlaXZpbmcgTExDUCBmcmFtZXMuIEtub3dpbmcgd2hlcmUgaXQncyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGluY29taW5nIGRhdGEgaXMgcm91dGVkIGFuZCBwcm9jZXNzZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgcGlucG9pbnRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgd2l0aGluIHRoZSByZWNlaXZlIHBhdGguIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDkuNDIyMDEzMDQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzMTMwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3BfcmVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcC5oPTIyMz1pbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0yMjYtLyogQ29tbWFuZHMgQVBJICovXFxubmV0L25mYy9sbGNwLmg6MjI3OnZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcXG5uZXQvbmZjL2xsY3AuaC0yMjgtdTggKm5mY19sbGNwX2J1aWxkX3Rsdih1OCB0eXBlLCBjb25zdCB1OCAqdmFsdWUsIHU4IHZhbHVlX2xlbmd0aCwgdTggKnRsdl9sZW5ndGgpO1xcbi0tXFxubmV0L25mYy9sbGNwLmg9MjMzPXZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKnNkcF9oZWFkKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzQ6dm9pZCBuZmNfbGxjcF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpO1xcbm5ldC9uZmMvbGxjcC5oLTIzNS1pbnQgbmZjX2xsY3Bfc2VuZF9zeW1tKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9MzcxPWludCBuZmNfbGxjcF9zZW5kX3N5bW0oc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM5OS1cXHRlcnIgPSBuZmNfZGF0YV9leGNoYW5nZShkZXYsIGxvY2FsLVxcdTAwM2V0YXJnZXRfaWR4LCBza2IsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDAwOlxcdFxcdFxcdFxcdCBuZmNfbGxjcF9yZWN2LCBsb2NhbCk7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDAxLW91dDpcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9NzYxPXN0YXRpYyB2b2lkIG5mY19sbGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy03OTctXFx0XFx0XFx0cmV0ID0gbmZjX2RhdGFfZXhjaGFuZ2UobG9jYWwtXFx1MDAzZWRldiwgbG9jYWwtXFx1MDAzZXRhcmdldF9pZHgsXFxubmV0L25mYy9sbGNwX2NvcmUuYzo3OTg6XFx0XFx0XFx0XFx0XFx0XFx0c2tiLCBuZmNfbGxjcF9yZWN2LCBsb2NhbCk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy03OTktXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTg0OT1zdGF0aWMgY29uc3QgdTggKm5mY19sbGNwX2Nvbm5lY3Rfc24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90ICpzbl9sZW4pXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTg3NC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3NTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X3VpKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy04NzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy05MTAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo5MTE6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy05MTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xMDQyPWludCBuZmNfbGxjcF9xdWV1ZV9pX2ZyYW1lcyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA2OS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwNzA6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDcxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTYzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE2NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Rpc2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExNjUtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMDgtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjA5OnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfY2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMTAtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjUzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTI1NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjU1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTI5NS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyOTY6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9zbmwoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyOTctXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ0Ny1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0NDg6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9hZ2Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0NDkte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNDkyPXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTEyLVxcdFxcdHByX2RlYnVnKFxcXCJVSVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTEzOlxcdFxcdG5mY19sbGNwX3JlY3ZfdWkobG9jYWwsIHNrYik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTE0LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTE3LVxcdFxcdHByX2RlYnVnKFxcXCJDT05ORUNUXFxcXG5cXFwiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MTg6XFx0XFx0bmZjX2xsY3BfcmVjdl9jb25uZWN0KGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUyMi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRElTQ1xcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTIzOlxcdFxcdG5mY19sbGNwX3JlY3ZfZGlzYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjctXFx0XFx0cHJfZGVidWcoXFxcIkNDXFxcXG5cXFwiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1Mjg6XFx0XFx0bmZjX2xsY3BfcmVjdl9jYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzItXFx0XFx0cHJfZGVidWcoXFxcIkRNXFxcXG5cXFwiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MzM6XFx0XFx0bmZjX2xsY3BfcmVjdl9kbShsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzctXFx0XFx0cHJfZGVidWcoXFxcIlNOTFxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTM4OlxcdFxcdG5mY19sbGNwX3JlY3Zfc25sKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0NC1cXHRcXHRwcl9kZWJ1ZyhcXFwiSSBmcmFtZVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTQ1OlxcdFxcdG5mY19sbGNwX3JlY3ZfaGRsYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDktXFx0XFx0cHJfZGVidWcoXFxcIkFHRiBmcmFtZVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTUwOlxcdFxcdG5mY19sbGNwX3JlY3ZfYWdmKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1MS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTU1NT1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Ny1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1Nzg6c3RhdGljIHZvaWQgX19uZmNfbGxjcF9yZWN2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTc5LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4OS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1OTA6dm9pZCBuZmNfbGxjcF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTkxLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU5OC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1OTk6XFx0X19uZmNfbGxjcF9yZWN2KGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYwMC19XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE2MDI9aW50IG5mY19sbGNwX2RhdGFfcmVjZWl2ZWQoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE2MTI6XFx0X19uZmNfbGxjcF9yZWN2KGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDkuNjEzMzMyNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzNTMxNzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBORkMgTExDUCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGluIHRoZSBORkMgTExDUCBwcm90b2NvbCBwcm9jZXNzaW5nIHdpdGhpbiBgbmZjX2xsY3BfcmVjdl9oZGxjYCBhbmQgYG5mY19sbGNwX3JlY3ZfZG1gLiBCZWZvcmUsIHdlIHdlcmUgZ3JhYmJpbmcgc2VxdWVuY2UgaW5mb3JtYXRpb24gKGBuc2AsIGBucmApIGFuZCB0aGUgRE0gcmVhc29uIGNvZGUgd2l0aG91dCBwcm9wZXJseSB2ZXJpZnlpbmcgdGhlIGluY29taW5nIFNLQidzIGxlbmd0aC4gVGhhdCdzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IHBvaW50LlxuXG5TbywgdGhlIGZpeCBpbnRyb2R1Y2VzIGxlbmd0aCBjaGVja3M6IGVuc3VyaW5nIGBza2ItXHUwMDNlbGVuYCBpcyBzdWZmaWNpZW50IGJlZm9yZSBhY2Nlc3NpbmcgZGF0YSBiZXlvbmQgdGhlIGhlYWRlci4gR29vZCBjYXRjaCDigJMgdGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgYW4gaW1wb3J0YW50IHZ1bG5lcmFiaWxpdHkgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIHdvcnNlLCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSByZWFkcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBZZXMsIGFic29sdXRlbHkuIE5GQyBMTENQIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBORkMgc29ja2V0cyBhbmQgdmFyaW91cyBORkMgZHJpdmVycywgaW5jbHVkaW5nIHZpcnR1YWwgb25lcy4gQW5kIFN5emthbGxlciBpcyBhbHJlYWR5IHRhcmdldGluZyB0aGlzIGFyZWEhIFRoYXQncyBhIGh1Z2UgZ3JlZW4gZmxhZy4gU2Vjb25kLCBleGVjdXRhYmxlIGNvZGU6IGRlZmluaXRlbHkg4oCTIGl0J3MgcmlnaHQgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgcHJvdG9jb2wgc3RhY2sgd2l0aGluIGBuZXQvbmZjYC4gVGhpcmQsIGNvbnRyb2wgZmxvdy4gWWVzLCB0aGlzIHBhdGNoIGlzIGFkZGluZyBjaGVja3M7IGl0IGNoYW5nZXMgdGhlIHdheSB0aGUgY29kZSBoYW5kbGVzIGluY29taW5nIGRhdGEsIGFuZCB0aHVzIGFsdGVycyB0aGUgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBTS0IuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24/IEJhc2VkIG9uIHJlYWNoYWJpbGl0eSwgdGhlIGFkZGl0aW9uIG9mIGRlZmVuc2l2ZSBjaGVja3MsIGFuZCB0aGUgZmFjdCB0aGlzIGlzIGluIGNvcmUgbmV0d29ya2luZywgdGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlncyB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzLiBXZSBuZWVkIGBORkNgIGVuYWJsZWQsIHdoaWNoIHJlbGllcyBvbiBgUkZLSUxMYC4gRnJvbSB0aGVyZSwgd2Ugd2FudCB0byBrbm93IGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBsaWtlIGBDT05GSUdfTkZDX1NJTWAgb3IgYENPTkZJR19ORkNfRElHSVRBTGAgaW4gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBMTENQIGFuZCB2aXJ0dWFsIE5GQyB0ZXN0aW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHRlc3RpbmcuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NTMuOTQ4NjUzMjA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIk5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBORkNcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIE5GQ19UUkY3OTcwQVxcbiAgMTA6XFx0XFx0dHJpc3RhdGUgXFxcIlRleGFzIEluc3RydW1lbnRzIFRSRjc5NzBhIE5GQyBkcml2ZXJcXFwiXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFNQSSBcXHUwMDI2XFx1MDAyNiBORkNfRElHSVRBTCBcXHUwMDI2XFx1MDAyNiBHUElPTElCXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIE5GQyBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzJyBUUkY3OTcwYVxcbiAgMTQ6XFx0XFx0ICBkZXZpY2UuIFN1Y2ggZGV2aWNlIHN1cHBvcnRzIDUgZGlmZmVyZW50IHByb3RvY29sczogSVNPMTQ0NDNBLFxcbiAgMTU6XFx0XFx0ICBJU08xNDQ0M0IsIEZlTGlDYSwgSVNPMTU2OTMgYW5kIElTTzE4MDAwLTMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIFRSRjc5NzBhIGludG8gdGhlIGtlcm5lbCBvclxcbiAgMTg6XFx0XFx0ICBzYXkgTSAgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTk6XFx0XFx0ICB0cmY3OTcwYS5rby5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE5GQ19NRUlfUEhZXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTUVJIGJ1cyBORkMgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uIElOVEVMX01FSSBcXHUwMDI2XFx1MDAyNiBORkNfSENJXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IHRvIHVzZSBhbiBtZWkgYnVzIG5mYyBkZXZpY2UuIFNlbGVjdCB0aGlzIGlmIHlvdVxcbiAgMjY6XFx0XFx0ICB3aWxsIHVzZSBhbiBIQ0kgTkZDIGRyaXZlciBmb3IgYW4gTkZDIGNoaXAgY29ubmVjdGVkIGJlaGluZCBhblxcbiAgMjc6XFx0XFx0ICBJbnRlbCdzIE1hbmFnZW1lbnQgRW5naW5lIGNoaXAuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIE5GQ19TSU1cXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgaGFyZHdhcmUgc2ltdWxhdG9yIGRyaXZlclxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBkcml2ZXIgZGVjbGFyZXMgdHdvIHZpcnR1YWwgTkZDIGRldmljZXMgc3VwcG9ydGluZyBORkMtREVQXFxuICAzNjpcXHRcXHQgIHByb3RvY29sLiBBbiBMTENQIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlbSBhbmRcXG4gIDM3OlxcdFxcdCAgYWxsIHBhY2tldHMgc2VudCBmcm9tIG9uZSBkZXZpY2UgaXMgc2VudCBiYWNrIHRvIHRoZSBvdGhlciwgYWN0aW5nIGFzXFxuICAzODpcXHRcXHQgIGxvb3BiYWNrIGRldmljZXMuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NTMuOTQ4Nzc0Njg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NzUxODM0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTkZDIExMQ1AgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTkZDIExMQ1AgZnV6emluZyBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX05GQ2AgaXMgdGhlIGtleSBlbmFibGVyIGZvciBgbGxjcF9jb3JlLmNgLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGlzLiBgQ09ORklHX05GQ19ESUdJVEFMYCBhbmQgYENPTkZJR19ORkNfU0lNYCBsb29rIGxpa2UgdmlydHVhbCBkcml2ZXJzIHNwZWNpZmljYWxseSBmb3IgZnV6emluZywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLlxuXG5JIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgdG8gYmUgYG5mY19sbGNwX3JlY3ZfaGRsY2AgYW5kIGBuZmNfbGxjcF9yZWN2X2RtYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIHN0YXRpYywgc28gSSBjaGVja2VkIHRoZSBjb2RlIGluIGBuZXQvbmZjL2xsY3BfY29yZS5jYC4gTGluZSAxMDcwIGNvbmZpcm1zIGBuZmNfbGxjcF9yZWN2X2hkbGNgIGlzIHN0YXRpYywgYW5kIGxpbmUgMTI1NCBzaG93cyBgbmZjX2xsY3BfcmVjdl9kbWAgaXMgYWxzbyBzdGF0aWMuIEV2ZW4gc3RhdGljIGZ1bmN0aW9ucyBoYXZlIHN5bWJvbHMgaW4gdm1saW51eCwgc28gbGV0J3Mga2VlcCBhbiBleWUgb24gdGhvc2UuXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGFueSByZWxhdGVkIGVudHJ5IHBvaW50cywgc28gYG5mY19sbGNwX3J4X3NrYmAsIGBuZmNfbGxjcF9yZWN2YCBhbmQgYG5mY19sbGNwX2RhdGFfcmVjZWl2ZWRgIGNhdWdodCBteSBleWUuXG5cbk5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRob3NlIGFyZSBzdWl0YWJsZSBgRm9jdXNTeW1ib2xzYC4gWWVzLCB0aGV5IGFyZSBmZWF0dXJlLXNwZWNpZmljIGFuZCBwYXRjaGVkLiBUaGVyZWZvcmUsIHRoZSBsaXN0IGZvciBgRm9jdXNTeW1ib2xzYCBpcyBnb2luZyB0byBpbmNsdWRlOiBgbmZjX2xsY3BfcmVjdl9oZGxjYCwgYG5mY19sbGNwX3JlY3ZfZG1gLCBgbmZjX2xsY3Bfcnhfc2tiYCwgYG5mY19sbGNwX2RhdGFfcmVjZWl2ZWRgLCBhbmQgYG5mY19sbGNwX3JlY3ZgLlxuXG5Gb3IgdGhlIGBFbmFibGVDb25maWdzYCwgSSdtIHByZXR0eSBzdXJlIGBORkNgLCBgTkZDX0RJR0lUQUxgLCBhbmQgYE5GQ19TSU1gIGFyZSB0aGUgcmlnaHQgb25lcy4gSSBuZWVkZWQgdG8gdmVyaWZ5IHRoaXMuIENoZWNraW5nIHRoZSBgbmV0L25mYy9NYWtlZmlsZWAgY29uZmlybXMgdGhpcy4gYG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vYCB0ZWxscyBtZSBgTkZDYCBpcyByZXF1aXJlZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1vZHVsZSBzdWdnZXN0cyB0aGF0IGBORkNfRElHSVRBTGAgYW5kIGBORkNfU0lNYCBhcmUgdGhlIHZpcnR1YWwgdGVzdCBlbmFibGVycy5cblxuRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSd2ZSBmb2xsb3dlZCBhbGwgb2YgdGhlIHN0ZXBzIGluIHRoZSBpbnN0cnVjdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQgc2hvdWxkIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIm5mY19sbGNwX3JlY3ZfaGRsY1wiLCBcIm5mY19sbGNwX3JlY3ZfZG1cIiwgXCJuZmNfbGxjcF9yeF9za2JcIiwgXCJuZmNfbGxjcF9yZWN2XCIsIFwibmZjX2xsY3BfZGF0YV9yZWNlaXZlZFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJORkNcIiwgXCJORkNfRElHSVRBTFwiLCBcIk5GQ19TSU1cIl1gXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIHVuZGVyc3RhbmRhYmxlLlxuXG5Ob3cgSSdtIHJlYWR5IHRvIG1ha2UgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjIsIk91dHB1dFRva2VucyI6MjAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NTkuOTIzOTYxMjUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MTc3OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19ESUdJVEFMXCIsXG4gICAgXCJORkNfU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZjX2xsY3BfcmVjdl9oZGxjXCIsXG4gICAgXCJuZmNfbGxjcF9yZWN2X2RtXCIsXG4gICAgXCJuZmNfbGxjcF9yeF9za2JcIixcbiAgICBcIm5mY19sbGNwX3JlY3ZcIixcbiAgICBcIm5mY19sbGNwX2RhdGFfcmVjZWl2ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBhY2tldCBsZW5ndGggYm91bmRhcnkgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBtYWxmb3JtZWQgTExDUCBwYWNrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHByb3RvY29sIGxvZ2ljIGluIHRoZSBORkMgTExDUCBsYXllciwgd2hpY2ggaXMgYWNjZXNzaWJsZSBhbmQgZnV6emFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIE5GQyBkcml2ZXJzIChlLmcuIG5mY3NpbSkgYW5kIEFGX05GQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX0RJR0lUQUxcIixcbiAgICBcIk5GQ19TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9yZWN2X2hkbGNcIixcbiAgICBcIm5mY19sbGNwX3JlY3ZfZG1cIixcbiAgICBcIm5mY19sbGNwX3J4X3NrYlwiLFxuICAgIFwibmZjX2xsY3BfcmVjdlwiLFxuICAgIFwibmZjX2xsY3BfZGF0YV9yZWNlaXZlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGFja2V0IGxlbmd0aCBib3VuZGFyeSBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIG1hbGZvcm1lZCBMTENQIHBhY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gdGhlIE5GQyBMTENQIGxheWVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgTkZDIGRyaXZlcnMgKGUuZy4gbmZjc2ltKSBhbmQgQUZfTkZDIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjAwLjEyODE1MDc0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0OTYxMTI4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MTowMC4xMjk3NjQ4NDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTQ5NDQ5MjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVxcdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc5MTlkNTAwNWU0YTFmYzViNDlkZWMxOGY3OGFkYjI2NDQ2ZDQ0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDQ6NTA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuaW5kZXggY2FjMWI1NDg3MDY0ZC4uODlkNmY0NTk5ZTExYSAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmNcbisrKyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcbkBAIC0xMDc3LDYgKzEwNzcsMTIgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gXHRwdHlwZSA9IG5mY19sbGNwX3B0eXBlKHNrYik7XG4gXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuIFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XG4rXHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xuIFx0bnIgPSBuZmNfbGxjcF9ucihza2IpO1xuIFxuQEAgLTEyNTQsNiArMTI2MCwxMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gXG4gXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuIFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgMSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0cmVhc29uID0gc2tiLVx1MDAzZWRhdGFbMl07XG4gXG4gXHRwcl9kZWJ1ZyhcIiVkICVkIHJlYXNvbiAlZFxcblwiLCBzc2FwLCBkc2FwLCByZWFzb24pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MDAuMTI5NzY2OTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTYwMzc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkFzc2Vzc2luZyB0aGUgTmVlZCBmb3IgS01TQU4gRnV6emluZyBvbiBUaGlzIFBhdGNoKipcblxuQWxyaWdodCwgdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQgZm9yIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgYXJlYXMgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gR2l2ZW4gdGhlIGRvbWFpbiwgSSdtIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9ucyB3aXRoIHNoYXJlZCByZXNvdXJjZXMsIGJ1ZmZlcnMsIG9yIGRhdGEgc3RydWN0dXJlcy4gVGhlIG5mYyBzdWJzeXN0ZW0gaXMsIG9mIGNvdXJzZSwgaW50ZXJlc3RpbmcuXG5cblRoZXJlZm9yZSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgbmV0L25mYy9sbGNwX2NvcmUuY2AuIEknbGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBsaW5lcyBhcm91bmQgMTA3NyBhbmQgMTI1NC4gVGhvc2UgbGluZSBudW1iZXJzIGdpdmUgbWUgYSBzdGFydGluZyBwb2ludCwgbGlrZWx5IGluZGljYXRpdmUgb2YgaW50ZXJlc3RpbmcgY29udHJvbCBmbG93IG9yIGRhdGEgbWFuaXB1bGF0aW9uLiBJJ2xsIHJlYWQgd2l0aCBhbiBleWUgZm9yIGFueSBwb2ludGVyIGFyaXRobWV0aWMsIGJ1ZmZlciBhY2Nlc3Nlcywgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZm9jdXNpbmcgb24gaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgYWxsb2NhdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYSBLTVNBTiBydW4gd291bGQgYmUgYmVuZWZpY2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMSwiT3V0cHV0VG9rZW5zIjo4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MDYuNjQ1ODA5MjM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzA6XFx0c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuMTA3MTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcyOlxcdHtcXG4xMDczOlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XFxuMTA3NDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMTA3NTpcXHRcXHR1OCBkc2FwLCBzc2FwLCBwdHlwZSwgbnMsIG5yO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRwdHlwZSA9IG5mY19sbGNwX3B0eXBlKHNrYik7XFxuMTA3ODpcXHRcXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xcbjEwNzk6XFx0XFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcXG4xMDgwOlxcdFxcbjEwODE6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIExMQ1BfU0VRVUVOQ0VfU0laRSkge1xcbjEwODI6XFx0XFx0XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xcbjEwODM6XFx0XFx0XFx0cmV0dXJuO1xcbjEwODQ6XFx0XFx0fVxcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRucyA9IG5mY19sbGNwX25zKHNrYik7XFxuMTA4NzpcXHRcXHRuciA9IG5mY19sbGNwX25yKHNrYik7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdHByX2RlYnVnKFxcXCIlZCAlZCBSICVkIFMgJWRcXFxcblxcXCIsIGRzYXAsIHNzYXAsIG5yLCBucyk7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2tfZ2V0KGxvY2FsLCBkc2FwLCBzc2FwKTtcXG4xMDkyOlxcdFxcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xcbjEwOTM6XFx0XFx0XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xcbjEwOTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjEwOTU6XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRzayA9IFxcdTAwMjZsbGNwX3NvY2stXFx1MDAzZXNrO1xcbjEwOTg6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xMDk5OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9DTE9TRUQpIHtcXG4xMTAwOlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTEwMTpcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3B1dChsbGNwX3NvY2spO1xcbjExMDI6XFx0XFx0XFx0cmV0dXJuO1xcbjExMDM6XFx0XFx0fVxcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHQvKiBQYXNzIHRoZSBwYXlsb2FkIHVwc3RyZWFtICovXFxuMTEwNjpcXHRcXHRpZiAocHR5cGUgPT0gTExDUF9QRFVfSSkge1xcbjExMDc6XFx0XFx0XFx0cHJfZGVidWcoXFxcIkkgZnJhbWUsIHF1ZXVlaW5nIG9uICVwXFxcXG5cXFwiLCBcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2Vzayk7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdFxcdGlmIChucyA9PSBsbGNwX3NvY2stXFx1MDAzZXJlY3ZfbilcXG4xMTEwOlxcdFxcdFxcdFxcdGxsY3Bfc29jay1cXHUwMDNlcmVjdl9uID0gKGxsY3Bfc29jay1cXHUwMDNlcmVjdl9uICsgMSkgJSAxNjtcXG4xMTExOlxcdFxcdFxcdGVsc2VcXG4xMTEyOlxcdFxcdFxcdFxcdHByX2VycihcXFwiUmVjZWl2ZWQgb3V0IG9mIHNlcXVlbmNlIEkgUERVXFxcXG5cXFwiKTtcXG4xMTEzOlxcdFxcbjExMTQ6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKTtcXG4xMTE1OlxcdFxcdFxcdGlmICghc29ja19xdWV1ZV9yY3Zfc2tiKFxcdTAwMjZsbGNwX3NvY2stXFx1MDAzZXNrLCBza2IpKSB7XFxuMTExNjpcXHRcXHRcXHRcXHQvKlxcbjExMTc6XFx0XFx0XFx0XFx0ICogSSBmcmFtZXMgd2lsbCBiZSBmcmVlZCBmcm9tIHRoZSBzb2NrZXQgbGF5ZXIsIHNvIHdlXFxuMTExODpcXHRcXHRcXHRcXHQgKiBuZWVkIHRvIGtlZXAgdGhlbSBhbGl2ZSB1bnRpbCBzb21lb25lIHJlY2VpdmVzIHRoZW0uXFxuMTExOTpcXHRcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MDYuNjQ1OTYyNzc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDU6XFx0XFxuMTI0NjpcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NPTk5FQ1RFRDtcXG4xMjQ3OlxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbjEyNDg6XFx0XFxuMTI0OTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjEyNTA6XFx0XFxuMTI1MTpcXHRcXHRuZmNfbGxjcF9zb2NrX3B1dChsbGNwX3NvY2spO1xcbjEyNTI6XFx0fVxcbjEyNTM6XFx0XFxuMTI1NDpcXHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuMTI1NTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMTI1NjpcXHR7XFxuMTI1NzpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xcbjEyNTg6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjEyNTk6XFx0XFx0dTggZHNhcCwgc3NhcCwgcmVhc29uO1xcbjEyNjA6XFx0XFxuMTI2MTpcXHRcXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xcbjEyNjI6XFx0XFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcXG4xMjYzOlxcdFxcbjEyNjQ6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIDEpXFxuMTI2NTpcXHRcXHRcXHRyZXR1cm47XFxuMTI2NjpcXHRcXG4xMjY3OlxcdFxcdHJlYXNvbiA9IHNrYi1cXHUwMDNlZGF0YVsyXTtcXG4xMjY4OlxcdFxcbjEyNjk6XFx0XFx0cHJfZGVidWcoXFxcIiVkICVkIHJlYXNvbiAlZFxcXFxuXFxcIiwgc3NhcCwgZHNhcCwgcmVhc29uKTtcXG4xMjcwOlxcdFxcbjEyNzE6XFx0XFx0c3dpdGNoIChyZWFzb24pIHtcXG4xMjcyOlxcdFxcdGNhc2UgTExDUF9ETV9OT0JPVU5EOlxcbjEyNzM6XFx0XFx0Y2FzZSBMTENQX0RNX1JFSjpcXG4xMjc0OlxcdFxcdFxcdGxsY3Bfc29jayA9IG5mY19sbGNwX2Nvbm5lY3Rpbmdfc29ja19nZXQobG9jYWwsIGRzYXApO1xcbjEyNzU6XFx0XFx0XFx0YnJlYWs7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdGRlZmF1bHQ6XFxuMTI3ODpcXHRcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrX2dldChsb2NhbCwgZHNhcCwgc3NhcCk7XFxuMTI3OTpcXHRcXHRcXHRicmVhaztcXG4xMjgwOlxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XFxuMTI4MzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiQWxyZWFkeSBjbG9zZWRcXFxcblxcXCIpO1xcbjEyODQ6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MTowNi42NDYwNzY1OTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5ODM1NDg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIExMQ1AgRGV0YWlscyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgTExDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRob3NlIGtleSB2YXJpYWJsZXMg4oCTIGBuZmNfbGxjcF9uc2AsIGBuZmNfbGxjcF9ucmAsIGBuZmNfbGxjcF9wdHlwZWAsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhleSdyZSBkZWZpbmVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgc3VzcGVjdCB0aGV5J2xsIGJlIGluIG9uZSBvZiB0aGUgcmVsZXZhbnQgaGVhZGVycywgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluLlxuXG5CZXlvbmQganVzdCBmaW5kaW5nIHRoZWlyIGRlZmluaXRpb25zLCBJIGFsc28gbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhlYWRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyLCB0aGUgYXJyYW5nZW1lbnQgb2YgaXRzIGZpZWxkcywgYW5kIGFueSBwb3RlbnRpYWwgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoaXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBlZmZpY2llbnQgcGFja2V0IGNyYWZ0aW5nIGFuZCBwYXJzaW5nLCBhbmQgZm9yIGRlYnVnZ2luZyBhbnkgbG93ZXItbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm9ibGVtcyB0aGF0IG1pZ2h0IGFyaXNlLiBUaGUgc3BlY2lmaWMgYnl0ZSBsYXlvdXQgaXMgcHJvYmFibHkgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjA5LjQ0NDQzNDkxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDc5NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTExDUF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwLmg9Nj1lbnVtIGxsY3Bfc3RhdGUge1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMTMtXFxubmV0L25mYy9sbGNwLmg6MTQ6I2RlZmluZSBMTENQX0RFRkFVTFRfTFRPIDEwMFxcbm5ldC9uZmMvbGxjcC5oOjE1OiNkZWZpbmUgTExDUF9ERUZBVUxUX1JXICAxXFxubmV0L25mYy9sbGNwLmg6MTY6I2RlZmluZSBMTENQX0RFRkFVTFRfTUlVIDEyOFxcbm5ldC9uZmMvbGxjcC5oLTE3LVxcbm5ldC9uZmMvbGxjcC5oOjE4OiNkZWZpbmUgTExDUF9NQVhfTFRPICAweGZmXFxubmV0L25mYy9sbGNwLmg6MTk6I2RlZmluZSBMTENQX01BWF9SVyAgIDE1XFxubmV0L25mYy9sbGNwLmg6MjA6I2RlZmluZSBMTENQX01BWF9NSVVYIDB4N2ZmXFxubmV0L25mYy9sbGNwLmg6MjE6I2RlZmluZSBMTENQX01BWF9NSVUgKExMQ1BfTUFYX01JVVggKyAxMjgpXFxubmV0L25mYy9sbGNwLmgtMjItXFxubmV0L25mYy9sbGNwLmg6MjM6I2RlZmluZSBMTENQX1dLU19OVU1fU0FQICAgMTZcXG5uZXQvbmZjL2xsY3AuaDoyNDojZGVmaW5lIExMQ1BfU0RQX05VTV9TQVAgICAxNlxcbm5ldC9uZmMvbGxjcC5oOjI1OiNkZWZpbmUgTExDUF9MT0NBTF9OVU1fU0FQIDMyXFxubmV0L25mYy9sbGNwLmg6MjY6I2RlZmluZSBMTENQX0xPQ0FMX1NBUF9PRkZTRVQgKExMQ1BfV0tTX05VTV9TQVAgKyBMTENQX1NEUF9OVU1fU0FQKVxcbm5ldC9uZmMvbGxjcC5oOjI3OiNkZWZpbmUgTExDUF9NQVhfU0FQIChMTENQX1dLU19OVU1fU0FQICsgTExDUF9TRFBfTlVNX1NBUCArIExMQ1BfTE9DQUxfTlVNX1NBUClcXG5uZXQvbmZjL2xsY3AuaDoyODojZGVmaW5lIExMQ1BfU0RQX1VOQk9VTkQgICAoTExDUF9NQVhfU0FQICsgMSlcXG5uZXQvbmZjL2xsY3AuaC0yOS1cXG4tLVxcbm5ldC9uZmMvbGxjcC5oPTE0MT1zdHJ1Y3QgbmZjX2xsY3BfdWlfY2Ige1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMTUwLVxcbm5ldC9uZmMvbGxjcC5oOjE1MTojZGVmaW5lIExMQ1BfSEVBREVSX1NJWkUgICAyXFxubmV0L25mYy9sbGNwLmg6MTUyOiNkZWZpbmUgTExDUF9TRVFVRU5DRV9TSVpFIDFcXG5uZXQvbmZjL2xsY3AuaDoxNTM6I2RlZmluZSBMTENQX0FHRl9QRFVfSEVBREVSX1NJWkUgMlxcbm5ldC9uZmMvbGxjcC5oLTE1NC1cXG5uZXQvbmZjL2xsY3AuaC0xNTUtLyogTExDUCB2ZXJzaW9uczogMS4xIGlzIDEuMCBwbHVzIFNEUCAqL1xcbm5ldC9uZmMvbGxjcC5oOjE1NjojZGVmaW5lIExMQ1BfVkVSU0lPTl8xMCAweDEwXFxubmV0L25mYy9sbGNwLmg6MTU3OiNkZWZpbmUgTExDUF9WRVJTSU9OXzExIDB4MTFcXG5uZXQvbmZjL2xsY3AuaC0xNTgtXFxubmV0L25mYy9sbGNwLmgtMTU5LS8qIExMQ1AgUERVIHR5cGVzICovXFxubmV0L25mYy9sbGNwLmg6MTYwOiNkZWZpbmUgTExDUF9QRFVfU1lNTSAgICAgMHgwXFxubmV0L25mYy9sbGNwLmg6MTYxOiNkZWZpbmUgTExDUF9QRFVfUEFYICAgICAgMHgxXFxubmV0L25mYy9sbGNwLmg6MTYyOiNkZWZpbmUgTExDUF9QRFVfQUdGICAgICAgMHgyXFxubmV0L25mYy9sbGNwLmg6MTYzOiNkZWZpbmUgTExDUF9QRFVfVUkgICAgICAgMHgzXFxubmV0L25mYy9sbGNwLmg6MTY0OiNkZWZpbmUgTExDUF9QRFVfQ09OTkVDVCAgMHg0XFxubmV0L25mYy9sbGNwLmg6MTY1OiNkZWZpbmUgTExDUF9QRFVfRElTQyAgICAgMHg1XFxubmV0L25mYy9sbGNwLmg6MTY2OiNkZWZpbmUgTExDUF9QRFVfQ0MgICAgICAgMHg2XFxubmV0L25mYy9sbGNwLmg6MTY3OiNkZWZpbmUgTExDUF9QRFVfRE0gICAgICAgMHg3XFxubmV0L25mYy9sbGNwLmg6MTY4OiNkZWZpbmUgTExDUF9QRFVfRlJNUiAgICAgMHg4XFxubmV0L25mYy9sbGNwLmg6MTY5OiNkZWZpbmUgTExDUF9QRFVfU05MICAgICAgMHg5XFxubmV0L25mYy9sbGNwLmg6MTcwOiNkZWZpbmUgTExDUF9QRFVfSSAgICAgICAgMHhjXFxubmV0L25mYy9sbGNwLmg6MTcxOiNkZWZpbmUgTExDUF9QRFVfUlIgICAgICAgMHhkXFxubmV0L25mYy9sbGNwLmg6MTcyOiNkZWZpbmUgTExDUF9QRFVfUk5SICAgICAgMHhlXFxubmV0L25mYy9sbGNwLmgtMTczLVxcbm5ldC9uZmMvbGxjcC5oLTE3NC0vKiBQYXJhbWV0ZXJzIFRMViB0eXBlcyAqL1xcbm5ldC9uZmMvbGxjcC5oOjE3NTojZGVmaW5lIExMQ1BfVExWX1ZFUlNJT04gMHgxXFxubmV0L25mYy9sbGNwLmg6MTc2OiNkZWZpbmUgTExDUF9UTFZfTUlVWCAgICAweDJcXG5uZXQvbmZjL2xsY3AuaDoxNzc6I2RlZmluZSBMTENQX1RMVl9XS1MgICAgIDB4M1xcbm5ldC9uZmMvbGxjcC5oOjE3ODojZGVmaW5lIExMQ1BfVExWX0xUTyAgICAgMHg0XFxubmV0L25mYy9sbGNwLmg6MTc5OiNkZWZpbmUgTExDUF9UTFZfUlcgICAgICAweDVcXG5uZXQvbmZjL2xsY3AuaDoxODA6I2RlZmluZSBMTENQX1RMVl9TTiAgICAgIDB4Nlxcbm5ldC9uZmMvbGxjcC5oOjE4MTojZGVmaW5lIExMQ1BfVExWX09QVCAgICAgMHg3XFxubmV0L25mYy9sbGNwLmg6MTgyOiNkZWZpbmUgTExDUF9UTFZfU0RSRVEgICAweDhcXG5uZXQvbmZjL2xsY3AuaDoxODM6I2RlZmluZSBMTENQX1RMVl9TRFJFUyAgIDB4OVxcbm5ldC9uZmMvbGxjcC5oOjE4NDojZGVmaW5lIExMQ1BfVExWX01BWCAgICAgMHhhXFxubmV0L25mYy9sbGNwLmgtMTg1LVxcbm5ldC9uZmMvbGxjcC5oLTE4Ni0vKiBXZWxsIGtub3duIExMQ1AgU0FQICovXFxubmV0L25mYy9sbGNwLmg6MTg3OiNkZWZpbmUgTExDUF9TQVBfU0RQICAgMHgxXFxubmV0L25mYy9sbGNwLmg6MTg4OiNkZWZpbmUgTExDUF9TQVBfSVAgICAgMHgyXFxubmV0L25mYy9sbGNwLmg6MTg5OiNkZWZpbmUgTExDUF9TQVBfT0JFWCAgMHgzXFxubmV0L25mYy9sbGNwLmg6MTkwOiNkZWZpbmUgTExDUF9TQVBfU05FUCAgMHg0XFxubmV0L25mYy9sbGNwLmg6MTkxOiNkZWZpbmUgTExDUF9TQVBfTUFYICAgMHhmZlxcbm5ldC9uZmMvbGxjcC5oLTE5Mi1cXG5uZXQvbmZjL2xsY3AuaC0xOTMtLyogRGlzY29ubmVjdGlvbiByZWFzb24gY29kZSAqL1xcbm5ldC9uZmMvbGxjcC5oOjE5NDojZGVmaW5lIExMQ1BfRE1fRElTQyAgICAweDAwXFxubmV0L25mYy9sbGNwLmg6MTk1OiNkZWZpbmUgTExDUF9ETV9OT0NPTk4gIDB4MDFcXG5uZXQvbmZjL2xsY3AuaDoxOTY6I2RlZmluZSBMTENQX0RNX05PQk9VTkQgMHgwMlxcbm5ldC9uZmMvbGxjcC5oOjE5NzojZGVmaW5lIExMQ1BfRE1fUkVKICAgICAweDAzXFxubmV0L25mYy9sbGNwLmgtMTk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MTowOS41NTI5MjE5MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwNjE4NjU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG5mY19sbGNwX25zYCBhbmQgYG5mY19sbGNwX25yYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGUgc3lzdGVtIGlzIGRvaW5nIHdpdGggdGhlc2UgdHdvIHZhcmlhYmxlcywgYG5mY19sbGNwX25zYCBhbmQgYG5mY19sbGNwX25yYC4gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBkZWx2aW5nIGludG8gdGhlaXIgcHVycG9zZSBhbmQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHJvbGVzIHdpdGhpbiB0aGUgTkZDIExvdyBMZXZlbCBDb21tdW5pY2F0aW9uIFByb3RvY29sIChMTENQKSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGF0IGRvIFwiTlNcIiBhbmQgXCJOUlwiIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQ/IEFyZSB0aGV5IHNlcXVlbmNlIG51bWJlcnMsIGNvdW50ZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQXJlIHRoZXkgcmVsYXRlZCB0byBzZW5kaW5nIG9yIHJlY2VpdmluZz8gQXJlIHRoZXkgbGlua2VkIHRvIGFueSBzcGVjaWZpYyBMTENQIGZyYW1lIHR5cGVzLCBsaWtlIEluZm9ybWF0aW9uIChJKSwgVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAoVUkpLCBvciBTdXBlcnZpc29yeSAoUyk/IFRoZSBkZXRhaWxzIHdpbGwgbGlrZWx5IGJlIGJ1cmllZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgc28gSSdsbCBwcm9iYWJseSBoYXZlIHRvIHRyYWNlIHRoZWlyIHVzYWdlIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZW4gaXQncyBhYm91dCBjb25uZWN0aW5nIHRoZXNlIHZhcmlhYmxlcyB0byBob3cgdGhlIE5GQyBjb250cm9sbGVyIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGRldmljZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJJ20gbG9va2luZyBhdCBhIHNlbmRlci9yZWNlaXZlciByZWxhdGlvbnNoaXAgb3Igd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gYSBwZWVyLXRvLXBlZXIgY29ubmVjdGlvbi4gVWx0aW1hdGVseSwgZmlndXJpbmcgb3V0IHdoYXQgdGhlc2UgdmFyaWFibGVzIHN0YW5kIGZvciBpcyB0aGUgaW5pdGlhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29tbXVuaWNhdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MTEuNzU5MTExNjc1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcwODA3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfbltzcl1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwX2NvcmUuYz02OTk9c3RhdGljIHU4IG5mY19sbGNwX3NzYXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzAzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6NzA0OnN0YXRpYyB1OCBuZmNfbGxjcF9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzA1LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzA4LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6NzA5OnN0YXRpYyB1OCBuZmNfbGxjcF9ucihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzEwLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTA3MD1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4NS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwODY6XFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4NzpcXHRuciA9IG5mY19sbGNwX25yKHNrYik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDg4LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTM0LVxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNldHhfcGVuZGluZ19xdWV1ZSwgcywgdG1wKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMTM1OlxcdFxcdFxcdG4gPSBuZmNfbGxjcF9ucyhzKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjExLjg5NjE5ODk5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU1MjU3MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBsbGNwX2NvcmUuYzogTGluZXMgNjk1LTcyMCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBMTENQIGNvcmUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjk1LTcyMC4gTGV0IG1lIHB1bGwgdGhhdCB1cC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBidXQgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSSBrbm93IHRoaXMgYXJlYSBkZWFscyB3aXRoLi4uICpbcGF1c2VzLCBtZW50YWxseSByZXZpZXdpbmcgbGxjcF9jb3JlJ3MgZnVuY3Rpb25dKiAuLi5wcm9iYWJseSB0aGUgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGxvZ2ljLCBvciBwZXJoYXBzIHNlc3Npb24gZXN0YWJsaXNobWVudC90ZXJtaW5hdGlvbiwgb3IgcG9zc2libHkgZGF0YSB0cmFuc21pc3Npb24gZmxvdyBjb250cm9sLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQncyBsaWtlbHkgYSByZWxhdGl2ZWx5IGZvY3VzZWQgYml0IG9mIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBvciBjb2RlIGJsb2NrIHRoZXNlIGxpbmVzIGJlbG9uZyB0byB3aXRoaW4gdGhlIGxhcmdlciBMTENQIGNvbnRleHQuIElzIHRoaXMgcGFydCBvZiB0aGUgY29ubmVjdCByZXF1ZXN0IGhhbmRsaW5nPyBUaGUgZGF0YSBhY2tub3dsZWRnbWVudCBwcm9jZXNzPyBPciBtYXliZSBpdCdzIHJlbGF0ZWQgdG8gdGhlIHRpbWVyIG1hbmFnZW1lbnQgZm9yIGtlZXAtYWxpdmUgcGFja2V0cyBvciBjb25uZWN0aW9uIHRpbWVvdXRzPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsbHkgc3VidGxlIGVycm9yIGhhbmRsaW5nIG9yIHN0YXRlIHRyYW5zaXRpb24gbG9naWMgaGVyZSwgZ2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJ20gaG9waW5nIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24sIHRob3VnaCB3aXRoIExMQ1AncyBpbmhlcmVudCB0aHJlYWRpbmcgbW9kZWwsIHRoYXQncyBhbHdheXMgYSBwb3NzaWJpbGl0eS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKnNheXMqLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IGFuZCB0aGVuIHpvb20gaW4gb24gYW55IHBhcnRpY3VsYXJseSBkZW5zZSBvciBjb21wbGV4LWxvb2tpbmcgY29uZGl0aW9uYWwgYnJhbmNoZXMuIE15IGFpbSBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbnRlbnRpb24gb2YgdGhlIGNvZGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTExDUCBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjE0LjU1MTQ2MDMxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTU6XFx0e1xcbiA2OTY6XFx0XFx0cmV0dXJuICgocGR1LVxcdTAwM2VkYXRhWzBdIFxcdTAwMjYgMHgwMykgXFx1MDAzY1xcdTAwM2MgMikgfCAoKHBkdS1cXHUwMDNlZGF0YVsxXSBcXHUwMDI2IDB4YzApIFxcdTAwM2VcXHUwMDNlIDYpO1xcbiA2OTc6XFx0fVxcbiA2OTg6XFx0XFxuIDY5OTpcXHRzdGF0aWMgdTggbmZjX2xsY3Bfc3NhcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbiA3MDA6XFx0e1xcbiA3MDE6XFx0XFx0cmV0dXJuIHBkdS1cXHUwMDNlZGF0YVsxXSBcXHUwMDI2IDB4M2Y7XFxuIDcwMjpcXHR9XFxuIDcwMzpcXHRcXG4gNzA0OlxcdHN0YXRpYyB1OCBuZmNfbGxjcF9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbiA3MDU6XFx0e1xcbiA3MDY6XFx0XFx0cmV0dXJuIHBkdS1cXHUwMDNlZGF0YVsyXSBcXHUwMDNlXFx1MDAzZSA0O1xcbiA3MDc6XFx0fVxcbiA3MDg6XFx0XFxuIDcwOTpcXHRzdGF0aWMgdTggbmZjX2xsY3BfbnIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcXG4gNzEwOlxcdHtcXG4gNzExOlxcdFxcdHJldHVybiBwZHUtXFx1MDAzZWRhdGFbMl0gXFx1MDAyNiAweGY7XFxuIDcxMjpcXHR9XFxuIDcxMzpcXHRcXG4gNzE0OlxcdHN0YXRpYyB2b2lkIG5mY19sbGNwX3NldF9ucm5zKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbiA3MTU6XFx0e1xcbiA3MTY6XFx0XFx0cGR1LVxcdTAwM2VkYXRhWzJdID0gKHNvY2stXFx1MDAzZXNlbmRfbiBcXHUwMDNjXFx1MDAzYyA0KSB8IChzb2NrLVxcdTAwM2VyZWN2X24pO1xcbiA3MTc6XFx0XFx0c29jay1cXHUwMDNlc2VuZF9uID0gKHNvY2stXFx1MDAzZXNlbmRfbiArIDEpICUgMTY7XFxuIDcxODpcXHRcXHRzb2NrLVxcdTAwM2VyZWN2X2Fja19uID0gKHNvY2stXFx1MDAzZXJlY3ZfbiAtIDEpICUgMTY7XFxuIDcxOTpcXHR9XFxuIDcyMDpcXHRcXG4gNzIxOlxcdHZvaWQgbmZjX2xsY3Bfc2VuZF90b19yYXdfc29jayhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbiA3MjI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGRpcmVjdGlvbilcXG4gNzIzOlxcdHtcXG4gNzI0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2JfY29weSA9IE5VTEwsICpuc2tiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MToxNC41NTE2MjAyODRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2OTczNzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTkZDIExMQ1AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZS4gU3BlY2lmaWNhbGx5IGluIGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBpdCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRhdGFbMl1gIHVzaW5nIGBuZmNfbGxjcF9ucyhza2IpYCBhbmQgYG5mY19sbGNwX25yKHNrYilgLiBJZiB0aGUgYHNrYi1cdTAwM2VsZW5gIHdhcyBsZXNzIHRoYW4gMyAod2hpY2ggaXMgYExMQ1BfSEVBREVSX1NJWkVgIG9mIDIgcGx1cyBgTExDUF9TRVFVRU5DRV9TSVpFYCBvZiAxKSwgdGhhdCBgc2tiLVx1MDAzZWRhdGFbMl1gIGFjY2VzcyB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQhIFNpbWlsYXJseSwgaW4gYG5mY19sbGNwX3JlY3ZfZG1gLCBpdCByZWFkcyBgcmVhc29uID0gc2tiLVx1MDAzZWRhdGFbMl1gLiAgSWYgYHNrYi1cdTAwM2VsZW5gIHdhcyBsZXNzIHRoYW4gMyAoYWdhaW4sIGBMTENQX0hFQURFUl9TSVpFICsgMWApLCB0aGF0IHJlYWQgd291bGQgYWxzbyBiZSBvdXQtb2YtYm91bmRzLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGludHJvZHVjaW5nIGJvdW5kcyBjaGVja3MgdG8gcHJldmVudCB0aG9zZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvbiBgc2tiLVx1MDAzZWRhdGFgLiAgVGhlc2Uga2luZHMgb2Ygb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2l0aGluIGBza2JgIGRhdGEgYnVmZmVycyBhcmUgY2xhc3NpYyBzbGFiL3NrYiBidWZmZXIgaXNzdWVzLCBhbmQgSSdkIGV4cGVjdCBLQVNBTiB0byBiZSBmbGFnZ2luZyB0aGVtLlxuXG5Ob3csIEkgYWx3YXlzIGhhdmUgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcy4gTGV0J3Mgc2VlLi4uIHRoZSBwcmltYXJ5IHF1ZXN0aW9uIGlzOiBBcmUga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nPyBJbiBgbmZjX2xsY3BfcmVjdl9oZGxjYCwgaWYgYHNrYi1cdTAwM2VsZW5gIGlzIGxlc3MgdGhhbiBgTExDUF9IRUFERVJfU0laRSArIExMQ1BfU0VRVUVOQ0VfU0laRWAsIGl0IGNhbGxzIGBuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7IHJldHVybjtgLiAgSSBuZWVkIHRvIHJldmlldyBgbmZjX2xsY3Bfc2VuZF9kbWAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MTcuOTIxMzYxMjc1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1NTc1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfc2VuZF9kbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3AuaD0yNDA9aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmgtMjQxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XFxubmV0L25mYy9sbGNwLmg6MjQyOmludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbik7XFxubmV0L25mYy9sbGNwLmgtMjQzLWludCBuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTkzPWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjI2LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYyNzppbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjI4LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9OTExPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDM4LVxcdC8qIFNlbmQgRE0gKi9cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwMzk6XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgcmVhc29uKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwNDAtfVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xMDcwPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDgxLVxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyBMTENQX1NFUVVFTkNFX1NJWkUpIHtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwODI6XFx0XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4My1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwOTItXFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMDkzOlxcdFxcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwOTQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xMTY0PXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZGlzYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTgxLVxcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE4MjpcXHRcXHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTgzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTIwMi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyMDM6XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9ESVNDKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMDQtXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTEyMDk9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjIxLVxcdFxcdHByX2VycihcXFwiSW52YWxpZCBDQ1xcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjIyOlxcdFxcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjE4LjAyMTkyNDI5OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA3MjM1NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTG93LUxldmVsIExMQ1AgU2VuZCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBgbmZjX2xsY3Bfc2VuZF9kbWAg4oCTIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBEaXJlY3QgTW9kZSBEYXRhIChETSkgaXMgYmVpbmcgc2VudCBhdCB0aGUgTExDUCBsZXZlbC4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIHN0ZXBzLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQsIGFueSBmcmFtaW5nIG9yIGVycm9yIGNvcnJlY3Rpb24gbWVjaGFuaXNtcyB1c2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBORkMgbGF5ZXJzLiBHb3R0YSBnZXQgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgTExDUCBzZW5kIG9wZXJhdGlvbi4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjIxLjAyOTE2MzQyNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI2OlxcdFxcbiA2Mjc6XFx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxcbiA2Mjg6XFx0e1xcbiA2Mjk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNjMwOlxcdFxcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XFxuIDYzMTpcXHRcXHR1MTYgc2l6ZSA9IDE7IC8qIFJlYXNvbiBjb2RlICovXFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdHByX2RlYnVnKFxcXCJTZW5kaW5nIERNIHJlYXNvbiAweCV4XFxcXG5cXFwiLCByZWFzb24pO1xcbiA2MzQ6XFx0XFxuIDYzNTpcXHRcXHRpZiAobG9jYWwgPT0gTlVMTClcXG4gNjM2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA2Mzc6XFx0XFxuIDYzODpcXHRcXHRkZXYgPSBsb2NhbC1cXHUwMDNlZGV2O1xcbiA2Mzk6XFx0XFx0aWYgKGRldiA9PSBOVUxMKVxcbiA2NDA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHNpemUgKz0gTExDUF9IRUFERVJfU0laRTtcXG4gNjQzOlxcdFxcdHNpemUgKz0gZGV2LVxcdTAwM2V0eF9oZWFkcm9vbSArIGRldi1cXHUwMDNldHhfdGFpbHJvb20gKyBORkNfSEVBREVSX1NJWkU7XFxuIDY0NDpcXHRcXG4gNjQ1OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfS0VSTkVMKTtcXG4gNjQ2OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4gNjQ3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGRldi1cXHUwMDNldHhfaGVhZHJvb20gKyBORkNfSEVBREVSX1NJWkUpO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRza2IgPSBsbGNwX2FkZF9oZWFkZXIoc2tiLCBkc2FwLCBzc2FwLCBMTENQX1BEVV9ETSk7XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdHNrYl9wdXRfZGF0YShza2IsIFxcdTAwMjZyZWFzb24sIDEpO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3F1ZXVlLCBza2IpO1xcbiA2NTY6XFx0XFxuIDY1NzpcXHRcXHRyZXR1cm4gMDtcXG4gNjU4OlxcdH1cXG4gNjU5OlxcdFxcbiA2NjA6XFx0aW50IG5mY19sbGNwX3NlbmRfaV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcXG4gNjYxOlxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiA2NjI6XFx0e1xcbiA2NjM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnBkdTtcXG4gNjY0OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzb2NrLVxcdTAwM2VzaztcXG4gNjY1OlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjIxLjAyOTI5MDM2NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk0OTM5NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGNydWNpYWwsIHZ1bG5lcmFiaWxpdHkuIFdlJ3JlIGxvb2tpbmcgYXQgdHdvIGZ1bmN0aW9ucyBoZXJlOiBgbmZjX2xsY3BfcmVjdl9oZGxjKClgIGFuZCBgbmZjX2xsY3BfcmVjdl9kbSgpYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgbmV0d29yayBwYWNrZXRzLCBzcGVjaWZpY2FsbHksIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgZGF0YS5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIGEgbWFsaWNpb3VzIGFjdG9yIHNlbnQgYSBzaG9ydCBwYWNrZXTigJRvbmUgd2hlcmUgdGhlIGxlbmd0aCBvZiBgc2tiLVx1MDAzZWRhdGFgIHdhcyBsZXNzIHRoYW4gdGhlIGV4cGVjdGVkIGhlYWRlciBzaXplIHBsdXMgc2VxdWVuY2Ugb3IgcmVhc29uIGJ5dGVz4oCUd2UnZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gSW4gYG5mY19sbGNwX3JlY3ZfaGRsYygpYCwgdGhlIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBza2ItXHUwMDNlZGF0YVsyXWAgd2l0aG91dCB2ZXJpZnlpbmcgdGhhdCB0aGUgYHNrYmAgd2FzIGFjdHVhbGx5IGxvbmcgZW5vdWdoLiBUaGUgc2FtZSBpc3N1ZSBleGlzdGVkIGluIGBuZmNfbGxjcF9yZWN2X2RtKClgIHdpdGggdGhlIGFjY2VzcyB0byBgc2tiLVx1MDAzZWRhdGFbMl1gLiBUaGlzIGlzIHRoZSBjbGFzc2ljIGtpbmQgb2Ygc3BhdGlhbCBtZW1vcnkgZXJyb3IgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgc2ltcGxlIGFuZCBlbGVnYW50OiBpdCBhZGRzIHByb3BlciBsZW5ndGggY2hlY2tzLiBOb3csIGJlZm9yZSBhY2Nlc3NpbmcgYHNrYi1cdTAwM2VkYXRhWzJdYCwgYm90aCBmdW5jdGlvbnMgd2lsbCB2ZXJpZnkgdGhhdCB0aGUgcGFja2V0IGxlbmd0aCBpcyBzdWZmaWNpZW50LiBJZiB0aGUgcGFja2V0IGlzIHRvbyBzaG9ydCwgYSBETSAoRGlzY29ubmVjdCBNb2RlKSBpcyBzZW50IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlYXJseS4gTm8gbW9yZSBvdXQtb2YtYm91bmRzIHJlYWRzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbXkgYXNzZXNzbWVudDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guXG5cbkkndmUgZXhhbWluZWQgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBJIGNhbiBzYXkgY29uZmlkZW50bHkgdGhhdDpcblxuKiAgIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLlxuKiAgIE5vIHZhcmlhYmxlcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLlxuKiAgIFRoZXJlIGFyZSBubyBtZW1vcnkgaW5mb3JtYXRpb24gbGVha3MuXG4qICAgVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFscyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cblxuR2l2ZW4gdGhlc2Ugb2JzZXJ2YXRpb25zLCB0aGlzIHBhdGNoIGlzIGEgY2xlYXIgd2luOyBpdCBzb2x2ZXMgYW4gaWRlbnRpZmllZCBzcGF0aWFsIG1lbW9yeSBlcnJvciAob3V0LW9mLWJvdW5kcyByZWFkKSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBvdGhlciByaXNrcy4gVGhpcyBpcyB3aHkgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gV2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgYWNjdXJhdGUgaGVyZSwgYW5kIHRoZSBwcm92aWRlZCByZWFzb25pbmcgaXMgYWxzbyBjbGVhciBhbmQgdmFsaWQuIFRoZSBjb2RlIGlzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU3LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjI1LjYyNDIzMzEzNloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVxcdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVxcdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5t98g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 04:29:54 +0000 UTC FinishedAt: 2026-09-07 04:51:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_DIGITAL", "NFC_SIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_DIGITAL", "NFC_SIM" ], "series_id": "74cb49d2-c597-4d56-ae04-02da483eea00" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_llcp_recv_hdlc", "nfc_llcp_recv_dm", "nfc_llcp_rx_skb", "nfc_llcp_recv", "nfc_llcp_data_received" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfRElHSVRBTCYjMzQ7LAogICAgJiMzNDtORkNfU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZjX2xsY3BfcmVjdl9oZGxjJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3JlY3ZfZG0mIzM0OywKICAgICYjMzQ7bmZjX2xsY3Bfcnhfc2tiJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3JlY3YmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfZGF0YV9yZWNlaXZlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBza2IgbGVuZ3RoIGJvdW5kcyBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSBiZWZvcmUgYWNjZXNzaW5nIGJ5dGUgb2Zmc2V0IDIgKHNrYi1cdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFja2V0IGxlbmd0aCBib3VuZGFyeSBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIG1hbGZvcm1lZCBMTENQIHBhY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gdGhlIE5GQyBMTENQIGxheWVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgTkZDIGRyaXZlcnMgKGUuZy4gbmZjc2ltKSBhbmQgQUZfTkZDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNzkxOWQ1MDA1ZTRhMWZjNWI0OWRlYzE4Zjc4YWRiMjY0NDZkNDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDo1MDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuaW5kZXggY2FjMWI1NDg3MDY0ZC4uODlkNmY0NTk5ZTExYSAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcbkBAIC0xMDc3LDYgJiM0MzsxMDc3LDEyIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIFx0cHR5cGUgPSBuZmNfbGxjcF9wdHlwZShza2IpO1xuIFx0ZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTtcbiBcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XG4mIzQzO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICYjNDM7IExMQ1BfU0VRVUVOQ0VfU0laRSkge1xuJiM0MztcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRucyA9IG5mY19sbGNwX25zKHNrYik7XG4gXHRuciA9IG5mY19sbGNwX25yKHNrYik7XG4gXG5AQCAtMTI1NCw2ICYjNDM7MTI2MCwxMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gXG4gXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuIFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgMSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRyZWFzb24gPSBza2ItXHUwMDNlZGF0YVsyXTtcbiBcbiBcdHByX2RlYnVnKFwmIzM0OyVkICVkIHJlYXNvbiAlZFxcblwmIzM0Oywgc3NhcCwgZHNhcCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX0RJR0lUQUwmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX3JlY3ZfaGRsYyYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2X2RtJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3J4X3NrYiYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2JiMzNDssCiAgICAmIzM0O25mY19sbGNwX2RhdGFfcmVjZWl2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYWNrZXQgbGVuZ3RoIGJvdW5kYXJ5IGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3NpbmcgbWFsZm9ybWVkIExMQ1AgcGFja2V0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiB0aGUgTkZDIExMQ1AgbGF5ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBORkMgZHJpdmVycyAoZS5nLiBuZmNzaW0pIGFuZCBBRl9ORkMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3OTE5ZDUwMDVlNGExZmM1YjQ5ZGVjMThmNzhhZGIyNjQ0NmQ0NDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA0OjUwOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX2NvcmUuYyBiL25ldC9uZmMvbGxjcF9jb3JlLmMKaW5kZXggY2FjMWI1NDg3MDY0ZC4uODlkNmY0NTk5ZTExYSAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3BfY29yZS5jCkBAIC0xMDc3LDYgJiM0MzsxMDc3LDEyIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLAogCXB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTsKIAlkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpOwogCXNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7CiYjNDM7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKSB7CiYjNDM7CQluZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlucyA9IG5mY19sbGNwX25zKHNrYik7CiAJbnIgPSBuZmNfbGxjcF9ucihza2IpOwogCkBAIC0xMjU0LDYgJiM0MzsxMjYwLDEwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwKIAogCWRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7CiAJc3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTExDUF9IRUFERVJfU0laRSAmIzQzOyAxKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXJlYXNvbiA9IHNrYi0mZ3Q7ZGF0YVsyXTsKIAogCXByX2RlYnVnKCYjMzQ7JWQgJWQgcmVhc29uICVkXG4mIzM0Oywgc3NhcCwgZHNhcCwgcmVhc29uKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5OQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMTENQIENvcmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBicmVha2luZyBkb3duIHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmZjL2xsY3BfY29yZS5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCB0aGUgcGFja2V0IGhhbmRsaW5nIGluIGBuZmNfbGxjcF9yZWN2X2hkbGNgIGFuZCBgbmZjX2xsY3BfcmVjdl9kbWAuIEdvb2QuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGV5JiMzOTt2ZSBhZGRlZCBsZW5ndGggY2hlY2tzIHRvIHRoZSBpbmNvbWluZyBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIFNwZWNpZmljYWxseSwgdGhleSBhcmUgZW5zdXJpbmcgdGhhdCB0aGUgcmVjZWl2ZWQgcGFja2V0IG1lZXRzIGEgbWluaW11bSBsZW5ndGggcmVxdWlyZW1lbnQuIEl0IG1ha2VzIHNlbnNlOyB3ZSB3YW50IHRvIHZhbGlkYXRlIHRoZSByZWNlaXZlZCBmcmFtZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbS4KClRoZSBjb2RlIHNuaXBwZXRzIHNob3cgY2hlY2tzIGxpa2UgYHNrYi0mZ3Q7bGVuICZsdDsgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkVgIGFuZCBgc2tiLSZndDtsZW4gJmx0OyBMTENQX0hFQURFUl9TSVpFICYjNDM7IDFgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGZvciBwYWNrZXRzIHRoYXQgYXQgbGVhc3QgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGhlYWRlciBhbmQgZWl0aGVyIHNlcXVlbmNlIG51bWJlcnMgb3IganVzdCBhIHNpbmdsZSBieXRlIG9mIGRhdGEsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gSWYgdGhlIHBhY2tldCBpcyB0b28gc2hvcnQsIHRoZSBjb2RlIG5vdyBzZWVtcyB0byBiZSBzZW5kaW5nIGJhY2sgYSBETSAoRGlzY29ubmVjdCBNb2RlKSBmcmFtZSB3aXRoIGEgYE5PQ09OTmAgcmVhc29uLiBUaGlzIGlzIGEgc2Vuc2libGUgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSByZXN0IG9mIGBuZXQvbmZjL2xsY3BfY29yZS5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZXNlIGBza2JgIHN0cnVjdHVyZXMgYXJlIHVzZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBuZXcgY2hlY2tzIGRvbiYjMzk7dCBicmVhayBhbnkgdmFsaWQsIGJ1dCBwcmV2aW91c2x5IG92ZXJsb29rZWQsIGNhc2VzLiBBcmUgd2UgcG90ZW50aWFsbHkgcmVqZWN0aW5nIHZhbGlkLCBidXQgbWluaW1hbGx5IHNpemVkLCBMTENQIGZyYW1lcz8gT3IgYXJlIHdlLCBhcyBJIHN1c3BlY3QsIGp1c3QgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IHRyeSB0byBkZXJlZmVyZW5jZSBpbnZhbGlkIG1lbW9yeT8KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9uZmMvYCB0byB1bmRlcnN0YW5kIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIE5GQyBhbmQgTExDUC4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFzIHRvIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgdGhpcyBsZW5ndGggY2hlY2sgaXMgYmVpbmcgYXBwbGllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbjEwNzE6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuMTA3NDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTA3NTpcdFx0dTggZHNhcCwgc3NhcCwgcHR5cGUsIG5zLCBucjtcbjEwNzY6XHRcbjEwNzc6XHRcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcbjEwNzg6XHRcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4xMDc5Olx0XHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuMTA4MDpcdFxuMTA4MTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XG4xMDgyOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwODM6XHRcdFx0cmV0dXJuO1xuMTA4NDpcdFx0fVxuMTA4NTpcdFxuMTA4NjpcdFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xuMTA4NzpcdFx0bnIgPSBuZmNfbGxjcF9ucihza2IpO1xuMTA4ODpcdFxuMTA4OTpcdFx0cHJfZGVidWcoXCYjMzQ7JWQgJWQgUiAlZCBTICVkXFxuXCYjMzQ7LCBkc2FwLCBzc2FwLCBuciwgbnMpO1xuMTA5MDpcdFxuMTA5MTpcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xuMTA5MjpcdFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XG4xMDkzOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwOTQ6XHRcdFx0cmV0dXJuO1xuMTA5NTpcdFx0fVxuMTA5NjpcdFxuMTA5NzpcdFx0c2sgPSBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2s7XG4xMDk4Olx0XHRsb2NrX3NvY2soc2spO1xuMTA5OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4xMTAwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMTAxOlx0XHRcdG5mY19sbGNwX3NvY2tfcHV0KGxsY3Bfc29jayk7XG4xMTAyOlx0XHRcdHJldHVybjtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdC8qIFBhc3MgdGhlIHBheWxvYWQgdXBzdHJlYW0gKi9cbjExMDY6XHRcdGlmIChwdHlwZSA9PSBMTENQX1BEVV9JKSB7XG4xMTA3Olx0XHRcdHByX2RlYnVnKFwmIzM0O0kgZnJhbWUsIHF1ZXVlaW5nIG9uICVwXFxuXCYjMzQ7LCBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2spO1xuMTEwODpcdFxuMTEwOTpcdFx0XHRpZiAobnMgPT0gbGxjcF9zb2NrLVx1MDAzZXJlY3ZfbilcbjExMTA6XHRcdFx0XHRsbGNwX3NvY2stXHUwMDNlcmVjdl9uID0gKGxsY3Bfc29jay1cdTAwM2VyZWN2X24gJiM0MzsgMSkgJSAxNjtcbjExMTE6XHRcdFx0ZWxzZVxuMTExMjpcdFx0XHRcdHByX2VycihcJiMzNDtSZWNlaXZlZCBvdXQgb2Ygc2VxdWVuY2UgSSBQRFVcXG5cJiMzNDspO1xuMTExMzpcdFxuMTExNDpcdFx0XHRza2JfcHVsbChza2IsIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKTtcbjExMTU6XHRcdFx0aWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2IoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZXNrLCBza2IpKSB7XG4xMTE2Olx0XHRcdFx0LypcbjExMTc6XHRcdFx0XHQgKiBJIGZyYW1lcyB3aWxsIGJlIGZyZWVkIGZyb20gdGhlIHNvY2tldCBsYXllciwgc28gd2VcbjExMTg6XHRcdFx0XHQgKiBuZWVkIHRvIGtlZXAgdGhlbSBhbGl2ZSB1bnRpbCBzb21lb25lIHJlY2VpdmVzIHRoZW0uXG4xMTE5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3BfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjQ1Olx0XG4xMjQ2Olx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ09OTkVDVEVEO1xuMTI0NzpcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbjEyNDg6XHRcbjEyNDk6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMjUwOlx0XG4xMjUxOlx0XHRuZmNfbGxjcF9zb2NrX3B1dChsbGNwX3NvY2spO1xuMTI1MjpcdH1cbjEyNTM6XHRcbjEyNTQ6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4xMjU1Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTI1NjpcdHtcbjEyNTc6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XG4xMjU4Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4xMjU5Olx0XHR1OCBkc2FwLCBzc2FwLCByZWFzb247XG4xMjYwOlx0XG4xMjYxOlx0XHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuMTI2MjpcdFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbjEyNjM6XHRcbjEyNjQ6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICYjNDM7IDEpXG4xMjY1Olx0XHRcdHJldHVybjtcbjEyNjY6XHRcbjEyNjc6XHRcdHJlYXNvbiA9IHNrYi1cdTAwM2VkYXRhWzJdO1xuMTI2ODpcdFxuMTI2OTpcdFx0cHJfZGVidWcoXCYjMzQ7JWQgJWQgcmVhc29uICVkXFxuXCYjMzQ7LCBzc2FwLCBkc2FwLCByZWFzb24pO1xuMTI3MDpcdFxuMTI3MTpcdFx0c3dpdGNoIChyZWFzb24pIHtcbjEyNzI6XHRcdGNhc2UgTExDUF9ETV9OT0JPVU5EOlxuMTI3MzpcdFx0Y2FzZSBMTENQX0RNX1JFSjpcbjEyNzQ6XHRcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3BfY29ubmVjdGluZ19zb2NrX2dldChsb2NhbCwgZHNhcCk7XG4xMjc1Olx0XHRcdGJyZWFrO1xuMTI3NjpcdFxuMTI3NzpcdFx0ZGVmYXVsdDpcbjEyNzg6XHRcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xuMTI3OTpcdFx0XHRicmVhaztcbjEyODA6XHRcdH1cbjEyODE6XHRcbjEyODI6XHRcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xuMTI4MzpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtBbHJlYWR5IGNsb3NlZFxcblwmIzM0Oyk7XG4xMjg0Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5GQ1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA5Olx0XHRkZWZhdWx0IG5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcbiAgMTI6XHRcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgbmZjLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBORkNfRElHSVRBTFxuICAxODpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgMTk6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgMjA6XHRcdHNlbGVjdCBDUkNfSVRVX1RcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGRlZmF1bHQgblxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBidWlsZCBORkMgZGlnaXRhbCBwcm90b2NvbCBzdGFjayBzdXBwb3J0LlxuICAyNTpcdFx0ICBUaGlzIGlzIG5lZWRlZCBieSBORkMgY2hpcHNldHMgd2hvc2UgZmlybXdhcmUgb25seSBpbXBsZW1lbnRcbiAgMjY6XHRcdCAgdGhlIE5GQyBhbmFsb2cgbGF5ZXIuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMjk6XHRcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxuICAzMDpcdFxuICAzMTpcdHNvdXJjZSBcJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnXCYjMzQ7XG4gIDMyOlx0c291cmNlIFwmIzM0O25ldC9uZmMvaGNpL0tjb25maWdcJiMzNDtcbiAgMzM6XHRcbiAgMzQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGxsY3BfY29yZS5jIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBsbGNwX2NvcmUuY2Agd2l0aGluIHRoZSBgbmV0L25mYy9gIGRpcmVjdG9yeS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgdGhlcmUuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2FyeSBmb3IgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBpbmNsdWRlIHBhdGhzIGFyZSBzZXQsIHdoYXQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIG1pZ2h0IGJlIGluIHBsYXkgKGxpa2UgZmVhdHVyZSBmbGFncyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBzZXR0aW5ncyksIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcyBiYXNlZCBvbiBrZXJuZWwgdmVyc2lvbnMgb3Igb3RoZXIgZmFjdG9ycy4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBkaXJlY3RseSBhZmZlY3QgYGxsY3BfY29yZS5jYCYjMzk7cyBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xuICAgNzpcdG9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xuICAgODpcdG9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuICAgOTpcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbiAgMTA6XHRcbiAgMTE6XHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbiAgMTI6XHRcdFx0bGxjcF9zb2NrLm9cbiAgMTM6XHRcbiAgMTQ6XHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjE2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5GQyAmYW1wOyBMTENQIEZ1enppbmcgUm9hZG1hcCoqCgpPa2F5LCBzbyBgbGxjcF9jb3JlLm9gIGlzIGJ1aWx0IGludG8gYG5mYy5vYCB3aGVuIHdlJiMzOTt2ZSBnb3QgYENPTkZJR19ORkNgIGVuYWJsZWQg4oCTIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgd2UgY2FuIHBva2UgYW5kIHByb2QgYXQgdGhlIE5GQyBhbmQgTExDUCBsYXllcnMgZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCkNhbiB3ZSBnZW5lcmF0ZSB2aXJ0dWFsIE5GQyBkZXZpY2VzLCBMTENQIHNvY2tldHMsIG9yIGV2ZW4gc3RpbXVsYXRlIGFjdGl2aXR5IHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQsIGlkZWFsbHkgbGV2ZXJhZ2luZyBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXI/IFRoZSBhbnN3ZXIsIHRoYW5rZnVsbHksIHNlZW1zIHRvIGJlIHllcyEgU3l6a2FsbGVyIGl0c2VsZiBwcm92aWRlcyBzb21lIGludGVyZXN0aW5nIE5GQyB2aXJ0dWFsIGRldmljZXMgYW5kIGRyaXZlcnMg4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoaW5ncyBsaWtlIGB2aXJ0dWFsIG5mY3NpbWAgd2hpY2ggdGllcyBpbiB3aXRoIGBDT05GSUdfTkZDX1NJTWAgb3IgcG9zc2libHkgZGlyZWN0IGFjY2VzcyB0aHJvdWdoIHJhdyBzb2NrL0xMQ1Agc29ja2V0cyBvciBuZXRsaW5rLiBOb3csIHRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgaG93IHRvIGxldmVyYWdlIHRob3NlIHJlc291cmNlcy4gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZmMvYCBhbmQgYG5ldC9uZmMvYCBkaXJlY3RvcmllcyBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHJvdXRlIHRvIGlkZW50aWZ5aW5nIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1ldGhvZHMgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZjX2xsY3BfcmVjdl9oZGxjfG5mY19sbGNwX3JlY3ZfZG0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmM9MTA0Mj1pbnQgbmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDY5LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMDcwOnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDcxLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTIwOT1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2NjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjUzLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjU0OnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTI1NS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNDkyPXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzMi1cdFx0cHJfZGVidWcoXCYjMzQ7RE1cXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNTMzOlx0XHRuZmNfbGxjcF9yZWN2X2RtKGxvY2FsLCBza2IpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNTM0LVx0XHRicmVhaztcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDQtXHRcdHByX2RlYnVnKFwmIzM0O0kgZnJhbWVcXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNTQ1Olx0XHRuZmNfbGxjcF9yZWN2X2hkbGMobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYG5mY19sbGNwX3J4X3NrYmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgYG5mY19sbGNwX3J4X3NrYmAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBORkMgc3RhY2suIFRoaXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgcmVjZWl2ZWQgU0tCcyBhcmUgaGFuZGxlZCBpbiBMTENQLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcCwgYnV0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29kZWJhc2UsIEkgbWlnaHQgbmVlZCB0byBsZXZlcmFnZSBzb21lIG1vcmUgc29waGlzdGljYXRlZCBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgY3JpdGljYWwgaGFuZGxlciBmb3IgaW5jb21pbmcgZGF0YSwgc28gaWRlbnRpZnlpbmcgYWxsIHRoZSB1cHN0cmVhbSBwcm9jZXNzaW5nIHN0ZXBzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIHRyYWNlIGhlcmUgd2lsbCBxdWlja2x5IGV4cG9zZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3J4X3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvcmUuYz0yMT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxsY3BfZGV2aWNlc19sb2NrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQtXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNDQ4PXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfYWdmKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDgzLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDg0Olx0XHRuZmNfbGxjcF9yeF9za2IobG9jYWwsIG5ld19za2IpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNDg1LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ5MS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTQ5MjpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ5My17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNTU1PXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3MC1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTU3MTpcdG5mY19sbGNwX3J4X3NrYihsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVidWdnaW5nIE5ldHdvcmsgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgcnhfd29ya2AgZnVuY3Rpb24gaXMgYmVpbmcgc2NoZWR1bGVkLCBvciB3aGVyZSB0aGUgYGxsY3BfY29yZWAgZW50cnlwb2ludHMgYXJlIGxvY2F0ZWQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgbmV0d29yayBzdGFjayBhbmFseXNpcywgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY3JpdGljYWwgcG9pbnRzIG9mIHByb2Nlc3NpbmcgZm9yIGluY29taW5nIHBhY2tldHMsIHBlcmhhcHMgbG9va2luZyBmb3Iga2VybmVsIG1vZHVsZSBob29rcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IHRoZSBwYWNrZXRzIGFyZSByZWNlaXZlZCwgcXVldWVkLCBhbmQgdWx0aW1hdGVseSBwcm9jZXNzZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZXMgdG8gbG9vayBmb3IgY2FsbHMgb3IgcmVmZXJlbmNlcyB0byB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRyaWdnZXJzIHRoZWlyIGV4ZWN1dGlvbiBhbmQgZnJvbSB3aGVyZS4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGludGVycnVwdCBoYW5kbGVycyBvciB0aW1lcnMgaW52b2x2ZWQsIHRvby4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvaGNpL2NvcmUuYz02Mz1zdGF0aWMgdm9pZCBuZmNfaGNpX21zZ190eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTI1LVxubmV0L25mYy9oY2kvY29yZS5jOjEyNjpzdGF0aWMgdm9pZCBuZmNfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMjcte1xubmV0L25mYy9oY2kvY29yZS5jLTEyOC1cdHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2hjaV9kZXYsXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTI5Olx0XHRcdFx0XHRcdG1zZ19yeF93b3JrKTtcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMzAtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz04NTQ9c3RhdGljIHZvaWQgbmZjX2hjaV9yZWN2X2Zyb21fbGxjKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTI2LVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZoZGV2LVx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XG5uZXQvbmZjL2hjaS9jb3JlLmM6OTI3Olx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9oY2kvY29yZS5jLTkyOC1cdH1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTAyMD1pbnQgbmZjX2hjaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xMDMxLVxubmV0L25mYy9oY2kvY29yZS5jOjEwMzI6XHRJTklUX1dPUksoXHUwMDI2aGRldi1cdTAwM2Vtc2dfcnhfd29yaywgbmZjX2hjaV9tc2dfcnhfd29yayk7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMTAzMy1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTA0MD12b2lkIG5mY19oY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xMDYxLVxubmV0L25mYy9oY2kvY29yZS5jOjEwNjI6XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9oY2kvY29yZS5jLTEwNjMtXG4tLVxubmV0L25mYy9sbGNwLmg9NTA9c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcbi0tXG5uZXQvbmZjL2xsY3AuaC02MC1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0IHR4X3dvcms7XG5uZXQvbmZjL2xsY3AuaDo2MTpcdHN0cnVjdCB3b3JrX3N0cnVjdFx0IHJ4X3dvcms7XG5uZXQvbmZjL2xsY3AuaC02Mi1cdHN0cnVjdCBza19idWZmICpyeF9wZW5kaW5nO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTYwPXN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2NS1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNldHhfd29yayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE2NjpcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNlcnhfd29yayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2Ny1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNldGltZW91dF93b3JrKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE0OTI9c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTU0LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTU1OnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTU2LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1Ny1cdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTU4Olx0XHRcdFx0XHRcdCAgICByeF93b3JrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1OS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNTc4PXN0YXRpYyB2b2lkIF9fbmZjX2xsY3BfcmVjdihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4Ni1cdHRpbWVyX2RlbGV0ZShcdTAwMjZsb2NhbC1cdTAwM2VsaW5rX3RpbWVyKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTU4NzpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG9jYWwtXHUwMDNlcnhfd29yayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1ODgtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTY2Mz1pbnQgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpuZGV2KVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTY4OS1cdGxvY2FsLVx1MDAzZXJ4X3BlbmRpbmcgPSBOVUxMO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNjkwOlx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNjkxLVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0zOT1zdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDpzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTQxLXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTU1ND1zdGF0aWMgaW50IG5jaV9jbG9zZV9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTYxNC1cbm5ldC9uZmMvbmNpL2NvcmUuYzo2MTU6XHQvKiByeF93b3JrIG1heSB0YWtlIHJlcV9sb2NrIHZpYSBuY2lfZGVhY3RpdmF0ZV90YXJnZXQgKi9cbm5ldC9uZmMvbmNpL2NvcmUuYy02MTYtXHRmbHVzaF93b3JrcXVldWUobmRldi1cdTAwM2VyeF93cSk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTYzMT1zdGF0aWMgdm9pZCBuY2lfZGF0YV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtNjM1LVx0c2V0X2JpdChOQ0lfREFUQV9FWENIQU5HRV9UTywgXHUwMDI2bmRldi1cdTAwM2VmbGFncyk7XG5uZXQvbmZjL25jaS9jb3JlLmM6NjM2Olx0cXVldWVfd29yayhuZGV2LVx1MDAzZXJ4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTYzNy19XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEyNTE9aW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNjYtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI2NzpcdElOSVRfV09SSyhcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmssIG5jaV9yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY4LVx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDslc19uY2lfcnhfd3FcJiMzNDssIGRldl9uYW1lKGRldikpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMzUxPWludCBuY2lfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM2Mi1cdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5kZXYtXHUwMDNlcnhfcSwgc2tiKTtcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzYzOlx0cXVldWVfd29yayhuZGV2LVx1MDAzZXJ4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTEzNjQtXG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTE1MjA9c3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTU4LVxubmV0L25mYy9uY2kvY29yZS5jOjE1NTk6c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9uY2kvY29yZS5jLTE1NjAte1xubmV0L25mYy9uY2kvY29yZS5jOjE1NjE6XHRzdHJ1Y3QgbmNpX2RldiAqbmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2Rldiwgcnhfd29yayk7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTU2Mi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9uY2kvZGF0YS5jPTI2PXZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25mYy9uY2kvZGF0YS5jLTQ4LVxubmV0L25mYy9uY2kvZGF0YS5jOjQ5Olx0LyogQ2xhaW0gY29tcGxldGlvbiBhdG9taWNhbGx5IC0tIGJvdGggY2xvc2UgYW5kIHJ4X3dvcmsgbWF5IHJhY2UgaGVyZSAqL1xubmV0L25mYy9uY2kvZGF0YS5jLTUwLVx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoTkNJX0RBVEFfRVhDSEFOR0UsIFx1MDAyNm5kZXYtXHUwMDNlZmxhZ3MpKSB7XG4tLVxubmV0L25mYy9uY2kvaGNpLmM9MzgyPXN0YXRpYyB2b2lkIG5jaV9oY2lfaGNwX21lc3NhZ2Vfcngoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDA0LVxubmV0L25mYy9uY2kvaGNpLmM6NDA1OnN0YXRpYyB2b2lkIG5jaV9oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9uY2kvaGNpLmMtNDA2LXtcbm5ldC9uZmMvbmNpL2hjaS5jLTQwNy1cdHN0cnVjdCBuY2lfaGNpX2RldiAqaGRldiA9XG5uZXQvbmZjL25jaS9oY2kuYzo0MDg6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2hjaV9kZXYsIG1zZ19yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQwOS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9uY2kvaGNpLmM9NDI3PXZvaWQgbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiKHZvaWQgKmNvbnRleHQsXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTAzLVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3F1ZXVlLCBoY3Bfc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjUwNDpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9uY2kvaGNpLmMtNTA1LVx0fVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTc4Nj1zdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzk0LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZGV2LVx1MDAzZXJ4X2hjcF9mcmFncyk7XG5uZXQvbmZjL25jaS9oY2kuYzo3OTU6XHRJTklUX1dPUksoXHUwMDI2aGRldi1cdTAwM2Vtc2dfcnhfd29yaywgbmNpX2hjaV9tc2dfcnhfd29yayk7XG5uZXQvbmZjL25jaS9oY2kuYy03OTYtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3F1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTExDUCBSZWNlaXZlIENhbGxzKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvd2VyIGxheWVycyBvZiB0aGUgTkZDIHN0YWNrIGhhbmRsZSBpbmNvbWluZyBMTENQIGRhdGEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsIHNpdGVzIGZvciBlaXRoZXIgYF9fbmZjX2xsY3BfcmVjdmAgb3IgYG5mY19sbGNwX3JlY3ZgLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3IgcmVjZWl2aW5nIExMQ1AgZnJhbWVzLiBLbm93aW5nIHdoZXJlIGl0JiMzOTtzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaW5jb21pbmcgZGF0YSBpcyByb3V0ZWQgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBwaW5wb2ludGluZyBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoaW4gdGhlIHJlY2VpdmUgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTIyMz1pbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG4tLVxubmV0L25mYy9sbGNwLmgtMjI2LS8qIENvbW1hbmRzIEFQSSAqL1xubmV0L25mYy9sbGNwLmg6MjI3OnZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcbm5ldC9uZmMvbGxjcC5oLTIyOC11OCAqbmZjX2xsY3BfYnVpbGRfdGx2KHU4IHR5cGUsIGNvbnN0IHU4ICp2YWx1ZSwgdTggdmFsdWVfbGVuZ3RoLCB1OCAqdGx2X2xlbmd0aCk7XG4tLVxubmV0L25mYy9sbGNwLmg9MjMzPXZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKnNkcF9oZWFkKTtcbm5ldC9uZmMvbGxjcC5oOjIzNDp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XG5uZXQvbmZjL2xsY3AuaC0yMzUtaW50IG5mY19sbGNwX3NlbmRfc3ltbShzdHJ1Y3QgbmZjX2RldiAqZGV2KTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0zNzE9aW50IG5mY19sbGNwX3NlbmRfc3ltbShzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM5OS1cdGVyciA9IG5mY19kYXRhX2V4Y2hhbmdlKGRldiwgbG9jYWwtXHUwMDNldGFyZ2V0X2lkeCwgc2tiLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDAwOlx0XHRcdFx0IG5mY19sbGNwX3JlY3YsIGxvY2FsKTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwMS1vdXQ6XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz03NjE9c3RhdGljIHZvaWQgbmZjX2xsY3BfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy03OTctXHRcdFx0cmV0ID0gbmZjX2RhdGFfZXhjaGFuZ2UobG9jYWwtXHUwMDNlZGV2LCBsb2NhbC1cdTAwM2V0YXJnZXRfaWR4LFxubmV0L25mYy9sbGNwX2NvcmUuYzo3OTg6XHRcdFx0XHRcdFx0c2tiLCBuZmNfbGxjcF9yZWN2LCBsb2NhbCk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTc5OS1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTg0OT1zdGF0aWMgY29uc3QgdTggKm5mY19sbGNwX2Nvbm5lY3Rfc24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90ICpzbl9sZW4pXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy04NzQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3NTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X3VpKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTg3Ni1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy05MTAtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjkxMTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtOTEyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTA0Mj1pbnQgbmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDY5LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMDcwOnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDcxLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE2My1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE2NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Rpc2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE2NS1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMDgtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyMDk6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjEwLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyNTMtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyNTQ6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjU1LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyOTUtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyOTY6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9zbmwoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTI5Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ0Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTQ0ODpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2FnZihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDQ5LXtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE0OTI9c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTEyLVx0XHRwcl9kZWJ1ZyhcJiMzNDtVSVxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MTM6XHRcdG5mY19sbGNwX3JlY3ZfdWkobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MTQtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxNy1cdFx0cHJfZGVidWcoXCYjMzQ7Q09OTkVDVFxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MTg6XHRcdG5mY19sbGNwX3JlY3ZfY29ubmVjdChsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxOS1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTIyLVx0XHRwcl9kZWJ1ZyhcJiMzNDtESVNDXFxuXCYjMzQ7KTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUyMzpcdFx0bmZjX2xsY3BfcmVjdl9kaXNjKGxvY2FsLCBza2IpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNTI0LVx0XHRicmVhaztcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjctXHRcdHByX2RlYnVnKFwmIzM0O0NDXFxuXCYjMzQ7KTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUyODpcdFx0bmZjX2xsY3BfcmVjdl9jYyhsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUyOS1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTMyLVx0XHRwcl9kZWJ1ZyhcJiMzNDtETVxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MzM6XHRcdG5mY19sbGNwX3JlY3ZfZG0obG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzQtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzNy1cdFx0cHJfZGVidWcoXCYjMzQ7U05MXFxuXCYjMzQ7KTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUzODpcdFx0bmZjX2xsY3BfcmVjdl9zbmwobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzktXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0NC1cdFx0cHJfZGVidWcoXCYjMzQ7SSBmcmFtZVxcblwmIzM0Oyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1NDU6XHRcdG5mY19sbGNwX3JlY3ZfaGRsYyhsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0Ni1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTQ5LVx0XHRwcl9kZWJ1ZyhcJiMzNDtBR0YgZnJhbWVcXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNTUwOlx0XHRuZmNfbGxjcF9yZWN2X2FnZihsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1MS1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNTU1PXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTU3ODpzdGF0aWMgdm9pZCBfX25mY19sbGNwX3JlY3Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3OS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTg5LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTkwOnZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTkxLXtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1OTgtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1OTk6XHRfX25mY19sbGNwX3JlY3YobG9jYWwsIHNrYik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2MDAtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTYwMj1pbnQgbmZjX2xsY3BfZGF0YV9yZWNlaXZlZChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTYxMjpcdF9fbmZjX2xsY3BfcmVjdihsb2NhbCwgc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTkZDIExMQ1AgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiB0aGUgTkZDIExMQ1AgcHJvdG9jb2wgcHJvY2Vzc2luZyB3aXRoaW4gYG5mY19sbGNwX3JlY3ZfaGRsY2AgYW5kIGBuZmNfbGxjcF9yZWN2X2RtYC4gQmVmb3JlLCB3ZSB3ZXJlIGdyYWJiaW5nIHNlcXVlbmNlIGluZm9ybWF0aW9uIChgbnNgLCBgbnJgKSBhbmQgdGhlIERNIHJlYXNvbiBjb2RlIHdpdGhvdXQgcHJvcGVybHkgdmVyaWZ5aW5nIHRoZSBpbmNvbWluZyBTS0ImIzM5O3MgbGVuZ3RoLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IHBvaW50LgoKU28sIHRoZSBmaXggaW50cm9kdWNlcyBsZW5ndGggY2hlY2tzOiBlbnN1cmluZyBgc2tiLSZndDtsZW5gIGlzIHN1ZmZpY2llbnQgYmVmb3JlIGFjY2Vzc2luZyBkYXRhIGJleW9uZCB0aGUgaGVhZGVyLiBHb29kIGNhdGNoIOKAkyB0aGlzIGRpcmVjdGx5IGFkZHJlc3NlcyBhbiBpbXBvcnRhbnQgdnVsbmVyYWJpbGl0eSB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciwgd29yc2UsIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHJlYWRzLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gRmlyc3QsIHJlYWNoYWJpbGl0eS4gWWVzLCBhYnNvbHV0ZWx5LiBORkMgTExDUCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggTkZDIHNvY2tldHMgYW5kIHZhcmlvdXMgTkZDIGRyaXZlcnMsIGluY2x1ZGluZyB2aXJ0dWFsIG9uZXMuIEFuZCBTeXprYWxsZXIgaXMgYWxyZWFkeSB0YXJnZXRpbmcgdGhpcyBhcmVhISBUaGF0JiMzOTtzIGEgaHVnZSBncmVlbiBmbGFnLiBTZWNvbmQsIGV4ZWN1dGFibGUgY29kZTogZGVmaW5pdGVseSDigJMgaXQmIzM5O3MgcmlnaHQgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgcHJvdG9jb2wgc3RhY2sgd2l0aGluIGBuZXQvbmZjYC4gVGhpcmQsIGNvbnRyb2wgZmxvdy4gWWVzLCB0aGlzIHBhdGNoIGlzIGFkZGluZyBjaGVja3M7IGl0IGNoYW5nZXMgdGhlIHdheSB0aGUgY29kZSBoYW5kbGVzIGluY29taW5nIGRhdGEsIGFuZCB0aHVzIGFsdGVycyB0aGUgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBTS0IuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbj8gQmFzZWQgb24gcmVhY2hhYmlsaXR5LCB0aGUgYWRkaXRpb24gb2YgZGVmZW5zaXZlIGNoZWNrcywgYW5kIHRoZSBmYWN0IHRoaXMgaXMgaW4gY29yZSBuZXR3b3JraW5nLCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3MgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcy4gV2UgbmVlZCBgTkZDYCBlbmFibGVkLCB3aGljaCByZWxpZXMgb24gYFJGS0lMTGAuIEZyb20gdGhlcmUsIHdlIHdhbnQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGxpa2UgYENPTkZJR19ORkNfU0lNYCBvciBgQ09ORklHX05GQ19ESUdJVEFMYCBpbiB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIExMQ1AgYW5kIHZpcnR1YWwgTkZDIHRlc3RpbmcgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgdGVzdGluZy4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O05lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIE5GQ1xuICAgODpcdFxuICAgOTpcdGNvbmZpZyBORkNfVFJGNzk3MEFcbiAgMTA6XHRcdHRyaXN0YXRlIFwmIzM0O1RleGFzIEluc3RydW1lbnRzIFRSRjc5NzBhIE5GQyBkcml2ZXJcJiMzNDtcbiAgMTE6XHRcdGRlcGVuZHMgb24gU1BJIFx1MDAyNlx1MDAyNiBORkNfRElHSVRBTCBcdTAwMjZcdTAwMjYgR1BJT0xJQlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBORkMgZHJpdmVyIGZvciBUZXhhcyBJbnN0cnVtZW50cyYjMzk7IFRSRjc5NzBhXG4gIDE0Olx0XHQgIGRldmljZS4gU3VjaCBkZXZpY2Ugc3VwcG9ydHMgNSBkaWZmZXJlbnQgcHJvdG9jb2xzOiBJU08xNDQ0M0EsXG4gIDE1Olx0XHQgIElTTzE0NDQzQiwgRmVMaUNhLCBJU08xNTY5MyBhbmQgSVNPMTgwMDAtMy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIFRSRjc5NzBhIGludG8gdGhlIGtlcm5lbCBvclxuICAxODpcdFx0ICBzYXkgTSAgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAxOTpcdFx0ICB0cmY3OTcwYS5rby5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTkZDX01FSV9QSFlcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O01FSSBidXMgTkZDIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRkZXBlbmRzIG9uIElOVEVMX01FSSBcdTAwMjZcdTAwMjYgTkZDX0hDSVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCB0byB1c2UgYW4gbWVpIGJ1cyBuZmMgZGV2aWNlLiBTZWxlY3QgdGhpcyBpZiB5b3VcbiAgMjY6XHRcdCAgd2lsbCB1c2UgYW4gSENJIE5GQyBkcml2ZXIgZm9yIGFuIE5GQyBjaGlwIGNvbm5lY3RlZCBiZWhpbmQgYW5cbiAgMjc6XHRcdCAgSW50ZWwmIzM5O3MgTWFuYWdlbWVudCBFbmdpbmUgY2hpcC5cbiAgMjg6XHRcbiAgMjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgTkZDX1NJTVxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBkcml2ZXIgZGVjbGFyZXMgdHdvIHZpcnR1YWwgTkZDIGRldmljZXMgc3VwcG9ydGluZyBORkMtREVQXG4gIDM2Olx0XHQgIHByb3RvY29sLiBBbiBMTENQIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlbSBhbmRcbiAgMzc6XHRcdCAgYWxsIHBhY2tldHMgc2VudCBmcm9tIG9uZSBkZXZpY2UgaXMgc2VudCBiYWNrIHRvIHRoZSBvdGhlciwgYWN0aW5nIGFzXG4gIDM4Olx0XHQgIGxvb3BiYWNrIGRldmljZXMuXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDIyCgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDcyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBORkMgTExDUCBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIE5GQyBMTENQIGZ1enppbmcgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19ORkNgIGlzIHRoZSBrZXkgZW5hYmxlciBmb3IgYGxsY3BfY29yZS5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhpcy4gYENPTkZJR19ORkNfRElHSVRBTGAgYW5kIGBDT05GSUdfTkZDX1NJTWAgbG9vayBsaWtlIHZpcnR1YWwgZHJpdmVycyBzcGVjaWZpY2FsbHkgZm9yIGZ1enppbmcsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4KCkkgc3RhcnRlZCBieSBsb29raW5nIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBpdCBzZWVtcyB0byBiZSBgbmZjX2xsY3BfcmVjdl9oZGxjYCBhbmQgYG5mY19sbGNwX3JlY3ZfZG1gLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgc3RhdGljLCBzbyBJIGNoZWNrZWQgdGhlIGNvZGUgaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgLiBMaW5lIDEwNzAgY29uZmlybXMgYG5mY19sbGNwX3JlY3ZfaGRsY2AgaXMgc3RhdGljLCBhbmQgbGluZSAxMjU0IHNob3dzIGBuZmNfbGxjcF9yZWN2X2RtYCBpcyBhbHNvIHN0YXRpYy4gRXZlbiBzdGF0aWMgZnVuY3Rpb25zIGhhdmUgc3ltYm9scyBpbiB2bWxpbnV4LCBzbyBsZXQmIzM5O3Mga2VlcCBhbiBleWUgb24gdGhvc2UuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBhbnkgcmVsYXRlZCBlbnRyeSBwb2ludHMsIHNvIGBuZmNfbGxjcF9yeF9za2JgLCBgbmZjX2xsY3BfcmVjdmAgYW5kIGBuZmNfbGxjcF9kYXRhX3JlY2VpdmVkYCBjYXVnaHQgbXkgZXllLgoKTm93IEkgbmVlZCB0byBkZWNpZGUgaWYgdGhvc2UgYXJlIHN1aXRhYmxlIGBGb2N1c1N5bWJvbHNgLiBZZXMsIHRoZXkgYXJlIGZlYXR1cmUtc3BlY2lmaWMgYW5kIHBhdGNoZWQuIFRoZXJlZm9yZSwgdGhlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGluY2x1ZGU6IGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBgbmZjX2xsY3BfcmVjdl9kbWAsIGBuZmNfbGxjcF9yeF9za2JgLCBgbmZjX2xsY3BfZGF0YV9yZWNlaXZlZGAsIGFuZCBgbmZjX2xsY3BfcmVjdmAuCgpGb3IgdGhlIGBFbmFibGVDb25maWdzYCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgTkZDYCwgYE5GQ19ESUdJVEFMYCwgYW5kIGBORkNfU0lNYCBhcmUgdGhlIHJpZ2h0IG9uZXMuIEkgbmVlZGVkIHRvIHZlcmlmeSB0aGlzLiBDaGVja2luZyB0aGUgYG5ldC9uZmMvTWFrZWZpbGVgIGNvbmZpcm1zIHRoaXMuIGBvYmotJChDT05GSUdfTkZDKSAmIzQzOz0gbmZjLm9gIHRlbGxzIG1lIGBORkNgIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbW9kdWxlIHN1Z2dlc3RzIHRoYXQgYE5GQ19ESUdJVEFMYCBhbmQgYE5GQ19TSU1gIGFyZSB0aGUgdmlydHVhbCB0ZXN0IGVuYWJsZXJzLgoKRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSYjMzk7dmUgZm9sbG93ZWQgYWxsIG9mIHRoZSBzdGVwcyBpbiB0aGUgaW5zdHJ1Y3Rpb25zLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZToKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtuZmNfbGxjcF9yZWN2X2hkbGMmIzM0OywgJiMzNDtuZmNfbGxjcF9yZWN2X2RtJiMzNDssICYjMzQ7bmZjX2xsY3Bfcnhfc2tiJiMzNDssICYjMzQ7bmZjX2xsY3BfcmVjdiYjMzQ7LCAmIzM0O25mY19sbGNwX2RhdGFfcmVjZWl2ZWQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtORkMmIzM0OywgJiMzNDtORkNfRElHSVRBTCYjMzQ7LCAmIzM0O05GQ19TSU0mIzM0O11gCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgdW5kZXJzdGFuZGFibGUuCgpOb3cgSSYjMzk7bSByZWFkeSB0byBtYWtlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX0RJR0lUQUwmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX3JlY3ZfaGRsYyYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2X2RtJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3J4X3NrYiYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yZWN2JiMzNDssCiAgICAmIzM0O25mY19sbGNwX2RhdGFfcmVjZWl2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwYWNrZXQgbGVuZ3RoIGJvdW5kYXJ5IGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3NpbmcgbWFsZm9ybWVkIExMQ1AgcGFja2V0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiB0aGUgTkZDIExMQ1AgbGF5ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBORkMgZHJpdmVycyAoZS5nLiBuZmNzaW0pIGFuZCBBRl9ORkMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19ESUdJVEFMJiMzNDssCiAgICAmIzM0O05GQ19TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZmNfbGxjcF9yZWN2X2hkbGMmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVjdl9kbSYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9yeF9za2ImIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVjdiYjMzQ7LAogICAgJiMzNDtuZmNfbGxjcF9kYXRhX3JlY2VpdmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGFja2V0IGxlbmd0aCBib3VuZGFyeSBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIG1hbGZvcm1lZCBMTENQIHBhY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gdGhlIE5GQyBMTENQIGxheWVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgTkZDIGRyaXZlcnMgKGUuZy4gbmZjc2ltKSBhbmQgQUZfTkZDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3Npbmcgc2tiIGxlbmd0aCBib3VuZHMgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgYmVmb3JlIGFjY2Vzc2luZyBieXRlIG9mZnNldCAyIChza2ItXHUwMDNlZGF0YVsyXSkgZm9yIHNlcXVlbmNlIG51bWJlcnMgLyByZWFzb24gY29kZXMuIFRoZXNlIGNoYW5nZXMgZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkcyBvbiB0cnVuY2F0ZWQgTkZDIExMQ1AgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHNwYXRpYWwgbWVtb3J5IGVycm9ycyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc5MTlkNTAwNWU0YTFmYzViNDlkZWMxOGY3OGFkYjI2NDQ2ZDQ0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDQ6NTA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuYwppbmRleCBjYWMxYjU0ODcwNjRkLi44OWQ2ZjQ1OTllMTFhIDEwMDY0NAotLS0gYS9uZXQvbmZjL2xsY3BfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbGxjcF9jb3JlLmMKQEAgLTEwNzcsNiAmIzQzOzEwNzcsMTIgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsCiAJcHR5cGUgPSBuZmNfbGxjcF9wdHlwZShza2IpOwogCWRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7CiAJc3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkUpIHsKJiM0MzsJCW5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCW5zID0gbmZjX2xsY3BfbnMoc2tiKTsKIAluciA9IG5mY19sbGNwX25yKHNrYik7CiAKQEAgLTEyNTQsNiAmIzQzOzEyNjAsMTAgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLAogCiAJZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTsKIAlzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpOwomIzQzOwomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyBMTENQX0hFQURFUl9TSVpFICYjNDM7IDEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJcmVhc29uID0gc2tiLSZndDtkYXRhWzJdOwogCiAJcHJfZGVidWcoJiMzNDslZCAlZCByZWFzb24gJWRcbiYjMzQ7LCBzc2FwLCBkc2FwLCByZWFzb24pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxMQoJCQkJCQkJb3V0cHV0OiA4MAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoqKkFzc2Vzc2luZyB0aGUgTmVlZCBmb3IgS01TQU4gRnV6emluZyBvbiBUaGlzIFBhdGNoKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIEtNU0FOIGZ1enppbmcgaXMgd2FycmFudGVkIGZvciB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFyZWFzIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIGFuZCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEdpdmVuIHRoZSBkb21haW4sIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggc2hhcmVkIHJlc291cmNlcywgYnVmZmVycywgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgbmZjIHN1YnN5c3RlbSBpcywgb2YgY291cnNlLCBpbnRlcmVzdGluZy4KClRoZXJlZm9yZSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgbmV0L25mYy9sbGNwX2NvcmUuY2AuIEkmIzM5O2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbmF2aWdhdGUgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgYXJvdW5kIDEwNzcgYW5kIDEyNTQuIFRob3NlIGxpbmUgbnVtYmVycyBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIGxpa2VseSBpbmRpY2F0aXZlIG9mIGludGVyZXN0aW5nIGNvbnRyb2wgZmxvdyBvciBkYXRhIG1hbmlwdWxhdGlvbi4gSSYjMzk7bGwgcmVhZCB3aXRoIGFuIGV5ZSBmb3IgYW55IHBvaW50ZXIgYXJpdGhtZXRpYywgYnVmZmVyIGFjY2Vzc2VzLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBmb2N1c2luZyBvbiBob3cgZGF0YSBpcyBoYW5kbGVkIGFuZCBhbGxvY2F0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhIEtNU0FOIHJ1biB3b3VsZCBiZSBiZW5lZmljaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbjEwNzE6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuMTA3NDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTA3NTpcdFx0dTggZHNhcCwgc3NhcCwgcHR5cGUsIG5zLCBucjtcbjEwNzY6XHRcbjEwNzc6XHRcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcbjEwNzg6XHRcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4xMDc5Olx0XHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuMTA4MDpcdFxuMTA4MTpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XG4xMDgyOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwODM6XHRcdFx0cmV0dXJuO1xuMTA4NDpcdFx0fVxuMTA4NTpcdFxuMTA4NjpcdFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xuMTA4NzpcdFx0bnIgPSBuZmNfbGxjcF9ucihza2IpO1xuMTA4ODpcdFxuMTA4OTpcdFx0cHJfZGVidWcoXCYjMzQ7JWQgJWQgUiAlZCBTICVkXFxuXCYjMzQ7LCBkc2FwLCBzc2FwLCBuciwgbnMpO1xuMTA5MDpcdFxuMTA5MTpcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xuMTA5MjpcdFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XG4xMDkzOlx0XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbjEwOTQ6XHRcdFx0cmV0dXJuO1xuMTA5NTpcdFx0fVxuMTA5NjpcdFxuMTA5NzpcdFx0c2sgPSBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2s7XG4xMDk4Olx0XHRsb2NrX3NvY2soc2spO1xuMTA5OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4xMTAwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMTAxOlx0XHRcdG5mY19sbGNwX3NvY2tfcHV0KGxsY3Bfc29jayk7XG4xMTAyOlx0XHRcdHJldHVybjtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdC8qIFBhc3MgdGhlIHBheWxvYWQgdXBzdHJlYW0gKi9cbjExMDY6XHRcdGlmIChwdHlwZSA9PSBMTENQX1BEVV9JKSB7XG4xMTA3Olx0XHRcdHByX2RlYnVnKFwmIzM0O0kgZnJhbWUsIHF1ZXVlaW5nIG9uICVwXFxuXCYjMzQ7LCBcdTAwMjZsbGNwX3NvY2stXHUwMDNlc2spO1xuMTEwODpcdFxuMTEwOTpcdFx0XHRpZiAobnMgPT0gbGxjcF9zb2NrLVx1MDAzZXJlY3ZfbilcbjExMTA6XHRcdFx0XHRsbGNwX3NvY2stXHUwMDNlcmVjdl9uID0gKGxsY3Bfc29jay1cdTAwM2VyZWN2X24gJiM0MzsgMSkgJSAxNjtcbjExMTE6XHRcdFx0ZWxzZVxuMTExMjpcdFx0XHRcdHByX2VycihcJiMzNDtSZWNlaXZlZCBvdXQgb2Ygc2VxdWVuY2UgSSBQRFVcXG5cJiMzNDspO1xuMTExMzpcdFxuMTExNDpcdFx0XHRza2JfcHVsbChza2IsIExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgTExDUF9TRVFVRU5DRV9TSVpFKTtcbjExMTU6XHRcdFx0aWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2IoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZXNrLCBza2IpKSB7XG4xMTE2Olx0XHRcdFx0LypcbjExMTc6XHRcdFx0XHQgKiBJIGZyYW1lcyB3aWxsIGJlIGZyZWVkIGZyb20gdGhlIHNvY2tldCBsYXllciwgc28gd2VcbjExMTg6XHRcdFx0XHQgKiBuZWVkIHRvIGtlZXAgdGhlbSBhbGl2ZSB1bnRpbCBzb21lb25lIHJlY2VpdmVzIHRoZW0uXG4xMTE5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI0NTpcdFxuMTI0NjpcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NPTk5FQ1RFRDtcbjEyNDc6XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4xMjQ4Olx0XG4xMjQ5Olx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTI1MDpcdFxuMTI1MTpcdFx0bmZjX2xsY3Bfc29ja19wdXQobGxjcF9zb2NrKTtcbjEyNTI6XHR9XG4xMjUzOlx0XG4xMjU0Olx0c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuMTI1NTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyNTY6XHR7XG4xMjU3Olx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuMTI1ODpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTI1OTpcdFx0dTggZHNhcCwgc3NhcCwgcmVhc29uO1xuMTI2MDpcdFxuMTI2MTpcdFx0ZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTtcbjEyNjI6XHRcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XG4xMjYzOlx0XG4xMjY0Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDUF9IRUFERVJfU0laRSAmIzQzOyAxKVxuMTI2NTpcdFx0XHRyZXR1cm47XG4xMjY2Olx0XG4xMjY3Olx0XHRyZWFzb24gPSBza2ItXHUwMDNlZGF0YVsyXTtcbjEyNjg6XHRcbjEyNjk6XHRcdHByX2RlYnVnKFwmIzM0OyVkICVkIHJlYXNvbiAlZFxcblwmIzM0Oywgc3NhcCwgZHNhcCwgcmVhc29uKTtcbjEyNzA6XHRcbjEyNzE6XHRcdHN3aXRjaCAocmVhc29uKSB7XG4xMjcyOlx0XHRjYXNlIExMQ1BfRE1fTk9CT1VORDpcbjEyNzM6XHRcdGNhc2UgTExDUF9ETV9SRUo6XG4xMjc0Olx0XHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX2Nvbm5lY3Rpbmdfc29ja19nZXQobG9jYWwsIGRzYXApO1xuMTI3NTpcdFx0XHRicmVhaztcbjEyNzY6XHRcbjEyNzc6XHRcdGRlZmF1bHQ6XG4xMjc4Olx0XHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2tfZ2V0KGxvY2FsLCBkc2FwLCBzc2FwKTtcbjEyNzk6XHRcdFx0YnJlYWs7XG4xMjgwOlx0XHR9XG4xMjgxOlx0XG4xMjgyOlx0XHRpZiAobGxjcF9zb2NrID09IE5VTEwpIHtcbjEyODM6XHRcdFx0cHJfZGVidWcoXCYjMzQ7QWxyZWFkeSBjbG9zZWRcXG5cJiMzNDspO1xuMTI4NDpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTExDUCBEZXRhaWxzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgTExDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRob3NlIGtleSB2YXJpYWJsZXMg4oCTIGBuZmNfbGxjcF9uc2AsIGBuZmNfbGxjcF9ucmAsIGBuZmNfbGxjcF9wdHlwZWAsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIHN1c3BlY3QgdGhleSYjMzk7bGwgYmUgaW4gb25lIG9mIHRoZSByZWxldmFudCBoZWFkZXJzLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4uCgpCZXlvbmQganVzdCBmaW5kaW5nIHRoZWlyIGRlZmluaXRpb25zLCBJIGFsc28gbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhlYWRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyLCB0aGUgYXJyYW5nZW1lbnQgb2YgaXRzIGZpZWxkcywgYW5kIGFueSBwb3RlbnRpYWwgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoaXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBlZmZpY2llbnQgcGFja2V0IGNyYWZ0aW5nIGFuZCBwYXJzaW5nLCBhbmQgZm9yIGRlYnVnZ2luZyBhbnkgbG93ZXItbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm9ibGVtcyB0aGF0IG1pZ2h0IGFyaXNlLiBUaGUgc3BlY2lmaWMgYnl0ZSBsYXlvdXQgaXMgcHJvYmFibHkgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgTExDUF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3AuaD02PWVudW0gbGxjcF9zdGF0ZSB7XG4tLVxubmV0L25mYy9sbGNwLmgtMTMtXG5uZXQvbmZjL2xsY3AuaDoxNDojZGVmaW5lIExMQ1BfREVGQVVMVF9MVE8gMTAwXG5uZXQvbmZjL2xsY3AuaDoxNTojZGVmaW5lIExMQ1BfREVGQVVMVF9SVyAgMVxubmV0L25mYy9sbGNwLmg6MTY6I2RlZmluZSBMTENQX0RFRkFVTFRfTUlVIDEyOFxubmV0L25mYy9sbGNwLmgtMTctXG5uZXQvbmZjL2xsY3AuaDoxODojZGVmaW5lIExMQ1BfTUFYX0xUTyAgMHhmZlxubmV0L25mYy9sbGNwLmg6MTk6I2RlZmluZSBMTENQX01BWF9SVyAgIDE1XG5uZXQvbmZjL2xsY3AuaDoyMDojZGVmaW5lIExMQ1BfTUFYX01JVVggMHg3ZmZcbm5ldC9uZmMvbGxjcC5oOjIxOiNkZWZpbmUgTExDUF9NQVhfTUlVIChMTENQX01BWF9NSVVYICYjNDM7IDEyOClcbm5ldC9uZmMvbGxjcC5oLTIyLVxubmV0L25mYy9sbGNwLmg6MjM6I2RlZmluZSBMTENQX1dLU19OVU1fU0FQICAgMTZcbm5ldC9uZmMvbGxjcC5oOjI0OiNkZWZpbmUgTExDUF9TRFBfTlVNX1NBUCAgIDE2XG5uZXQvbmZjL2xsY3AuaDoyNTojZGVmaW5lIExMQ1BfTE9DQUxfTlVNX1NBUCAzMlxubmV0L25mYy9sbGNwLmg6MjY6I2RlZmluZSBMTENQX0xPQ0FMX1NBUF9PRkZTRVQgKExMQ1BfV0tTX05VTV9TQVAgJiM0MzsgTExDUF9TRFBfTlVNX1NBUClcbm5ldC9uZmMvbGxjcC5oOjI3OiNkZWZpbmUgTExDUF9NQVhfU0FQIChMTENQX1dLU19OVU1fU0FQICYjNDM7IExMQ1BfU0RQX05VTV9TQVAgJiM0MzsgTExDUF9MT0NBTF9OVU1fU0FQKVxubmV0L25mYy9sbGNwLmg6Mjg6I2RlZmluZSBMTENQX1NEUF9VTkJPVU5EICAgKExMQ1BfTUFYX1NBUCAmIzQzOyAxKVxubmV0L25mYy9sbGNwLmgtMjktXG4tLVxubmV0L25mYy9sbGNwLmg9MTQxPXN0cnVjdCBuZmNfbGxjcF91aV9jYiB7XG4tLVxubmV0L25mYy9sbGNwLmgtMTUwLVxubmV0L25mYy9sbGNwLmg6MTUxOiNkZWZpbmUgTExDUF9IRUFERVJfU0laRSAgIDJcbm5ldC9uZmMvbGxjcC5oOjE1MjojZGVmaW5lIExMQ1BfU0VRVUVOQ0VfU0laRSAxXG5uZXQvbmZjL2xsY3AuaDoxNTM6I2RlZmluZSBMTENQX0FHRl9QRFVfSEVBREVSX1NJWkUgMlxubmV0L25mYy9sbGNwLmgtMTU0LVxubmV0L25mYy9sbGNwLmgtMTU1LS8qIExMQ1AgdmVyc2lvbnM6IDEuMSBpcyAxLjAgcGx1cyBTRFAgKi9cbm5ldC9uZmMvbGxjcC5oOjE1NjojZGVmaW5lIExMQ1BfVkVSU0lPTl8xMCAweDEwXG5uZXQvbmZjL2xsY3AuaDoxNTc6I2RlZmluZSBMTENQX1ZFUlNJT05fMTEgMHgxMVxubmV0L25mYy9sbGNwLmgtMTU4LVxubmV0L25mYy9sbGNwLmgtMTU5LS8qIExMQ1AgUERVIHR5cGVzICovXG5uZXQvbmZjL2xsY3AuaDoxNjA6I2RlZmluZSBMTENQX1BEVV9TWU1NICAgICAweDBcbm5ldC9uZmMvbGxjcC5oOjE2MTojZGVmaW5lIExMQ1BfUERVX1BBWCAgICAgIDB4MVxubmV0L25mYy9sbGNwLmg6MTYyOiNkZWZpbmUgTExDUF9QRFVfQUdGICAgICAgMHgyXG5uZXQvbmZjL2xsY3AuaDoxNjM6I2RlZmluZSBMTENQX1BEVV9VSSAgICAgICAweDNcbm5ldC9uZmMvbGxjcC5oOjE2NDojZGVmaW5lIExMQ1BfUERVX0NPTk5FQ1QgIDB4NFxubmV0L25mYy9sbGNwLmg6MTY1OiNkZWZpbmUgTExDUF9QRFVfRElTQyAgICAgMHg1XG5uZXQvbmZjL2xsY3AuaDoxNjY6I2RlZmluZSBMTENQX1BEVV9DQyAgICAgICAweDZcbm5ldC9uZmMvbGxjcC5oOjE2NzojZGVmaW5lIExMQ1BfUERVX0RNICAgICAgIDB4N1xubmV0L25mYy9sbGNwLmg6MTY4OiNkZWZpbmUgTExDUF9QRFVfRlJNUiAgICAgMHg4XG5uZXQvbmZjL2xsY3AuaDoxNjk6I2RlZmluZSBMTENQX1BEVV9TTkwgICAgICAweDlcbm5ldC9uZmMvbGxjcC5oOjE3MDojZGVmaW5lIExMQ1BfUERVX0kgICAgICAgIDB4Y1xubmV0L25mYy9sbGNwLmg6MTcxOiNkZWZpbmUgTExDUF9QRFVfUlIgICAgICAgMHhkXG5uZXQvbmZjL2xsY3AuaDoxNzI6I2RlZmluZSBMTENQX1BEVV9STlIgICAgICAweGVcbm5ldC9uZmMvbGxjcC5oLTE3My1cbm5ldC9uZmMvbGxjcC5oLTE3NC0vKiBQYXJhbWV0ZXJzIFRMViB0eXBlcyAqL1xubmV0L25mYy9sbGNwLmg6MTc1OiNkZWZpbmUgTExDUF9UTFZfVkVSU0lPTiAweDFcbm5ldC9uZmMvbGxjcC5oOjE3NjojZGVmaW5lIExMQ1BfVExWX01JVVggICAgMHgyXG5uZXQvbmZjL2xsY3AuaDoxNzc6I2RlZmluZSBMTENQX1RMVl9XS1MgICAgIDB4M1xubmV0L25mYy9sbGNwLmg6MTc4OiNkZWZpbmUgTExDUF9UTFZfTFRPICAgICAweDRcbm5ldC9uZmMvbGxjcC5oOjE3OTojZGVmaW5lIExMQ1BfVExWX1JXICAgICAgMHg1XG5uZXQvbmZjL2xsY3AuaDoxODA6I2RlZmluZSBMTENQX1RMVl9TTiAgICAgIDB4NlxubmV0L25mYy9sbGNwLmg6MTgxOiNkZWZpbmUgTExDUF9UTFZfT1BUICAgICAweDdcbm5ldC9uZmMvbGxjcC5oOjE4MjojZGVmaW5lIExMQ1BfVExWX1NEUkVRICAgMHg4XG5uZXQvbmZjL2xsY3AuaDoxODM6I2RlZmluZSBMTENQX1RMVl9TRFJFUyAgIDB4OVxubmV0L25mYy9sbGNwLmg6MTg0OiNkZWZpbmUgTExDUF9UTFZfTUFYICAgICAweGFcbm5ldC9uZmMvbGxjcC5oLTE4NS1cbm5ldC9uZmMvbGxjcC5oLTE4Ni0vKiBXZWxsIGtub3duIExMQ1AgU0FQICovXG5uZXQvbmZjL2xsY3AuaDoxODc6I2RlZmluZSBMTENQX1NBUF9TRFAgICAweDFcbm5ldC9uZmMvbGxjcC5oOjE4ODojZGVmaW5lIExMQ1BfU0FQX0lQICAgIDB4MlxubmV0L25mYy9sbGNwLmg6MTg5OiNkZWZpbmUgTExDUF9TQVBfT0JFWCAgMHgzXG5uZXQvbmZjL2xsY3AuaDoxOTA6I2RlZmluZSBMTENQX1NBUF9TTkVQICAweDRcbm5ldC9uZmMvbGxjcC5oOjE5MTojZGVmaW5lIExMQ1BfU0FQX01BWCAgIDB4ZmZcbm5ldC9uZmMvbGxjcC5oLTE5Mi1cbm5ldC9uZmMvbGxjcC5oLTE5My0vKiBEaXNjb25uZWN0aW9uIHJlYXNvbiBjb2RlICovXG5uZXQvbmZjL2xsY3AuaDoxOTQ6I2RlZmluZSBMTENQX0RNX0RJU0MgICAgMHgwMFxubmV0L25mYy9sbGNwLmg6MTk1OiNkZWZpbmUgTExDUF9ETV9OT0NPTk4gIDB4MDFcbm5ldC9uZmMvbGxjcC5oOjE5NjojZGVmaW5lIExMQ1BfRE1fTk9CT1VORCAweDAyXG5uZXQvbmZjL2xsY3AuaDoxOTc6I2RlZmluZSBMTENQX0RNX1JFSiAgICAgMHgwM1xubmV0L25mYy9sbGNwLmgtMTk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYG5mY19sbGNwX25zYCBhbmQgYG5mY19sbGNwX25yYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHN5c3RlbSBpcyBkb2luZyB3aXRoIHRoZXNlIHR3byB2YXJpYWJsZXMsIGBuZmNfbGxjcF9uc2AgYW5kIGBuZmNfbGxjcF9ucmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkZWx2aW5nIGludG8gdGhlaXIgcHVycG9zZSBhbmQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHJvbGVzIHdpdGhpbiB0aGUgTkZDIExvdyBMZXZlbCBDb21tdW5pY2F0aW9uIFByb3RvY29sIChMTENQKSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGF0IGRvICYjMzQ7TlMmIzM0OyBhbmQgJiMzNDtOUiYjMzQ7IHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQ/IEFyZSB0aGV5IHNlcXVlbmNlIG51bWJlcnMsIGNvdW50ZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQXJlIHRoZXkgcmVsYXRlZCB0byBzZW5kaW5nIG9yIHJlY2VpdmluZz8gQXJlIHRoZXkgbGlua2VkIHRvIGFueSBzcGVjaWZpYyBMTENQIGZyYW1lIHR5cGVzLCBsaWtlIEluZm9ybWF0aW9uIChJKSwgVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAoVUkpLCBvciBTdXBlcnZpc29yeSAoUyk/IFRoZSBkZXRhaWxzIHdpbGwgbGlrZWx5IGJlIGJ1cmllZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgc28gSSYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0byB0cmFjZSB0aGVpciB1c2FnZSB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGVuIGl0JiMzOTtzIGFib3V0IGNvbm5lY3RpbmcgdGhlc2UgdmFyaWFibGVzIHRvIGhvdyB0aGUgTkZDIGNvbnRyb2xsZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJJiMzOTttIGxvb2tpbmcgYXQgYSBzZW5kZXIvcmVjZWl2ZXIgcmVsYXRpb25zaGlwIG9yIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBhIHBlZXItdG8tcGVlciBjb25uZWN0aW9uLiBVbHRpbWF0ZWx5LCBmaWd1cmluZyBvdXQgd2hhdCB0aGVzZSB2YXJpYWJsZXMgc3RhbmQgZm9yIGlzIHRoZSBpbml0aWFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb21tdW5pY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX25bc3JdJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvcmUuYz02OTk9c3RhdGljIHU4IG5mY19sbGNwX3NzYXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTcwMy1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6NzA0OnN0YXRpYyB1OCBuZmNfbGxjcF9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxubmV0L25mYy9sbGNwX2NvcmUuYy03MDUte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzA4LVxubmV0L25mYy9sbGNwX2NvcmUuYzo3MDk6c3RhdGljIHU4IG5mY19sbGNwX25yKGNvbnN0IHN0cnVjdCBza19idWZmICpwZHUpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTcxMC17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xMDcwPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4NS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4NjpcdG5zID0gbmZjX2xsY3BfbnMoc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4NzpcdG5yID0gbmZjX2xsY3BfbnIoc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4OC1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMzQtXHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZXR4X3BlbmRpbmdfcXVldWUsIHMsIHRtcCkge1xubmV0L25mYy9sbGNwX2NvcmUuYzoxMTM1Olx0XHRcdG4gPSBuZmNfbGxjcF9ucyhzKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTEzNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGxsY3BfY29yZS5jOiBMaW5lcyA2OTUtNzIwKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgTExDUCBjb3JlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDY5NS03MjAuIExldCBtZSBwdWxsIHRoYXQgdXAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkga25vdyB0aGlzIGFyZWEgZGVhbHMgd2l0aC4uLiAqW3BhdXNlcywgbWVudGFsbHkgcmV2aWV3aW5nIGxsY3BfY29yZSYjMzk7cyBmdW5jdGlvbl0qIC4uLnByb2JhYmx5IHRoZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgbG9naWMsIG9yIHBlcmhhcHMgc2Vzc2lvbiBlc3RhYmxpc2htZW50L3Rlcm1pbmF0aW9uLCBvciBwb3NzaWJseSBkYXRhIHRyYW5zbWlzc2lvbiBmbG93IGNvbnRyb2wuIEdpdmVuIHRoZSBsaW5lIHJhbmdlLCBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IGZvY3VzZWQgYml0IG9mIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBvciBjb2RlIGJsb2NrIHRoZXNlIGxpbmVzIGJlbG9uZyB0byB3aXRoaW4gdGhlIGxhcmdlciBMTENQIGNvbnRleHQuIElzIHRoaXMgcGFydCBvZiB0aGUgY29ubmVjdCByZXF1ZXN0IGhhbmRsaW5nPyBUaGUgZGF0YSBhY2tub3dsZWRnbWVudCBwcm9jZXNzPyBPciBtYXliZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSB0aW1lciBtYW5hZ2VtZW50IGZvciBrZWVwLWFsaXZlIHBhY2tldHMgb3IgY29ubmVjdGlvbiB0aW1lb3V0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWxseSBzdWJ0bGUgZXJyb3IgaGFuZGxpbmcgb3Igc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBoZXJlLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGhvcGluZyBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgdGhvdWdoIHdpdGggTExDUCYjMzk7cyBpbmhlcmVudCB0aHJlYWRpbmcgbW9kZWwsIHRoYXQmIzM5O3MgYWx3YXlzIGEgcG9zc2liaWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqc2F5cyouIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgYW5kIHRoZW4gem9vbSBpbiBvbiBhbnkgcGFydGljdWxhcmx5IGRlbnNlIG9yIGNvbXBsZXgtbG9va2luZyBjb25kaXRpb25hbCBicmFuY2hlcy4gTXkgYWltIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVudGlvbiBvZiB0aGUgY29kZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBMTENQIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NTpcdHtcbiA2OTY6XHRcdHJldHVybiAoKHBkdS1cdTAwM2VkYXRhWzBdIFx1MDAyNiAweDAzKSBcdTAwM2NcdTAwM2MgMikgfCAoKHBkdS1cdTAwM2VkYXRhWzFdIFx1MDAyNiAweGMwKSBcdTAwM2VcdTAwM2UgNik7XG4gNjk3Olx0fVxuIDY5ODpcdFxuIDY5OTpcdHN0YXRpYyB1OCBuZmNfbGxjcF9zc2FwKGNvbnN0IHN0cnVjdCBza19idWZmICpwZHUpXG4gNzAwOlx0e1xuIDcwMTpcdFx0cmV0dXJuIHBkdS1cdTAwM2VkYXRhWzFdIFx1MDAyNiAweDNmO1xuIDcwMjpcdH1cbiA3MDM6XHRcbiA3MDQ6XHRzdGF0aWMgdTggbmZjX2xsY3BfbnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcbiA3MDU6XHR7XG4gNzA2Olx0XHRyZXR1cm4gcGR1LVx1MDAzZWRhdGFbMl0gXHUwMDNlXHUwMDNlIDQ7XG4gNzA3Olx0fVxuIDcwODpcdFxuIDcwOTpcdHN0YXRpYyB1OCBuZmNfbGxjcF9ucihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxuIDcxMDpcdHtcbiA3MTE6XHRcdHJldHVybiBwZHUtXHUwMDNlZGF0YVsyXSBcdTAwMjYgMHhmO1xuIDcxMjpcdH1cbiA3MTM6XHRcbiA3MTQ6XHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9zZXRfbnJucyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgc3RydWN0IHNrX2J1ZmYgKnBkdSlcbiA3MTU6XHR7XG4gNzE2Olx0XHRwZHUtXHUwMDNlZGF0YVsyXSA9IChzb2NrLVx1MDAzZXNlbmRfbiBcdTAwM2NcdTAwM2MgNCkgfCAoc29jay1cdTAwM2VyZWN2X24pO1xuIDcxNzpcdFx0c29jay1cdTAwM2VzZW5kX24gPSAoc29jay1cdTAwM2VzZW5kX24gJiM0MzsgMSkgJSAxNjtcbiA3MTg6XHRcdHNvY2stXHUwMDNlcmVjdl9hY2tfbiA9IChzb2NrLVx1MDAzZXJlY3ZfbiAtIDEpICUgMTY7XG4gNzE5Olx0fVxuIDcyMDpcdFxuIDcyMTpcdHZvaWQgbmZjX2xsY3Bfc2VuZF90b19yYXdfc29jayhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIDcyMjpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBkaXJlY3Rpb24pXG4gNzIzOlx0e1xuIDcyNDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5ID0gTlVMTCwgKm5za2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5GQyBMTENQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZS4gU3BlY2lmaWNhbGx5IGluIGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBpdCBhY2Nlc3NlcyBgc2tiLSZndDtkYXRhWzJdYCB1c2luZyBgbmZjX2xsY3BfbnMoc2tiKWAgYW5kIGBuZmNfbGxjcF9ucihza2IpYC4gSWYgdGhlIGBza2ItJmd0O2xlbmAgd2FzIGxlc3MgdGhhbiAzICh3aGljaCBpcyBgTExDUF9IRUFERVJfU0laRWAgb2YgMiBwbHVzIGBMTENQX1NFUVVFTkNFX1NJWkVgIG9mIDEpLCB0aGF0IGBza2ItJmd0O2RhdGFbMl1gIGFjY2VzcyB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQhIFNpbWlsYXJseSwgaW4gYG5mY19sbGNwX3JlY3ZfZG1gLCBpdCByZWFkcyBgcmVhc29uID0gc2tiLSZndDtkYXRhWzJdYC4gIElmIGBza2ItJmd0O2xlbmAgd2FzIGxlc3MgdGhhbiAzIChhZ2FpbiwgYExMQ1BfSEVBREVSX1NJWkUgJiM0MzsgMWApLCB0aGF0IHJlYWQgd291bGQgYWxzbyBiZSBvdXQtb2YtYm91bmRzLgoKU28sIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBpbnRyb2R1Y2luZyBib3VuZHMgY2hlY2tzIHRvIHByZXZlbnQgdGhvc2Ugb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb24gYHNrYi0mZ3Q7ZGF0YWAuICBUaGVzZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gYHNrYmAgZGF0YSBidWZmZXJzIGFyZSBjbGFzc2ljIHNsYWIvc2tiIGJ1ZmZlciBpc3N1ZXMsIGFuZCBJJiMzOTtkIGV4cGVjdCBLQVNBTiB0byBiZSBmbGFnZ2luZyB0aGVtLgoKTm93LCBJIGFsd2F5cyBoYXZlIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuIExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgcXVlc3Rpb24gaXM6IEFyZSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/IEluIGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBpZiBgc2tiLSZndDtsZW5gIGlzIGxlc3MgdGhhbiBgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkVgLCBpdCBjYWxscyBgbmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pOyByZXR1cm47YC4gIEkgbmVlZCB0byByZXZpZXcgYG5mY19sbGNwX3NlbmRfZG1gIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZjX2xsY3Bfc2VuZF9kbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTI0MD1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTI0MS1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQyOmludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbik7XG5uZXQvbmZjL2xsY3AuaC0yNDMtaW50IG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTkzPWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyNi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYyNzppbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02Mjgte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9OTExPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTAzOC1cdC8qIFNlbmQgRE0gKi9cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTAzOTpcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIHJlYXNvbik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwNDAtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTA3MD1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwODEtXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDUF9IRUFERVJfU0laRSAmIzQzOyBMTENQX1NFUVVFTkNFX1NJWkUpIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4MjpcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xMDgzLVx0XHRyZXR1cm47XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDkyLVx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwOTM6XHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA5NC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTE2ND1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Rpc2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExODEtXHRpZiAobGxjcF9zb2NrID09IE5VTEwpIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE4MjpcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xMTgzLVx0XHRyZXR1cm47XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjAyLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjAzOlx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9ESVNDKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTIwNC1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTEyMDk9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTIyMS1cdFx0cHJfZXJyKFwmIzM0O0ludmFsaWQgQ0NcXG5cJiMzNDspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxMjIyOlx0XHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExvdy1MZXZlbCBMTENQIFNlbmQgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXNzZWN0IGBuZmNfbGxjcF9zZW5kX2RtYCDigJMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIERpcmVjdCBNb2RlIERhdGEgKERNKSBpcyBiZWluZyBzZW50IGF0IHRoZSBMTENQIGxldmVsLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgc3RlcHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQsIGFueSBmcmFtaW5nIG9yIGVycm9yIGNvcnJlY3Rpb24gbWVjaGFuaXNtcyB1c2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBORkMgbGF5ZXJzLiBHb3R0YSBnZXQgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgTExDUCBzZW5kIG9wZXJhdGlvbi4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3BfY29tbWFuZHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjI2Olx0XG4gNjI3Olx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxuIDYyODpcdHtcbiA2Mjk6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNjMwOlx0XHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuIDYzMTpcdFx0dTE2IHNpemUgPSAxOyAvKiBSZWFzb24gY29kZSAqL1xuIDYzMjpcdFxuIDYzMzpcdFx0cHJfZGVidWcoXCYjMzQ7U2VuZGluZyBETSByZWFzb24gMHgleFxcblwmIzM0OywgcmVhc29uKTtcbiA2MzQ6XHRcbiA2MzU6XHRcdGlmIChsb2NhbCA9PSBOVUxMKVxuIDYzNjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA2Mzc6XHRcbiA2Mzg6XHRcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiA2Mzk6XHRcdGlmIChkZXYgPT0gTlVMTClcbiA2NDA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNjQxOlx0XG4gNjQyOlx0XHRzaXplICYjNDM7PSBMTENQX0hFQURFUl9TSVpFO1xuIDY0MzpcdFx0c2l6ZSAmIzQzOz0gZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IGRldi1cdTAwM2V0eF90YWlscm9vbSAmIzQzOyBORkNfSEVBREVSX1NJWkU7XG4gNjQ0Olx0XG4gNjQ1Olx0XHRza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gNjQ2Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gNjQ3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDY0ODpcdFxuIDY0OTpcdFx0c2tiX3Jlc2VydmUoc2tiLCBkZXYtXHUwMDNldHhfaGVhZHJvb20gJiM0MzsgTkZDX0hFQURFUl9TSVpFKTtcbiA2NTA6XHRcbiA2NTE6XHRcdHNrYiA9IGxsY3BfYWRkX2hlYWRlcihza2IsIGRzYXAsIHNzYXAsIExMQ1BfUERVX0RNKTtcbiA2NTI6XHRcbiA2NTM6XHRcdHNrYl9wdXRfZGF0YShza2IsIFx1MDAyNnJlYXNvbiwgMSk7XG4gNjU0Olx0XG4gNjU1Olx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZsb2NhbC1cdTAwM2V0eF9xdWV1ZSwgc2tiKTtcbiA2NTY6XHRcbiA2NTc6XHRcdHJldHVybiAwO1xuIDY1ODpcdH1cbiA2NTk6XHRcbiA2NjA6XHRpbnQgbmZjX2xsY3Bfc2VuZF9pX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxuIDY2MTpcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIDY2MjpcdHtcbiA2NjM6XHRcdHN0cnVjdCBza19idWZmICpwZHU7XG4gNjY0Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzb2NrLVx1MDAzZXNrO1xuIDY2NTpcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTcKCQkJCQkJCW91dHB1dDogMTU4CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgY3J1Y2lhbCwgdnVsbmVyYWJpbGl0eS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgdHdvIGZ1bmN0aW9ucyBoZXJlOiBgbmZjX2xsY3BfcmVjdl9oZGxjKClgIGFuZCBgbmZjX2xsY3BfcmVjdl9kbSgpYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgbmV0d29yayBwYWNrZXRzLCBzcGVjaWZpY2FsbHksIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgZGF0YS4KCkJlZm9yZSB0aGlzIHBhdGNoLCBpZiBhIG1hbGljaW91cyBhY3RvciBzZW50IGEgc2hvcnQgcGFja2V04oCUb25lIHdoZXJlIHRoZSBsZW5ndGggb2YgYHNrYi0mZ3Q7ZGF0YWAgd2FzIGxlc3MgdGhhbiB0aGUgZXhwZWN0ZWQgaGVhZGVyIHNpemUgcGx1cyBzZXF1ZW5jZSBvciByZWFzb24gYnl0ZXPigJR3ZSYjMzk7ZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gSW4gYG5mY19sbGNwX3JlY3ZfaGRsYygpYCwgdGhlIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBza2ItJmd0O2RhdGFbMl1gIHdpdGhvdXQgdmVyaWZ5aW5nIHRoYXQgdGhlIGBza2JgIHdhcyBhY3R1YWxseSBsb25nIGVub3VnaC4gVGhlIHNhbWUgaXNzdWUgZXhpc3RlZCBpbiBgbmZjX2xsY3BfcmVjdl9kbSgpYCB3aXRoIHRoZSBhY2Nlc3MgdG8gYHNrYi0mZ3Q7ZGF0YVsyXWAuIFRoaXMgaXMgdGhlIGNsYXNzaWMga2luZCBvZiBzcGF0aWFsIG1lbW9yeSBlcnJvciB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHNpbXBsZSBhbmQgZWxlZ2FudDogaXQgYWRkcyBwcm9wZXIgbGVuZ3RoIGNoZWNrcy4gTm93LCBiZWZvcmUgYWNjZXNzaW5nIGBza2ItJmd0O2RhdGFbMl1gLCBib3RoIGZ1bmN0aW9ucyB3aWxsIHZlcmlmeSB0aGF0IHRoZSBwYWNrZXQgbGVuZ3RoIGlzIHN1ZmZpY2llbnQuIElmIHRoZSBwYWNrZXQgaXMgdG9vIHNob3J0LCBhIERNIChEaXNjb25uZWN0IE1vZGUpIGlzIHNlbnQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBObyBtb3JlIG91dC1vZi1ib3VuZHMgcmVhZHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbXkgYXNzZXNzbWVudDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBjYXJlZnVsbHkgYW5kIEkgY2FuIHNheSBjb25maWRlbnRseSB0aGF0OgoKKiAgIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLgoqICAgTm8gdmFyaWFibGVzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuCiogICBUaGVyZSBhcmUgbm8gbWVtb3J5IGluZm9ybWF0aW9uIGxlYWtzLgoqICAgVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFscyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4KCkdpdmVuIHRoZXNlIG9ic2VydmF0aW9ucywgdGhpcyBwYXRjaCBpcyBhIGNsZWFyIHdpbjsgaXQgc29sdmVzIGFuIGlkZW50aWZpZWQgc3BhdGlhbCBtZW1vcnkgZXJyb3IgKG91dC1vZi1ib3VuZHMgcmVhZCkgd2l0aG91dCBpbnRyb2R1Y2luZyBhbnkgb3RoZXIgcmlza3MuIFRoaXMgaXMgd2h5IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgZnV6emluZyBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIGFyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gYE5lZWRzS01TQU49ZmFsc2VgIGlzIGFjY3VyYXRlIGhlcmUsIGFuZCB0aGUgcHJvdmlkZWQgcmVhc29uaW5nIGlzIGFsc28gY2xlYXIgYW5kIHZhbGlkLiBUaGUgY29kZSBpcyBnb29kLiBUaW1lIHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3Npbmcgc2tiIGxlbmd0aCBib3VuZHMgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgYmVmb3JlIGFjY2Vzc2luZyBieXRlIG9mZnNldCAyIChza2ItXHUwMDNlZGF0YVsyXSkgZm9yIHNlcXVlbmNlIG51bWJlcnMgLyByZWFzb24gY29kZXMuIFRoZXNlIGNoYW5nZXMgZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkcyBvbiB0cnVuY2F0ZWQgTkZDIExMQ1AgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHNwYXRpYWwgbWVtb3J5IGVycm9ycyBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVx1MDAzZWRhdGFbMl0pIGZvciBzZXF1ZW5jZSBudW1iZXJzIC8gcmVhc29uIGNvZGVzLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZHMgb24gdHJ1bmNhdGVkIE5GQyBMTENQIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzcGF0aWFsIG1lbW9yeSBlcnJvcnMgY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MjIuNjIzMTA0NjQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMDExNzMyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfRElHSVRBTFwiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX3JlY3ZfaGRsY1wiLFxuICAgIFwibmZjX2xsY3BfcmVjdl9kbVwiLFxuICAgIFwibmZjX2xsY3Bfcnhfc2tiXCIsXG4gICAgXCJuZmNfbGxjcF9yZWN2XCIsXG4gICAgXCJuZmNfbGxjcF9kYXRhX3JlY2VpdmVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3Npbmcgc2tiIGxlbmd0aCBib3VuZHMgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgYmVmb3JlIGFjY2Vzc2luZyBieXRlIG9mZnNldCAyIChza2ItXFx1MDAzZWRhdGFbMl0pIGZvciBzZXF1ZW5jZSBudW1iZXJzIC8gcmVhc29uIGNvZGVzLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZHMgb24gdHJ1bmNhdGVkIE5GQyBMTENQIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzcGF0aWFsIG1lbW9yeSBlcnJvcnMgY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBhY2tldCBsZW5ndGggYm91bmRhcnkgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBtYWxmb3JtZWQgTExDUCBwYWNrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHByb3RvY29sIGxvZ2ljIGluIHRoZSBORkMgTExDUCBsYXllciwgd2hpY2ggaXMgYWNjZXNzaWJsZSBhbmQgZnV6emFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIE5GQyBkcml2ZXJzIChlLmcuIG5mY3NpbSkgYW5kIEFGX05GQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDoyMi42MjMxMTAwMTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Nzc3NDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3OTE5ZDUwMDVlNGExZmM1YjQ5ZGVjMThmNzhhZGIyNjQ0NmQ0NDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDo1MDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xcbmluZGV4IGNhYzFiNTQ4NzA2NGQuLjg5ZDZmNDU5OWUxMWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xcbisrKyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcXG5AQCAtMTA3Nyw2ICsxMDc3LDEyIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbiBcXHRwdHlwZSA9IG5mY19sbGNwX3B0eXBlKHNrYik7XFxuIFxcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XFxuIFxcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XFxuK1xcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XFxuK1xcdFxcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRucyA9IG5mY19sbGNwX25zKHNrYik7XFxuIFxcdG5yID0gbmZjX2xsY3BfbnIoc2tiKTtcXG4gXFxuQEAgLTEyNTQsNiArMTI2MCwxMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuIFxcbiBcXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xcbiBcXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xcbitcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIDEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHJlYXNvbiA9IHNrYi1cXHUwMDNlZGF0YVsyXTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlZCAlZCByZWFzb24gJWRcXFxcblxcXCIsIHNzYXAsIGRzYXAsIHJlYXNvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUwOjIzLjE3MTgzNjEwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY5NTYzMDkyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfRElHSVRBTFwiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX3JlY3ZfaGRsY1wiLFxuICAgIFwibmZjX2xsY3BfcmVjdl9kbVwiLFxuICAgIFwibmZjX2xsY3Bfcnhfc2tiXCIsXG4gICAgXCJuZmNfbGxjcF9yZWN2XCIsXG4gICAgXCJuZmNfbGxjcF9kYXRhX3JlY2VpdmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwYWNrZXQgbGVuZ3RoIGJvdW5kYXJ5IGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3NpbmcgbWFsZm9ybWVkIExMQ1AgcGFja2V0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiB0aGUgTkZDIExMQ1AgbGF5ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBORkMgZHJpdmVycyAoZS5nLiBuZmNzaW0pIGFuZCBBRl9ORkMgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzkxOWQ1MDA1ZTRhMWZjNWI0OWRlYzE4Zjc4YWRiMjY0NDZkNDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDo1MDoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXG5pbmRleCBjYWMxYjU0ODcwNjRkLi44OWQ2ZjQ1OTllMTFhIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xuKysrIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuQEAgLTEwNzcsNiArMTA3NywxMiBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbiBcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcbiBcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4gXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuK1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyBMTENQX1NFUVVFTkNFX1NJWkUpIHtcbitcdFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRucyA9IG5mY19sbGNwX25zKHNrYik7XG4gXHRuciA9IG5mY19sbGNwX25yKHNrYik7XG4gXG5AQCAtMTI1NCw2ICsxMjYwLDEwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbiBcbiBcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XG4gXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xuK1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyAxKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRyZWFzb24gPSBza2ItXHUwMDNlZGF0YVsyXTtcbiBcbiBcdHByX2RlYnVnKFwiJWQgJWQgcmVhc29uICVkXFxuXCIsIHNzYXAsIGRzYXAsIHJlYXNvbik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDoyMy4xNzE4Mzc1NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjIyODkwNjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExMQ1AgQ29yZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGJyZWFraW5nIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5ldC9uZmMvbGxjcF9jb3JlLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgdGhlIHBhY2tldCBoYW5kbGluZyBpbiBgbmZjX2xsY3BfcmVjdl9oZGxjYCBhbmQgYG5mY19sbGNwX3JlY3ZfZG1gLiBHb29kLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhleSd2ZSBhZGRlZCBsZW5ndGggY2hlY2tzIHRvIHRoZSBpbmNvbWluZyBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIFNwZWNpZmljYWxseSwgdGhleSBhcmUgZW5zdXJpbmcgdGhhdCB0aGUgcmVjZWl2ZWQgcGFja2V0IG1lZXRzIGEgbWluaW11bSBsZW5ndGggcmVxdWlyZW1lbnQuIEl0IG1ha2VzIHNlbnNlOyB3ZSB3YW50IHRvIHZhbGlkYXRlIHRoZSByZWNlaXZlZCBmcmFtZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbS5cblxuVGhlIGNvZGUgc25pcHBldHMgc2hvdyBjaGVja3MgbGlrZSBgc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIExMQ1BfU0VRVUVOQ0VfU0laRWAgYW5kIGBza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgMWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBmb3IgcGFja2V0cyB0aGF0IGF0IGxlYXN0IGNvbnRhaW4gdGhlIG5lY2Vzc2FyeSBoZWFkZXIgYW5kIGVpdGhlciBzZXF1ZW5jZSBudW1iZXJzIG9yIGp1c3QgYSBzaW5nbGUgYnl0ZSBvZiBkYXRhLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIElmIHRoZSBwYWNrZXQgaXMgdG9vIHNob3J0LCB0aGUgY29kZSBub3cgc2VlbXMgdG8gYmUgc2VuZGluZyBiYWNrIGEgRE0gKERpc2Nvbm5lY3QgTW9kZSkgZnJhbWUgd2l0aCBhIGBOT0NPTk5gIHJlYXNvbi4gVGhpcyBpcyBhIHNlbnNpYmxlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LlxuXG5Ob3csIEknbSBnb2luZyB0byBuZWVkIG1vcmUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBgbmV0L25mYy9sbGNwX2NvcmUuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVzZSBgc2tiYCBzdHJ1Y3R1cmVzIGFyZSB1c2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgbmV3IGNoZWNrcyBkb24ndCBicmVhayBhbnkgdmFsaWQsIGJ1dCBwcmV2aW91c2x5IG92ZXJsb29rZWQsIGNhc2VzLiBBcmUgd2UgcG90ZW50aWFsbHkgcmVqZWN0aW5nIHZhbGlkLCBidXQgbWluaW1hbGx5IHNpemVkLCBMTENQIGZyYW1lcz8gT3IgYXJlIHdlLCBhcyBJIHN1c3BlY3QsIGp1c3QgZW5zdXJpbmcgd2UgZG9uJ3QgdHJ5IHRvIGRlcmVmZXJlbmNlIGludmFsaWQgbWVtb3J5P1xuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9uZmMvYCB0byB1bmRlcnN0YW5kIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIE5GQyBhbmQgTExDUC4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFzIHRvIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgdGhpcyBsZW5ndGggY2hlY2sgaXMgYmVpbmcgYXBwbGllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5OSwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDozNS40MDA3NDczOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbGxjcF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4xMDcxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEwNzI6XFx0e1xcbjEwNzM6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcXG4xMDc0OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4xMDc1OlxcdFxcdHU4IGRzYXAsIHNzYXAsIHB0eXBlLCBucywgbnI7XFxuMTA3NjpcXHRcXG4xMDc3OlxcdFxcdHB0eXBlID0gbmZjX2xsY3BfcHR5cGUoc2tiKTtcXG4xMDc4OlxcdFxcdGRzYXAgPSBuZmNfbGxjcF9kc2FwKHNrYik7XFxuMTA3OTpcXHRcXHRzc2FwID0gbmZjX2xsY3Bfc3NhcChza2IpO1xcbjEwODA6XFx0XFxuMTA4MTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XFxuMTA4MjpcXHRcXHRcXHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XFxuMTA4MzpcXHRcXHRcXHRyZXR1cm47XFxuMTA4NDpcXHRcXHR9XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdG5zID0gbmZjX2xsY3BfbnMoc2tiKTtcXG4xMDg3OlxcdFxcdG5yID0gbmZjX2xsY3BfbnIoc2tiKTtcXG4xMDg4OlxcdFxcbjEwODk6XFx0XFx0cHJfZGVidWcoXFxcIiVkICVkIFIgJWQgUyAlZFxcXFxuXFxcIiwgZHNhcCwgc3NhcCwgbnIsIG5zKTtcXG4xMDkwOlxcdFxcbjEwOTE6XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xcbjEwOTI6XFx0XFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XFxuMTA5MzpcXHRcXHRcXHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XFxuMTA5NDpcXHRcXHRcXHRyZXR1cm47XFxuMTA5NTpcXHRcXHR9XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdHNrID0gXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlc2s7XFxuMTA5ODpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjEwOTk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkge1xcbjExMDA6XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xMTAxOlxcdFxcdFxcdG5mY19sbGNwX3NvY2tfcHV0KGxsY3Bfc29jayk7XFxuMTEwMjpcXHRcXHRcXHRyZXR1cm47XFxuMTEwMzpcXHRcXHR9XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdC8qIFBhc3MgdGhlIHBheWxvYWQgdXBzdHJlYW0gKi9cXG4xMTA2OlxcdFxcdGlmIChwdHlwZSA9PSBMTENQX1BEVV9JKSB7XFxuMTEwNzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiSSBmcmFtZSwgcXVldWVpbmcgb24gJXBcXFxcblxcXCIsIFxcdTAwMjZsbGNwX3NvY2stXFx1MDAzZXNrKTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0XFx0XFx0aWYgKG5zID09IGxsY3Bfc29jay1cXHUwMDNlcmVjdl9uKVxcbjExMTA6XFx0XFx0XFx0XFx0bGxjcF9zb2NrLVxcdTAwM2VyZWN2X24gPSAobGxjcF9zb2NrLVxcdTAwM2VyZWN2X24gKyAxKSAlIDE2O1xcbjExMTE6XFx0XFx0XFx0ZWxzZVxcbjExMTI6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJSZWNlaXZlZCBvdXQgb2Ygc2VxdWVuY2UgSSBQRFVcXFxcblxcXCIpO1xcbjExMTM6XFx0XFxuMTExNDpcXHRcXHRcXHRza2JfcHVsbChza2IsIExMQ1BfSEVBREVSX1NJWkUgKyBMTENQX1NFUVVFTkNFX1NJWkUpO1xcbjExMTU6XFx0XFx0XFx0aWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2IoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlc2ssIHNrYikpIHtcXG4xMTE2OlxcdFxcdFxcdFxcdC8qXFxuMTExNzpcXHRcXHRcXHRcXHQgKiBJIGZyYW1lcyB3aWxsIGJlIGZyZWVkIGZyb20gdGhlIHNvY2tldCBsYXllciwgc28gd2VcXG4xMTE4OlxcdFxcdFxcdFxcdCAqIG5lZWQgdG8ga2VlcCB0aGVtIGFsaXZlIHVudGlsIHNvbWVvbmUgcmVjZWl2ZXMgdGhlbS5cXG4xMTE5OlxcdFxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDozNS40MDI5MzM5MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQ1OlxcdFxcbjEyNDY6XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DT05ORUNURUQ7XFxuMTI0NzpcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xMjUwOlxcdFxcbjEyNTE6XFx0XFx0bmZjX2xsY3Bfc29ja19wdXQobGxjcF9zb2NrKTtcXG4xMjUyOlxcdH1cXG4xMjUzOlxcdFxcbjEyNTQ6XFx0c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbjEyNTU6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEyNTY6XFx0e1xcbjEyNTc6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcXG4xMjU4OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4xMjU5OlxcdFxcdHU4IGRzYXAsIHNzYXAsIHJlYXNvbjtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0ZHNhcCA9IG5mY19sbGNwX2RzYXAoc2tiKTtcXG4xMjYyOlxcdFxcdHNzYXAgPSBuZmNfbGxjcF9zc2FwKHNrYik7XFxuMTI2MzpcXHRcXG4xMjY0OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyAxKVxcbjEyNjU6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRyZWFzb24gPSBza2ItXFx1MDAzZWRhdGFbMl07XFxuMTI2ODpcXHRcXG4xMjY5OlxcdFxcdHByX2RlYnVnKFxcXCIlZCAlZCByZWFzb24gJWRcXFxcblxcXCIsIHNzYXAsIGRzYXAsIHJlYXNvbik7XFxuMTI3MDpcXHRcXG4xMjcxOlxcdFxcdHN3aXRjaCAocmVhc29uKSB7XFxuMTI3MjpcXHRcXHRjYXNlIExMQ1BfRE1fTk9CT1VORDpcXG4xMjczOlxcdFxcdGNhc2UgTExDUF9ETV9SRUo6XFxuMTI3NDpcXHRcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9jb25uZWN0aW5nX3NvY2tfZ2V0KGxvY2FsLCBkc2FwKTtcXG4xMjc1OlxcdFxcdFxcdGJyZWFrO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRkZWZhdWx0OlxcbjEyNzg6XFx0XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29ja19nZXQobG9jYWwsIGRzYXAsIHNzYXApO1xcbjEyNzk6XFx0XFx0XFx0YnJlYWs7XFxuMTI4MDpcXHRcXHR9XFxuMTI4MTpcXHRcXG4xMjgyOlxcdFxcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xcbjEyODM6XFx0XFx0XFx0cHJfZGVidWcoXFxcIkFscmVhZHkgY2xvc2VkXFxcXG5cXFwiKTtcXG4xMjg0OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MzUuNDAzMDU1NTExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5GQ1xcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdGRlZmF1bHQgblxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxcbiAgMTI6XFx0XFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIG5mYy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIE5GQ19ESUdJVEFMXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgMTk6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cXG4gIDI1OlxcdFxcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XFxuICAyNjpcXHRcXHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI5OlxcdFxcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvbmNpL0tjb25maWdcXFwiXFxuICAzMjpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxuICAzMzpcXHRcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MzUuNDAzMTUwOTAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNDUyMTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBsbGNwX2NvcmUuYyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBsbGNwX2NvcmUuY2Agd2l0aGluIHRoZSBgbmV0L25mYy9gIGRpcmVjdG9yeS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgdGhlcmUuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgaW5jbHVkZSBwYXRocyBhcmUgc2V0LCB3aGF0IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyBtaWdodCBiZSBpbiBwbGF5IChsaWtlIGZlYXR1cmUgZmxhZ3Mgb3IgcGxhdGZvcm0tc3BlY2lmaWMgc2V0dGluZ3MpLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgYmFzZWQgb24ga2VybmVsIHZlcnNpb25zIG9yIG90aGVyIGZhY3RvcnMuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgZGlyZWN0bHkgYWZmZWN0IGBsbGNwX2NvcmUuY2AncyBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6MzcuMjI3Njc0OTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBORkMgc3Vic3lzdGVtLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfTkZDKSArPSBuZmMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG4gICA4OlxcdG9iai0kKENPTkZJR19ORkNfSENJKSArPSBoY2kvXFxuICAgOTpcXHRvYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICs9IG5mY19kaWdpdGFsLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0bmZjLW9ianMgOj0gY29yZS5vIG5ldGxpbmsubyBhZl9uZmMubyByYXdzb2NrLm8gbGxjcF9jb3JlLm8gbGxjcF9jb21tYW5kcy5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdGxsY3Bfc29jay5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdG5mY19kaWdpdGFsLW9ianMgOj0gZGlnaXRhbF9jb3JlLm8gZGlnaXRhbF90ZWNobm9sb2d5Lm8gZGlnaXRhbF9kZXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDozNy4yMjc3NzA3NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDY0NjYwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5GQyBcdTAwMjYgTExDUCBGdXp6aW5nIFJvYWRtYXAqKlxuXG5Pa2F5LCBzbyBgbGxjcF9jb3JlLm9gIGlzIGJ1aWx0IGludG8gYG5mYy5vYCB3aGVuIHdlJ3ZlIGdvdCBgQ09ORklHX05GQ2AgZW5hYmxlZCDigJMgZ29vZCB0byBrbm93LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB3ZSBjYW4gcG9rZSBhbmQgcHJvZCBhdCB0aGUgTkZDIGFuZCBMTENQIGxheWVycyBmb3IgZnV6emluZyBwdXJwb3Nlcy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLlxuXG5DYW4gd2UgZ2VuZXJhdGUgdmlydHVhbCBORkMgZGV2aWNlcywgTExDUCBzb2NrZXRzLCBvciBldmVuIHN0aW11bGF0ZSBhY3Rpdml0eSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LCBpZGVhbGx5IGxldmVyYWdpbmcgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyPyBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBzZWVtcyB0byBiZSB5ZXMhIFN5emthbGxlciBpdHNlbGYgcHJvdmlkZXMgc29tZSBpbnRlcmVzdGluZyBORkMgdmlydHVhbCBkZXZpY2VzIGFuZCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGluZ3MgbGlrZSBgdmlydHVhbCBuZmNzaW1gIHdoaWNoIHRpZXMgaW4gd2l0aCBgQ09ORklHX05GQ19TSU1gIG9yIHBvc3NpYmx5IGRpcmVjdCBhY2Nlc3MgdGhyb3VnaCByYXcgc29jay9MTENQIHNvY2tldHMgb3IgbmV0bGluay4gTm93LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBmaWd1cmUgb3V0IGhvdyB0byBsZXZlcmFnZSB0aG9zZSByZXNvdXJjZXMuIEknbGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZmMvYCBhbmQgYG5ldC9uZmMvYCBkaXJlY3RvcmllcyBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHJvdXRlIHRvIGlkZW50aWZ5aW5nIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1ldGhvZHMgSSdtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDMuMjkyNDM0NDk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4Nzg4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3BfcmVjdl9oZGxjfG5mY19sbGNwX3JlY3ZfZG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jPTEwNDI9aW50IG5mY19sbGNwX3F1ZXVlX2lfZnJhbWVzKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDY5LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA3MDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwNzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTEyMDk9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjUzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTI1NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjU1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTQ5Mj1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzMi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRE1cXFxcblxcXCIpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUzMzpcXHRcXHRuZmNfbGxjcF9yZWN2X2RtKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzNC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0NC1cXHRcXHRwcl9kZWJ1ZyhcXFwiSSBmcmFtZVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTQ1OlxcdFxcdG5mY19sbGNwX3JlY3ZfaGRsYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUwOjQzLjQ2ODMxOTAxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk1MzIxOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgbmZjX2xsY3Bfcnhfc2tiYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIGBuZmNfbGxjcF9yeF9za2JgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBORkMgc3RhY2suIFRoaXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgcmVjZWl2ZWQgU0tCcyBhcmUgaGFuZGxlZCBpbiBMTENQLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAsIGJ1dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IG5lZWQgdG8gbGV2ZXJhZ2Ugc29tZSBtb3JlIHNvcGhpc3RpY2F0ZWQgc3RhdGljIGFuYWx5c2lzIHRvb2xzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgY3JpdGljYWwgaGFuZGxlciBmb3IgaW5jb21pbmcgZGF0YSwgc28gaWRlbnRpZnlpbmcgYWxsIHRoZSB1cHN0cmVhbSBwcm9jZXNzaW5nIHN0ZXBzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIHRyYWNlIGhlcmUgd2lsbCBxdWlja2x5IGV4cG9zZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDo0NS44NjM2NDUzMjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjI2NjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZmNfbGxjcF9yeF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jPTIxPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjItXFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMzpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNC1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTQ0OD1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2FnZihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDgzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTQ4NDpcXHRcXHRuZmNfbGxjcF9yeF9za2IobG9jYWwsIG5ld19za2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ4NS1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ5MS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0OTI6c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDkzLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTU1NT1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3MC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1NzE6XFx0bmZjX2xsY3Bfcnhfc2tiKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDYuMDA5OTIwMzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NTkwMzAxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIE5ldHdvcmsgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGByeF93b3JrYCBmdW5jdGlvbiBpcyBiZWluZyBzY2hlZHVsZWQsIG9yIHdoZXJlIHRoZSBgbGxjcF9jb3JlYCBlbnRyeXBvaW50cyBhcmUgbG9jYXRlZC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgc29tZSBuZXR3b3JrIHN0YWNrIGFuYWx5c2lzLCBzbyBJJ20gbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBvaW50cyBvZiBwcm9jZXNzaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzLCBwZXJoYXBzIGxvb2tpbmcgZm9yIGtlcm5lbCBtb2R1bGUgaG9va3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyB0aGUgcGFja2V0cyBhcmUgcmVjZWl2ZWQsIHF1ZXVlZCwgYW5kIHVsdGltYXRlbHkgcHJvY2Vzc2VkIHdpdGhpbiB0aGlzIHN5c3RlbS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2VzIHRvIGxvb2sgZm9yIGNhbGxzIG9yIHJlZmVyZW5jZXMgdG8gdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24gYW5kIGZyb20gd2hlcmUuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgaGFuZGxlcnMgb3IgdGltZXJzIGludm9sdmVkLCB0b28uIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MDo0Ny43Njg5NTQ0MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTM5OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2hjaS9jb3JlLmM9NjM9c3RhdGljIHZvaWQgbmZjX2hjaV9tc2dfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTI1LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMjY6c3RhdGljIHZvaWQgbmZjX2hjaV9tc2dfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9oY2kvY29yZS5jLTEyNy17XFxubmV0L25mYy9oY2kvY29yZS5jLTEyOC1cXHRzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19oY2lfZGV2LFxcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMjk6XFx0XFx0XFx0XFx0XFx0XFx0bXNnX3J4X3dvcmspO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMzAtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz04NTQ9c3RhdGljIHZvaWQgbmZjX2hjaV9yZWN2X2Zyb21fbGxjKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjYtXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jOjkyNzpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZoZGV2LVxcdTAwM2Vtc2dfcnhfd29yayk7XFxubmV0L25mYy9oY2kvY29yZS5jLTkyOC1cXHR9XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTAyMD1pbnQgbmZjX2hjaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTEwMzEtXFxubmV0L25mYy9oY2kvY29yZS5jOjEwMzI6XFx0SU5JVF9XT1JLKFxcdTAwMjZoZGV2LVxcdTAwM2Vtc2dfcnhfd29yaywgbmZjX2hjaV9tc2dfcnhfd29yayk7XFxubmV0L25mYy9oY2kvY29yZS5jLTEwMzMtXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTA0MD12b2lkIG5mY19oY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTEwNjEtXFxubmV0L25mYy9oY2kvY29yZS5jOjEwNjI6XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2aGRldi1cXHUwMDNlbXNnX3J4X3dvcmspO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0xMDYzLVxcbi0tXFxubmV0L25mYy9sbGNwLmg9NTA9c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcXG4tLVxcbm5ldC9uZmMvbGxjcC5oLTYwLVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdCB0eF93b3JrO1xcbm5ldC9uZmMvbGxjcC5oOjYxOlxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdCByeF93b3JrO1xcbm5ldC9uZmMvbGxjcC5oLTYyLVxcdHN0cnVjdCBza19idWZmICpyeF9wZW5kaW5nO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNjUtXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTY2OlxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF93b3JrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2Ny1cXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZsb2NhbC1cXHUwMDNldGltZW91dF93b3JrKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTQ5Mj1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1NC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1NTU6c3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTU2LXtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NTctXFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICByeF93b3JrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NTktXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTU3OD1zdGF0aWMgdm9pZCBfX25mY19sbGNwX3JlY3Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4Ni1cXHR0aW1lcl9kZWxldGUoXFx1MDAyNmxvY2FsLVxcdTAwM2VsaW5rX3RpbWVyKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1ODc6XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4OC19XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE2NjM9aW50IG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTY4OS1cXHRsb2NhbC1cXHUwMDNlcnhfcGVuZGluZyA9IE5VTEw7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNjkwOlxcdElOSVRfV09SSyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTY5MS1cXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0zOT1zdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5uZXQvbmZjL25jaS9jb3JlLmM6NDA6c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtNDEtc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz01NTQ9c3RhdGljIGludCBuY2lfY2xvc2VfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTYxNC1cXG5uZXQvbmZjL25jaS9jb3JlLmM6NjE1OlxcdC8qIHJ4X3dvcmsgbWF5IHRha2UgcmVxX2xvY2sgdmlhIG5jaV9kZWFjdGl2YXRlX3RhcmdldCAqL1xcbm5ldC9uZmMvbmNpL2NvcmUuYy02MTYtXFx0Zmx1c2hfd29ya3F1ZXVlKG5kZXYtXFx1MDAzZXJ4X3dxKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz02MzE9c3RhdGljIHZvaWQgbmNpX2RhdGFfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtNjM1LVxcdHNldF9iaXQoTkNJX0RBVEFfRVhDSEFOR0VfVE8sIFxcdTAwMjZuZGV2LVxcdTAwM2VmbGFncyk7XFxubmV0L25mYy9uY2kvY29yZS5jOjYzNjpcXHRxdWV1ZV93b3JrKG5kZXYtXFx1MDAzZXJ4X3dxLCBcXHUwMDI2bmRldi1cXHUwMDNlcnhfd29yayk7XFxubmV0L25mYy9uY2kvY29yZS5jLTYzNy19XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTI1MT1pbnQgbmNpX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY2LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjY3OlxcdElOSVRfV09SSyhcXHUwMDI2bmRldi1cXHUwMDNlcnhfd29yaywgbmNpX3J4X3dvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY4LVxcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXFxcIiVzX25jaV9yeF93cVxcXCIsIGRldl9uYW1lKGRldikpO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEzNTE9aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEzNjItXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZXJ4X3EsIHNrYik7XFxubmV0L25mYy9uY2kvY29yZS5jOjEzNjM6XFx0cXVldWVfd29yayhuZGV2LVxcdTAwM2VyeF93cSwgXFx1MDAyNm5kZXYtXFx1MDAzZXJ4X3dvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzY0LVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTE1MjA9c3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTE1NTgtXFxubmV0L25mYy9uY2kvY29yZS5jOjE1NTk6c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTYwLXtcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTU2MTpcXHRzdHJ1Y3QgbmNpX2RldiAqbmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2Rldiwgcnhfd29yayk7XFxubmV0L25mYy9uY2kvY29yZS5jLTE1NjItXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9uZmMvbmNpL2RhdGEuYz0yNj12b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25mYy9uY2kvZGF0YS5jLTQ4LVxcbm5ldC9uZmMvbmNpL2RhdGEuYzo0OTpcXHQvKiBDbGFpbSBjb21wbGV0aW9uIGF0b21pY2FsbHkgLS0gYm90aCBjbG9zZSBhbmQgcnhfd29yayBtYXkgcmFjZSBoZXJlICovXFxubmV0L25mYy9uY2kvZGF0YS5jLTUwLVxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KE5DSV9EQVRBX0VYQ0hBTkdFLCBcXHUwMDI2bmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYz0zODI9c3RhdGljIHZvaWQgbmNpX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTQwNC1cXG5uZXQvbmZjL25jaS9oY2kuYzo0MDU6c3RhdGljIHZvaWQgbmNpX2hjaV9tc2dfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9uY2kvaGNpLmMtNDA2LXtcXG5uZXQvbmZjL25jaS9oY2kuYy00MDctXFx0c3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2ID1cXG5uZXQvbmZjL25jaS9oY2kuYzo0MDg6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuY2lfaGNpX2RldiwgbXNnX3J4X3dvcmspO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQwOS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NDI3PXZvaWQgbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiKHZvaWQgKmNvbnRleHQsXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy01MDMtXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XFxubmV0L25mYy9uY2kvaGNpLmM6NTA0OlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy01MDUtXFx0fVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9Nzg2PXN0cnVjdCBuY2lfaGNpX2RldiAqbmNpX2hjaV9hbGxvY2F0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc5NC1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZoZGV2LVxcdTAwM2VyeF9oY3BfZnJhZ3MpO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjc5NTpcXHRJTklUX1dPUksoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF93b3JrLCBuY2lfaGNpX21zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy03OTYtXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlbXNnX3J4X3F1ZXVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDcuODY4MTAwMjAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NTM5MDkwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBMTENQIFJlY2VpdmUgQ2FsbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIE5GQyBzdGFjayBoYW5kbGUgaW5jb21pbmcgTExDUCBkYXRhLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsIHNpdGVzIGZvciBlaXRoZXIgYF9fbmZjX2xsY3BfcmVjdmAgb3IgYG5mY19sbGNwX3JlY3ZgLiBJJ20gYXNzdW1pbmcgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb3JlIGxvZ2ljIGZvciByZWNlaXZpbmcgTExDUCBmcmFtZXMuIEtub3dpbmcgd2hlcmUgaXQncyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGluY29taW5nIGRhdGEgaXMgcm91dGVkIGFuZCBwcm9jZXNzZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgcGlucG9pbnRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgd2l0aGluIHRoZSByZWNlaXZlIHBhdGguIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDkuNDIyMDEzMDQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzMTMwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3BfcmVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcC5oPTIyMz1pbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0yMjYtLyogQ29tbWFuZHMgQVBJICovXFxubmV0L25mYy9sbGNwLmg6MjI3OnZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcXG5uZXQvbmZjL2xsY3AuaC0yMjgtdTggKm5mY19sbGNwX2J1aWxkX3Rsdih1OCB0eXBlLCBjb25zdCB1OCAqdmFsdWUsIHU4IHZhbHVlX2xlbmd0aCwgdTggKnRsdl9sZW5ndGgpO1xcbi0tXFxubmV0L25mYy9sbGNwLmg9MjMzPXZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKnNkcF9oZWFkKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzQ6dm9pZCBuZmNfbGxjcF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpO1xcbm5ldC9uZmMvbGxjcC5oLTIzNS1pbnQgbmZjX2xsY3Bfc2VuZF9zeW1tKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9MzcxPWludCBuZmNfbGxjcF9zZW5kX3N5bW0oc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM5OS1cXHRlcnIgPSBuZmNfZGF0YV9leGNoYW5nZShkZXYsIGxvY2FsLVxcdTAwM2V0YXJnZXRfaWR4LCBza2IsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDAwOlxcdFxcdFxcdFxcdCBuZmNfbGxjcF9yZWN2LCBsb2NhbCk7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDAxLW91dDpcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9NzYxPXN0YXRpYyB2b2lkIG5mY19sbGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy03OTctXFx0XFx0XFx0cmV0ID0gbmZjX2RhdGFfZXhjaGFuZ2UobG9jYWwtXFx1MDAzZWRldiwgbG9jYWwtXFx1MDAzZXRhcmdldF9pZHgsXFxubmV0L25mYy9sbGNwX2NvcmUuYzo3OTg6XFx0XFx0XFx0XFx0XFx0XFx0c2tiLCBuZmNfbGxjcF9yZWN2LCBsb2NhbCk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy03OTktXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTg0OT1zdGF0aWMgY29uc3QgdTggKm5mY19sbGNwX2Nvbm5lY3Rfc24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90ICpzbl9sZW4pXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTg3NC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3NTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X3VpKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy04NzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy05MTAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo5MTE6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy05MTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xMDQyPWludCBuZmNfbGxjcF9xdWV1ZV9pX2ZyYW1lcyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA2OS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwNzA6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDcxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTYzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE2NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2Rpc2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExNjUtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMDgtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjA5OnN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfY2Moc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMTAtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjUzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTI1NDpzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjU1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTI5NS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyOTY6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9zbmwoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyOTctXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ0Ny1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0NDg6c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9hZ2Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0NDkte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNDkyPXN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTEyLVxcdFxcdHByX2RlYnVnKFxcXCJVSVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTEzOlxcdFxcdG5mY19sbGNwX3JlY3ZfdWkobG9jYWwsIHNrYik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTE0LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTE3LVxcdFxcdHByX2RlYnVnKFxcXCJDT05ORUNUXFxcXG5cXFwiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MTg6XFx0XFx0bmZjX2xsY3BfcmVjdl9jb25uZWN0KGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUyMi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRElTQ1xcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTIzOlxcdFxcdG5mY19sbGNwX3JlY3ZfZGlzYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjctXFx0XFx0cHJfZGVidWcoXFxcIkNDXFxcXG5cXFwiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1Mjg6XFx0XFx0bmZjX2xsY3BfcmVjdl9jYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MjktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzItXFx0XFx0cHJfZGVidWcoXFxcIkRNXFxcXG5cXFwiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MzM6XFx0XFx0bmZjX2xsY3BfcmVjdl9kbShsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MzctXFx0XFx0cHJfZGVidWcoXFxcIlNOTFxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTM4OlxcdFxcdG5mY19sbGNwX3JlY3Zfc25sKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUzOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU0NC1cXHRcXHRwcl9kZWJ1ZyhcXFwiSSBmcmFtZVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTQ1OlxcdFxcdG5mY19sbGNwX3JlY3ZfaGRsYyhsb2NhbCwgc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1NDktXFx0XFx0cHJfZGVidWcoXFxcIkFHRiBmcmFtZVxcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNTUwOlxcdFxcdG5mY19sbGNwX3JlY3ZfYWdmKGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU1MS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTU1NT1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU3Ny1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1Nzg6c3RhdGljIHZvaWQgX19uZmNfbGxjcF9yZWN2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTc5LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU4OS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1OTA6dm9pZCBuZmNfbGxjcF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNTkxLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTU5OC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1OTk6XFx0X19uZmNfbGxjcF9yZWN2KGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYwMC19XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE2MDI9aW50IG5mY19sbGNwX2RhdGFfcmVjZWl2ZWQoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE2MTI6XFx0X19uZmNfbGxjcF9yZWN2KGxvY2FsLCBza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NDkuNjEzMzMyNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzNTMxNzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBORkMgTExDUCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGluIHRoZSBORkMgTExDUCBwcm90b2NvbCBwcm9jZXNzaW5nIHdpdGhpbiBgbmZjX2xsY3BfcmVjdl9oZGxjYCBhbmQgYG5mY19sbGNwX3JlY3ZfZG1gLiBCZWZvcmUsIHdlIHdlcmUgZ3JhYmJpbmcgc2VxdWVuY2UgaW5mb3JtYXRpb24gKGBuc2AsIGBucmApIGFuZCB0aGUgRE0gcmVhc29uIGNvZGUgd2l0aG91dCBwcm9wZXJseSB2ZXJpZnlpbmcgdGhlIGluY29taW5nIFNLQidzIGxlbmd0aC4gVGhhdCdzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IHBvaW50LlxuXG5TbywgdGhlIGZpeCBpbnRyb2R1Y2VzIGxlbmd0aCBjaGVja3M6IGVuc3VyaW5nIGBza2ItXHUwMDNlbGVuYCBpcyBzdWZmaWNpZW50IGJlZm9yZSBhY2Nlc3NpbmcgZGF0YSBiZXlvbmQgdGhlIGhlYWRlci4gR29vZCBjYXRjaCDigJMgdGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgYW4gaW1wb3J0YW50IHZ1bG5lcmFiaWxpdHkgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIHdvcnNlLCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSByZWFkcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBZZXMsIGFic29sdXRlbHkuIE5GQyBMTENQIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBORkMgc29ja2V0cyBhbmQgdmFyaW91cyBORkMgZHJpdmVycywgaW5jbHVkaW5nIHZpcnR1YWwgb25lcy4gQW5kIFN5emthbGxlciBpcyBhbHJlYWR5IHRhcmdldGluZyB0aGlzIGFyZWEhIFRoYXQncyBhIGh1Z2UgZ3JlZW4gZmxhZy4gU2Vjb25kLCBleGVjdXRhYmxlIGNvZGU6IGRlZmluaXRlbHkg4oCTIGl0J3MgcmlnaHQgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgcHJvdG9jb2wgc3RhY2sgd2l0aGluIGBuZXQvbmZjYC4gVGhpcmQsIGNvbnRyb2wgZmxvdy4gWWVzLCB0aGlzIHBhdGNoIGlzIGFkZGluZyBjaGVja3M7IGl0IGNoYW5nZXMgdGhlIHdheSB0aGUgY29kZSBoYW5kbGVzIGluY29taW5nIGRhdGEsIGFuZCB0aHVzIGFsdGVycyB0aGUgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBTS0IuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24/IEJhc2VkIG9uIHJlYWNoYWJpbGl0eSwgdGhlIGFkZGl0aW9uIG9mIGRlZmVuc2l2ZSBjaGVja3MsIGFuZCB0aGUgZmFjdCB0aGlzIGlzIGluIGNvcmUgbmV0d29ya2luZywgdGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlncyB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzLiBXZSBuZWVkIGBORkNgIGVuYWJsZWQsIHdoaWNoIHJlbGllcyBvbiBgUkZLSUxMYC4gRnJvbSB0aGVyZSwgd2Ugd2FudCB0byBrbm93IGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBsaWtlIGBDT05GSUdfTkZDX1NJTWAgb3IgYENPTkZJR19ORkNfRElHSVRBTGAgaW4gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBMTENQIGFuZCB2aXJ0dWFsIE5GQyB0ZXN0aW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHRlc3RpbmcuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NTMuOTQ4NjUzMjA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIk5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBORkNcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIE5GQ19UUkY3OTcwQVxcbiAgMTA6XFx0XFx0dHJpc3RhdGUgXFxcIlRleGFzIEluc3RydW1lbnRzIFRSRjc5NzBhIE5GQyBkcml2ZXJcXFwiXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFNQSSBcXHUwMDI2XFx1MDAyNiBORkNfRElHSVRBTCBcXHUwMDI2XFx1MDAyNiBHUElPTElCXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIE5GQyBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzJyBUUkY3OTcwYVxcbiAgMTQ6XFx0XFx0ICBkZXZpY2UuIFN1Y2ggZGV2aWNlIHN1cHBvcnRzIDUgZGlmZmVyZW50IHByb3RvY29sczogSVNPMTQ0NDNBLFxcbiAgMTU6XFx0XFx0ICBJU08xNDQ0M0IsIEZlTGlDYSwgSVNPMTU2OTMgYW5kIElTTzE4MDAwLTMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIFRSRjc5NzBhIGludG8gdGhlIGtlcm5lbCBvclxcbiAgMTg6XFx0XFx0ICBzYXkgTSAgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTk6XFx0XFx0ICB0cmY3OTcwYS5rby5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE5GQ19NRUlfUEhZXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTUVJIGJ1cyBORkMgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uIElOVEVMX01FSSBcXHUwMDI2XFx1MDAyNiBORkNfSENJXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IHRvIHVzZSBhbiBtZWkgYnVzIG5mYyBkZXZpY2UuIFNlbGVjdCB0aGlzIGlmIHlvdVxcbiAgMjY6XFx0XFx0ICB3aWxsIHVzZSBhbiBIQ0kgTkZDIGRyaXZlciBmb3IgYW4gTkZDIGNoaXAgY29ubmVjdGVkIGJlaGluZCBhblxcbiAgMjc6XFx0XFx0ICBJbnRlbCdzIE1hbmFnZW1lbnQgRW5naW5lIGNoaXAuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIE5GQ19TSU1cXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgaGFyZHdhcmUgc2ltdWxhdG9yIGRyaXZlclxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBkcml2ZXIgZGVjbGFyZXMgdHdvIHZpcnR1YWwgTkZDIGRldmljZXMgc3VwcG9ydGluZyBORkMtREVQXFxuICAzNjpcXHRcXHQgIHByb3RvY29sLiBBbiBMTENQIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlbSBhbmRcXG4gIDM3OlxcdFxcdCAgYWxsIHBhY2tldHMgc2VudCBmcm9tIG9uZSBkZXZpY2UgaXMgc2VudCBiYWNrIHRvIHRoZSBvdGhlciwgYWN0aW5nIGFzXFxuICAzODpcXHRcXHQgIGxvb3BiYWNrIGRldmljZXMuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NTMuOTQ4Nzc0Njg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NzUxODM0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTkZDIExMQ1AgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTkZDIExMQ1AgZnV6emluZyBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX05GQ2AgaXMgdGhlIGtleSBlbmFibGVyIGZvciBgbGxjcF9jb3JlLmNgLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGlzLiBgQ09ORklHX05GQ19ESUdJVEFMYCBhbmQgYENPTkZJR19ORkNfU0lNYCBsb29rIGxpa2UgdmlydHVhbCBkcml2ZXJzIHNwZWNpZmljYWxseSBmb3IgZnV6emluZywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLlxuXG5JIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgdG8gYmUgYG5mY19sbGNwX3JlY3ZfaGRsY2AgYW5kIGBuZmNfbGxjcF9yZWN2X2RtYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIHN0YXRpYywgc28gSSBjaGVja2VkIHRoZSBjb2RlIGluIGBuZXQvbmZjL2xsY3BfY29yZS5jYC4gTGluZSAxMDcwIGNvbmZpcm1zIGBuZmNfbGxjcF9yZWN2X2hkbGNgIGlzIHN0YXRpYywgYW5kIGxpbmUgMTI1NCBzaG93cyBgbmZjX2xsY3BfcmVjdl9kbWAgaXMgYWxzbyBzdGF0aWMuIEV2ZW4gc3RhdGljIGZ1bmN0aW9ucyBoYXZlIHN5bWJvbHMgaW4gdm1saW51eCwgc28gbGV0J3Mga2VlcCBhbiBleWUgb24gdGhvc2UuXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGFueSByZWxhdGVkIGVudHJ5IHBvaW50cywgc28gYG5mY19sbGNwX3J4X3NrYmAsIGBuZmNfbGxjcF9yZWN2YCBhbmQgYG5mY19sbGNwX2RhdGFfcmVjZWl2ZWRgIGNhdWdodCBteSBleWUuXG5cbk5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRob3NlIGFyZSBzdWl0YWJsZSBgRm9jdXNTeW1ib2xzYC4gWWVzLCB0aGV5IGFyZSBmZWF0dXJlLXNwZWNpZmljIGFuZCBwYXRjaGVkLiBUaGVyZWZvcmUsIHRoZSBsaXN0IGZvciBgRm9jdXNTeW1ib2xzYCBpcyBnb2luZyB0byBpbmNsdWRlOiBgbmZjX2xsY3BfcmVjdl9oZGxjYCwgYG5mY19sbGNwX3JlY3ZfZG1gLCBgbmZjX2xsY3Bfcnhfc2tiYCwgYG5mY19sbGNwX2RhdGFfcmVjZWl2ZWRgLCBhbmQgYG5mY19sbGNwX3JlY3ZgLlxuXG5Gb3IgdGhlIGBFbmFibGVDb25maWdzYCwgSSdtIHByZXR0eSBzdXJlIGBORkNgLCBgTkZDX0RJR0lUQUxgLCBhbmQgYE5GQ19TSU1gIGFyZSB0aGUgcmlnaHQgb25lcy4gSSBuZWVkZWQgdG8gdmVyaWZ5IHRoaXMuIENoZWNraW5nIHRoZSBgbmV0L25mYy9NYWtlZmlsZWAgY29uZmlybXMgdGhpcy4gYG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vYCB0ZWxscyBtZSBgTkZDYCBpcyByZXF1aXJlZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1vZHVsZSBzdWdnZXN0cyB0aGF0IGBORkNfRElHSVRBTGAgYW5kIGBORkNfU0lNYCBhcmUgdGhlIHZpcnR1YWwgdGVzdCBlbmFibGVycy5cblxuRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSd2ZSBmb2xsb3dlZCBhbGwgb2YgdGhlIHN0ZXBzIGluIHRoZSBpbnN0cnVjdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQgc2hvdWxkIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIm5mY19sbGNwX3JlY3ZfaGRsY1wiLCBcIm5mY19sbGNwX3JlY3ZfZG1cIiwgXCJuZmNfbGxjcF9yeF9za2JcIiwgXCJuZmNfbGxjcF9yZWN2XCIsIFwibmZjX2xsY3BfZGF0YV9yZWNlaXZlZFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJORkNcIiwgXCJORkNfRElHSVRBTFwiLCBcIk5GQ19TSU1cIl1gXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIHVuZGVyc3RhbmRhYmxlLlxuXG5Ob3cgSSdtIHJlYWR5IHRvIG1ha2UgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjIsIk91dHB1dFRva2VucyI6MjAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTA6NTkuOTIzOTYxMjUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MTc3OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19ESUdJVEFMXCIsXG4gICAgXCJORkNfU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZjX2xsY3BfcmVjdl9oZGxjXCIsXG4gICAgXCJuZmNfbGxjcF9yZWN2X2RtXCIsXG4gICAgXCJuZmNfbGxjcF9yeF9za2JcIixcbiAgICBcIm5mY19sbGNwX3JlY3ZcIixcbiAgICBcIm5mY19sbGNwX2RhdGFfcmVjZWl2ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBhY2tldCBsZW5ndGggYm91bmRhcnkgY2hlY2tzIGluIG5mY19sbGNwX3JlY3ZfaGRsYygpIGFuZCBuZmNfbGxjcF9yZWN2X2RtKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBtYWxmb3JtZWQgTExDUCBwYWNrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHByb3RvY29sIGxvZ2ljIGluIHRoZSBORkMgTExDUCBsYXllciwgd2hpY2ggaXMgYWNjZXNzaWJsZSBhbmQgZnV6emFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIE5GQyBkcml2ZXJzIChlLmcuIG5mY3NpbSkgYW5kIEFGX05GQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX0RJR0lUQUxcIixcbiAgICBcIk5GQ19TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9yZWN2X2hkbGNcIixcbiAgICBcIm5mY19sbGNwX3JlY3ZfZG1cIixcbiAgICBcIm5mY19sbGNwX3J4X3NrYlwiLFxuICAgIFwibmZjX2xsY3BfcmVjdlwiLFxuICAgIFwibmZjX2xsY3BfZGF0YV9yZWNlaXZlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGFja2V0IGxlbmd0aCBib3VuZGFyeSBjaGVja3MgaW4gbmZjX2xsY3BfcmVjdl9oZGxjKCkgYW5kIG5mY19sbGNwX3JlY3ZfZG0oKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIG1hbGZvcm1lZCBMTENQIHBhY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gdGhlIE5GQyBMTENQIGxheWVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgTkZDIGRyaXZlcnMgKGUuZy4gbmZjc2ltKSBhbmQgQUZfTkZDIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjAwLjEyODE1MDc0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0OTYxMTI4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MTowMC4xMjk3NjQ4NDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTQ5NDQ5MjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVxcdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc5MTlkNTAwNWU0YTFmYzViNDlkZWMxOGY3OGFkYjI2NDQ2ZDQ0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDQ6NTA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuaW5kZXggY2FjMWI1NDg3MDY0ZC4uODlkNmY0NTk5ZTExYSAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmNcbisrKyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcbkBAIC0xMDc3LDYgKzEwNzcsMTIgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gXHRwdHlwZSA9IG5mY19sbGNwX3B0eXBlKHNrYik7XG4gXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuIFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKSB7XG4rXHRcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xuIFx0bnIgPSBuZmNfbGxjcF9ucihza2IpO1xuIFxuQEAgLTEyNTQsNiArMTI2MCwxMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gXG4gXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xuIFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBMTENQX0hFQURFUl9TSVpFICsgMSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0cmVhc29uID0gc2tiLVx1MDAzZWRhdGFbMl07XG4gXG4gXHRwcl9kZWJ1ZyhcIiVkICVkIHJlYXNvbiAlZFxcblwiLCBzc2FwLCBkc2FwLCByZWFzb24pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MDAuMTI5NzY2OTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTYwMzc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkFzc2Vzc2luZyB0aGUgTmVlZCBmb3IgS01TQU4gRnV6emluZyBvbiBUaGlzIFBhdGNoKipcblxuQWxyaWdodCwgdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQgZm9yIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgYXJlYXMgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gR2l2ZW4gdGhlIGRvbWFpbiwgSSdtIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9ucyB3aXRoIHNoYXJlZCByZXNvdXJjZXMsIGJ1ZmZlcnMsIG9yIGRhdGEgc3RydWN0dXJlcy4gVGhlIG5mYyBzdWJzeXN0ZW0gaXMsIG9mIGNvdXJzZSwgaW50ZXJlc3RpbmcuXG5cblRoZXJlZm9yZSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgbmV0L25mYy9sbGNwX2NvcmUuY2AuIEknbGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBsaW5lcyBhcm91bmQgMTA3NyBhbmQgMTI1NC4gVGhvc2UgbGluZSBudW1iZXJzIGdpdmUgbWUgYSBzdGFydGluZyBwb2ludCwgbGlrZWx5IGluZGljYXRpdmUgb2YgaW50ZXJlc3RpbmcgY29udHJvbCBmbG93IG9yIGRhdGEgbWFuaXB1bGF0aW9uLiBJJ2xsIHJlYWQgd2l0aCBhbiBleWUgZm9yIGFueSBwb2ludGVyIGFyaXRobWV0aWMsIGJ1ZmZlciBhY2Nlc3Nlcywgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZm9jdXNpbmcgb24gaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgYWxsb2NhdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYSBLTVNBTiBydW4gd291bGQgYmUgYmVuZWZpY2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMSwiT3V0cHV0VG9rZW5zIjo4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MDYuNjQ1ODA5MjM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzA6XFx0c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9oZGxjKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuMTA3MTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcyOlxcdHtcXG4xMDczOlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XFxuMTA3NDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMTA3NTpcXHRcXHR1OCBkc2FwLCBzc2FwLCBwdHlwZSwgbnMsIG5yO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRwdHlwZSA9IG5mY19sbGNwX3B0eXBlKHNrYik7XFxuMTA3ODpcXHRcXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xcbjEwNzk6XFx0XFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcXG4xMDgwOlxcdFxcbjEwODE6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIExMQ1BfU0VRVUVOQ0VfU0laRSkge1xcbjEwODI6XFx0XFx0XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xcbjEwODM6XFx0XFx0XFx0cmV0dXJuO1xcbjEwODQ6XFx0XFx0fVxcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRucyA9IG5mY19sbGNwX25zKHNrYik7XFxuMTA4NzpcXHRcXHRuciA9IG5mY19sbGNwX25yKHNrYik7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdHByX2RlYnVnKFxcXCIlZCAlZCBSICVkIFMgJWRcXFxcblxcXCIsIGRzYXAsIHNzYXAsIG5yLCBucyk7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2tfZ2V0KGxvY2FsLCBkc2FwLCBzc2FwKTtcXG4xMDkyOlxcdFxcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xcbjEwOTM6XFx0XFx0XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xcbjEwOTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjEwOTU6XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRzayA9IFxcdTAwMjZsbGNwX3NvY2stXFx1MDAzZXNrO1xcbjEwOTg6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xMDk5OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9DTE9TRUQpIHtcXG4xMTAwOlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTEwMTpcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3B1dChsbGNwX3NvY2spO1xcbjExMDI6XFx0XFx0XFx0cmV0dXJuO1xcbjExMDM6XFx0XFx0fVxcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHQvKiBQYXNzIHRoZSBwYXlsb2FkIHVwc3RyZWFtICovXFxuMTEwNjpcXHRcXHRpZiAocHR5cGUgPT0gTExDUF9QRFVfSSkge1xcbjExMDc6XFx0XFx0XFx0cHJfZGVidWcoXFxcIkkgZnJhbWUsIHF1ZXVlaW5nIG9uICVwXFxcXG5cXFwiLCBcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2Vzayk7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdFxcdGlmIChucyA9PSBsbGNwX3NvY2stXFx1MDAzZXJlY3ZfbilcXG4xMTEwOlxcdFxcdFxcdFxcdGxsY3Bfc29jay1cXHUwMDNlcmVjdl9uID0gKGxsY3Bfc29jay1cXHUwMDNlcmVjdl9uICsgMSkgJSAxNjtcXG4xMTExOlxcdFxcdFxcdGVsc2VcXG4xMTEyOlxcdFxcdFxcdFxcdHByX2VycihcXFwiUmVjZWl2ZWQgb3V0IG9mIHNlcXVlbmNlIEkgUERVXFxcXG5cXFwiKTtcXG4xMTEzOlxcdFxcbjExMTQ6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBMTENQX0hFQURFUl9TSVpFICsgTExDUF9TRVFVRU5DRV9TSVpFKTtcXG4xMTE1OlxcdFxcdFxcdGlmICghc29ja19xdWV1ZV9yY3Zfc2tiKFxcdTAwMjZsbGNwX3NvY2stXFx1MDAzZXNrLCBza2IpKSB7XFxuMTExNjpcXHRcXHRcXHRcXHQvKlxcbjExMTc6XFx0XFx0XFx0XFx0ICogSSBmcmFtZXMgd2lsbCBiZSBmcmVlZCBmcm9tIHRoZSBzb2NrZXQgbGF5ZXIsIHNvIHdlXFxuMTExODpcXHRcXHRcXHRcXHQgKiBuZWVkIHRvIGtlZXAgdGhlbSBhbGl2ZSB1bnRpbCBzb21lb25lIHJlY2VpdmVzIHRoZW0uXFxuMTExOTpcXHRcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MDYuNjQ1OTYyNzc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDU6XFx0XFxuMTI0NjpcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NPTk5FQ1RFRDtcXG4xMjQ3OlxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbjEyNDg6XFx0XFxuMTI0OTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjEyNTA6XFx0XFxuMTI1MTpcXHRcXHRuZmNfbGxjcF9zb2NrX3B1dChsbGNwX3NvY2spO1xcbjEyNTI6XFx0fVxcbjEyNTM6XFx0XFxuMTI1NDpcXHRzdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuMTI1NTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMTI1NjpcXHR7XFxuMTI1NzpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xcbjEyNTg6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjEyNTk6XFx0XFx0dTggZHNhcCwgc3NhcCwgcmVhc29uO1xcbjEyNjA6XFx0XFxuMTI2MTpcXHRcXHRkc2FwID0gbmZjX2xsY3BfZHNhcChza2IpO1xcbjEyNjI6XFx0XFx0c3NhcCA9IG5mY19sbGNwX3NzYXAoc2tiKTtcXG4xMjYzOlxcdFxcbjEyNjQ6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTExDUF9IRUFERVJfU0laRSArIDEpXFxuMTI2NTpcXHRcXHRcXHRyZXR1cm47XFxuMTI2NjpcXHRcXG4xMjY3OlxcdFxcdHJlYXNvbiA9IHNrYi1cXHUwMDNlZGF0YVsyXTtcXG4xMjY4OlxcdFxcbjEyNjk6XFx0XFx0cHJfZGVidWcoXFxcIiVkICVkIHJlYXNvbiAlZFxcXFxuXFxcIiwgc3NhcCwgZHNhcCwgcmVhc29uKTtcXG4xMjcwOlxcdFxcbjEyNzE6XFx0XFx0c3dpdGNoIChyZWFzb24pIHtcXG4xMjcyOlxcdFxcdGNhc2UgTExDUF9ETV9OT0JPVU5EOlxcbjEyNzM6XFx0XFx0Y2FzZSBMTENQX0RNX1JFSjpcXG4xMjc0OlxcdFxcdFxcdGxsY3Bfc29jayA9IG5mY19sbGNwX2Nvbm5lY3Rpbmdfc29ja19nZXQobG9jYWwsIGRzYXApO1xcbjEyNzU6XFx0XFx0XFx0YnJlYWs7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdGRlZmF1bHQ6XFxuMTI3ODpcXHRcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrX2dldChsb2NhbCwgZHNhcCwgc3NhcCk7XFxuMTI3OTpcXHRcXHRcXHRicmVhaztcXG4xMjgwOlxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XFxuMTI4MzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiQWxyZWFkeSBjbG9zZWRcXFxcblxcXCIpO1xcbjEyODQ6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MTowNi42NDYwNzY1OTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5ODM1NDg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIExMQ1AgRGV0YWlscyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgTExDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRob3NlIGtleSB2YXJpYWJsZXMg4oCTIGBuZmNfbGxjcF9uc2AsIGBuZmNfbGxjcF9ucmAsIGBuZmNfbGxjcF9wdHlwZWAsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhleSdyZSBkZWZpbmVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgc3VzcGVjdCB0aGV5J2xsIGJlIGluIG9uZSBvZiB0aGUgcmVsZXZhbnQgaGVhZGVycywgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluLlxuXG5CZXlvbmQganVzdCBmaW5kaW5nIHRoZWlyIGRlZmluaXRpb25zLCBJIGFsc28gbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhlYWRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyLCB0aGUgYXJyYW5nZW1lbnQgb2YgaXRzIGZpZWxkcywgYW5kIGFueSBwb3RlbnRpYWwgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoaXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBlZmZpY2llbnQgcGFja2V0IGNyYWZ0aW5nIGFuZCBwYXJzaW5nLCBhbmQgZm9yIGRlYnVnZ2luZyBhbnkgbG93ZXItbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm9ibGVtcyB0aGF0IG1pZ2h0IGFyaXNlLiBUaGUgc3BlY2lmaWMgYnl0ZSBsYXlvdXQgaXMgcHJvYmFibHkgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjA5LjQ0NDQzNDkxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDc5NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTExDUF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwLmg9Nj1lbnVtIGxsY3Bfc3RhdGUge1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMTMtXFxubmV0L25mYy9sbGNwLmg6MTQ6I2RlZmluZSBMTENQX0RFRkFVTFRfTFRPIDEwMFxcbm5ldC9uZmMvbGxjcC5oOjE1OiNkZWZpbmUgTExDUF9ERUZBVUxUX1JXICAxXFxubmV0L25mYy9sbGNwLmg6MTY6I2RlZmluZSBMTENQX0RFRkFVTFRfTUlVIDEyOFxcbm5ldC9uZmMvbGxjcC5oLTE3LVxcbm5ldC9uZmMvbGxjcC5oOjE4OiNkZWZpbmUgTExDUF9NQVhfTFRPICAweGZmXFxubmV0L25mYy9sbGNwLmg6MTk6I2RlZmluZSBMTENQX01BWF9SVyAgIDE1XFxubmV0L25mYy9sbGNwLmg6MjA6I2RlZmluZSBMTENQX01BWF9NSVVYIDB4N2ZmXFxubmV0L25mYy9sbGNwLmg6MjE6I2RlZmluZSBMTENQX01BWF9NSVUgKExMQ1BfTUFYX01JVVggKyAxMjgpXFxubmV0L25mYy9sbGNwLmgtMjItXFxubmV0L25mYy9sbGNwLmg6MjM6I2RlZmluZSBMTENQX1dLU19OVU1fU0FQICAgMTZcXG5uZXQvbmZjL2xsY3AuaDoyNDojZGVmaW5lIExMQ1BfU0RQX05VTV9TQVAgICAxNlxcbm5ldC9uZmMvbGxjcC5oOjI1OiNkZWZpbmUgTExDUF9MT0NBTF9OVU1fU0FQIDMyXFxubmV0L25mYy9sbGNwLmg6MjY6I2RlZmluZSBMTENQX0xPQ0FMX1NBUF9PRkZTRVQgKExMQ1BfV0tTX05VTV9TQVAgKyBMTENQX1NEUF9OVU1fU0FQKVxcbm5ldC9uZmMvbGxjcC5oOjI3OiNkZWZpbmUgTExDUF9NQVhfU0FQIChMTENQX1dLU19OVU1fU0FQICsgTExDUF9TRFBfTlVNX1NBUCArIExMQ1BfTE9DQUxfTlVNX1NBUClcXG5uZXQvbmZjL2xsY3AuaDoyODojZGVmaW5lIExMQ1BfU0RQX1VOQk9VTkQgICAoTExDUF9NQVhfU0FQICsgMSlcXG5uZXQvbmZjL2xsY3AuaC0yOS1cXG4tLVxcbm5ldC9uZmMvbGxjcC5oPTE0MT1zdHJ1Y3QgbmZjX2xsY3BfdWlfY2Ige1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMTUwLVxcbm5ldC9uZmMvbGxjcC5oOjE1MTojZGVmaW5lIExMQ1BfSEVBREVSX1NJWkUgICAyXFxubmV0L25mYy9sbGNwLmg6MTUyOiNkZWZpbmUgTExDUF9TRVFVRU5DRV9TSVpFIDFcXG5uZXQvbmZjL2xsY3AuaDoxNTM6I2RlZmluZSBMTENQX0FHRl9QRFVfSEVBREVSX1NJWkUgMlxcbm5ldC9uZmMvbGxjcC5oLTE1NC1cXG5uZXQvbmZjL2xsY3AuaC0xNTUtLyogTExDUCB2ZXJzaW9uczogMS4xIGlzIDEuMCBwbHVzIFNEUCAqL1xcbm5ldC9uZmMvbGxjcC5oOjE1NjojZGVmaW5lIExMQ1BfVkVSU0lPTl8xMCAweDEwXFxubmV0L25mYy9sbGNwLmg6MTU3OiNkZWZpbmUgTExDUF9WRVJTSU9OXzExIDB4MTFcXG5uZXQvbmZjL2xsY3AuaC0xNTgtXFxubmV0L25mYy9sbGNwLmgtMTU5LS8qIExMQ1AgUERVIHR5cGVzICovXFxubmV0L25mYy9sbGNwLmg6MTYwOiNkZWZpbmUgTExDUF9QRFVfU1lNTSAgICAgMHgwXFxubmV0L25mYy9sbGNwLmg6MTYxOiNkZWZpbmUgTExDUF9QRFVfUEFYICAgICAgMHgxXFxubmV0L25mYy9sbGNwLmg6MTYyOiNkZWZpbmUgTExDUF9QRFVfQUdGICAgICAgMHgyXFxubmV0L25mYy9sbGNwLmg6MTYzOiNkZWZpbmUgTExDUF9QRFVfVUkgICAgICAgMHgzXFxubmV0L25mYy9sbGNwLmg6MTY0OiNkZWZpbmUgTExDUF9QRFVfQ09OTkVDVCAgMHg0XFxubmV0L25mYy9sbGNwLmg6MTY1OiNkZWZpbmUgTExDUF9QRFVfRElTQyAgICAgMHg1XFxubmV0L25mYy9sbGNwLmg6MTY2OiNkZWZpbmUgTExDUF9QRFVfQ0MgICAgICAgMHg2XFxubmV0L25mYy9sbGNwLmg6MTY3OiNkZWZpbmUgTExDUF9QRFVfRE0gICAgICAgMHg3XFxubmV0L25mYy9sbGNwLmg6MTY4OiNkZWZpbmUgTExDUF9QRFVfRlJNUiAgICAgMHg4XFxubmV0L25mYy9sbGNwLmg6MTY5OiNkZWZpbmUgTExDUF9QRFVfU05MICAgICAgMHg5XFxubmV0L25mYy9sbGNwLmg6MTcwOiNkZWZpbmUgTExDUF9QRFVfSSAgICAgICAgMHhjXFxubmV0L25mYy9sbGNwLmg6MTcxOiNkZWZpbmUgTExDUF9QRFVfUlIgICAgICAgMHhkXFxubmV0L25mYy9sbGNwLmg6MTcyOiNkZWZpbmUgTExDUF9QRFVfUk5SICAgICAgMHhlXFxubmV0L25mYy9sbGNwLmgtMTczLVxcbm5ldC9uZmMvbGxjcC5oLTE3NC0vKiBQYXJhbWV0ZXJzIFRMViB0eXBlcyAqL1xcbm5ldC9uZmMvbGxjcC5oOjE3NTojZGVmaW5lIExMQ1BfVExWX1ZFUlNJT04gMHgxXFxubmV0L25mYy9sbGNwLmg6MTc2OiNkZWZpbmUgTExDUF9UTFZfTUlVWCAgICAweDJcXG5uZXQvbmZjL2xsY3AuaDoxNzc6I2RlZmluZSBMTENQX1RMVl9XS1MgICAgIDB4M1xcbm5ldC9uZmMvbGxjcC5oOjE3ODojZGVmaW5lIExMQ1BfVExWX0xUTyAgICAgMHg0XFxubmV0L25mYy9sbGNwLmg6MTc5OiNkZWZpbmUgTExDUF9UTFZfUlcgICAgICAweDVcXG5uZXQvbmZjL2xsY3AuaDoxODA6I2RlZmluZSBMTENQX1RMVl9TTiAgICAgIDB4Nlxcbm5ldC9uZmMvbGxjcC5oOjE4MTojZGVmaW5lIExMQ1BfVExWX09QVCAgICAgMHg3XFxubmV0L25mYy9sbGNwLmg6MTgyOiNkZWZpbmUgTExDUF9UTFZfU0RSRVEgICAweDhcXG5uZXQvbmZjL2xsY3AuaDoxODM6I2RlZmluZSBMTENQX1RMVl9TRFJFUyAgIDB4OVxcbm5ldC9uZmMvbGxjcC5oOjE4NDojZGVmaW5lIExMQ1BfVExWX01BWCAgICAgMHhhXFxubmV0L25mYy9sbGNwLmgtMTg1LVxcbm5ldC9uZmMvbGxjcC5oLTE4Ni0vKiBXZWxsIGtub3duIExMQ1AgU0FQICovXFxubmV0L25mYy9sbGNwLmg6MTg3OiNkZWZpbmUgTExDUF9TQVBfU0RQICAgMHgxXFxubmV0L25mYy9sbGNwLmg6MTg4OiNkZWZpbmUgTExDUF9TQVBfSVAgICAgMHgyXFxubmV0L25mYy9sbGNwLmg6MTg5OiNkZWZpbmUgTExDUF9TQVBfT0JFWCAgMHgzXFxubmV0L25mYy9sbGNwLmg6MTkwOiNkZWZpbmUgTExDUF9TQVBfU05FUCAgMHg0XFxubmV0L25mYy9sbGNwLmg6MTkxOiNkZWZpbmUgTExDUF9TQVBfTUFYICAgMHhmZlxcbm5ldC9uZmMvbGxjcC5oLTE5Mi1cXG5uZXQvbmZjL2xsY3AuaC0xOTMtLyogRGlzY29ubmVjdGlvbiByZWFzb24gY29kZSAqL1xcbm5ldC9uZmMvbGxjcC5oOjE5NDojZGVmaW5lIExMQ1BfRE1fRElTQyAgICAweDAwXFxubmV0L25mYy9sbGNwLmg6MTk1OiNkZWZpbmUgTExDUF9ETV9OT0NPTk4gIDB4MDFcXG5uZXQvbmZjL2xsY3AuaDoxOTY6I2RlZmluZSBMTENQX0RNX05PQk9VTkQgMHgwMlxcbm5ldC9uZmMvbGxjcC5oOjE5NzojZGVmaW5lIExMQ1BfRE1fUkVKICAgICAweDAzXFxubmV0L25mYy9sbGNwLmgtMTk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MTowOS41NTI5MjE5MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwNjE4NjU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG5mY19sbGNwX25zYCBhbmQgYG5mY19sbGNwX25yYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGUgc3lzdGVtIGlzIGRvaW5nIHdpdGggdGhlc2UgdHdvIHZhcmlhYmxlcywgYG5mY19sbGNwX25zYCBhbmQgYG5mY19sbGNwX25yYC4gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBkZWx2aW5nIGludG8gdGhlaXIgcHVycG9zZSBhbmQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHJvbGVzIHdpdGhpbiB0aGUgTkZDIExvdyBMZXZlbCBDb21tdW5pY2F0aW9uIFByb3RvY29sIChMTENQKSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGF0IGRvIFwiTlNcIiBhbmQgXCJOUlwiIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQ/IEFyZSB0aGV5IHNlcXVlbmNlIG51bWJlcnMsIGNvdW50ZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQXJlIHRoZXkgcmVsYXRlZCB0byBzZW5kaW5nIG9yIHJlY2VpdmluZz8gQXJlIHRoZXkgbGlua2VkIHRvIGFueSBzcGVjaWZpYyBMTENQIGZyYW1lIHR5cGVzLCBsaWtlIEluZm9ybWF0aW9uIChJKSwgVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAoVUkpLCBvciBTdXBlcnZpc29yeSAoUyk/IFRoZSBkZXRhaWxzIHdpbGwgbGlrZWx5IGJlIGJ1cmllZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgc28gSSdsbCBwcm9iYWJseSBoYXZlIHRvIHRyYWNlIHRoZWlyIHVzYWdlIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZW4gaXQncyBhYm91dCBjb25uZWN0aW5nIHRoZXNlIHZhcmlhYmxlcyB0byBob3cgdGhlIE5GQyBjb250cm9sbGVyIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGRldmljZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJJ20gbG9va2luZyBhdCBhIHNlbmRlci9yZWNlaXZlciByZWxhdGlvbnNoaXAgb3Igd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gYSBwZWVyLXRvLXBlZXIgY29ubmVjdGlvbi4gVWx0aW1hdGVseSwgZmlndXJpbmcgb3V0IHdoYXQgdGhlc2UgdmFyaWFibGVzIHN0YW5kIGZvciBpcyB0aGUgaW5pdGlhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29tbXVuaWNhdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MTEuNzU5MTExNjc1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcwODA3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfbltzcl1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwX2NvcmUuYz02OTk9c3RhdGljIHU4IG5mY19sbGNwX3NzYXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzAzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6NzA0OnN0YXRpYyB1OCBuZmNfbGxjcF9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzA1LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzA4LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6NzA5OnN0YXRpYyB1OCBuZmNfbGxjcF9ucihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNzEwLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTA3MD1zdGF0aWMgdm9pZCBuZmNfbGxjcF9yZWN2X2hkbGMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4NS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwODY6XFx0bnMgPSBuZmNfbGxjcF9ucyhza2IpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTA4NzpcXHRuciA9IG5mY19sbGNwX25yKHNrYik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDg4LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTM0LVxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNldHhfcGVuZGluZ19xdWV1ZSwgcywgdG1wKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMTM1OlxcdFxcdFxcdG4gPSBuZmNfbGxjcF9ucyhzKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjExLjg5NjE5ODk5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU1MjU3MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBsbGNwX2NvcmUuYzogTGluZXMgNjk1LTcyMCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBMTENQIGNvcmUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjk1LTcyMC4gTGV0IG1lIHB1bGwgdGhhdCB1cC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBidXQgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSSBrbm93IHRoaXMgYXJlYSBkZWFscyB3aXRoLi4uICpbcGF1c2VzLCBtZW50YWxseSByZXZpZXdpbmcgbGxjcF9jb3JlJ3MgZnVuY3Rpb25dKiAuLi5wcm9iYWJseSB0aGUgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGxvZ2ljLCBvciBwZXJoYXBzIHNlc3Npb24gZXN0YWJsaXNobWVudC90ZXJtaW5hdGlvbiwgb3IgcG9zc2libHkgZGF0YSB0cmFuc21pc3Npb24gZmxvdyBjb250cm9sLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQncyBsaWtlbHkgYSByZWxhdGl2ZWx5IGZvY3VzZWQgYml0IG9mIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBvciBjb2RlIGJsb2NrIHRoZXNlIGxpbmVzIGJlbG9uZyB0byB3aXRoaW4gdGhlIGxhcmdlciBMTENQIGNvbnRleHQuIElzIHRoaXMgcGFydCBvZiB0aGUgY29ubmVjdCByZXF1ZXN0IGhhbmRsaW5nPyBUaGUgZGF0YSBhY2tub3dsZWRnbWVudCBwcm9jZXNzPyBPciBtYXliZSBpdCdzIHJlbGF0ZWQgdG8gdGhlIHRpbWVyIG1hbmFnZW1lbnQgZm9yIGtlZXAtYWxpdmUgcGFja2V0cyBvciBjb25uZWN0aW9uIHRpbWVvdXRzPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsbHkgc3VidGxlIGVycm9yIGhhbmRsaW5nIG9yIHN0YXRlIHRyYW5zaXRpb24gbG9naWMgaGVyZSwgZ2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJ20gaG9waW5nIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24sIHRob3VnaCB3aXRoIExMQ1AncyBpbmhlcmVudCB0aHJlYWRpbmcgbW9kZWwsIHRoYXQncyBhbHdheXMgYSBwb3NzaWJpbGl0eS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKnNheXMqLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IGFuZCB0aGVuIHpvb20gaW4gb24gYW55IHBhcnRpY3VsYXJseSBkZW5zZSBvciBjb21wbGV4LWxvb2tpbmcgY29uZGl0aW9uYWwgYnJhbmNoZXMuIE15IGFpbSBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbnRlbnRpb24gb2YgdGhlIGNvZGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTExDUCBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjE0LjU1MTQ2MDMxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTU6XFx0e1xcbiA2OTY6XFx0XFx0cmV0dXJuICgocGR1LVxcdTAwM2VkYXRhWzBdIFxcdTAwMjYgMHgwMykgXFx1MDAzY1xcdTAwM2MgMikgfCAoKHBkdS1cXHUwMDNlZGF0YVsxXSBcXHUwMDI2IDB4YzApIFxcdTAwM2VcXHUwMDNlIDYpO1xcbiA2OTc6XFx0fVxcbiA2OTg6XFx0XFxuIDY5OTpcXHRzdGF0aWMgdTggbmZjX2xsY3Bfc3NhcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbiA3MDA6XFx0e1xcbiA3MDE6XFx0XFx0cmV0dXJuIHBkdS1cXHUwMDNlZGF0YVsxXSBcXHUwMDI2IDB4M2Y7XFxuIDcwMjpcXHR9XFxuIDcwMzpcXHRcXG4gNzA0OlxcdHN0YXRpYyB1OCBuZmNfbGxjcF9ucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbiA3MDU6XFx0e1xcbiA3MDY6XFx0XFx0cmV0dXJuIHBkdS1cXHUwMDNlZGF0YVsyXSBcXHUwMDNlXFx1MDAzZSA0O1xcbiA3MDc6XFx0fVxcbiA3MDg6XFx0XFxuIDcwOTpcXHRzdGF0aWMgdTggbmZjX2xsY3BfbnIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnBkdSlcXG4gNzEwOlxcdHtcXG4gNzExOlxcdFxcdHJldHVybiBwZHUtXFx1MDAzZWRhdGFbMl0gXFx1MDAyNiAweGY7XFxuIDcxMjpcXHR9XFxuIDcxMzpcXHRcXG4gNzE0OlxcdHN0YXRpYyB2b2lkIG5mY19sbGNwX3NldF9ucm5zKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqcGR1KVxcbiA3MTU6XFx0e1xcbiA3MTY6XFx0XFx0cGR1LVxcdTAwM2VkYXRhWzJdID0gKHNvY2stXFx1MDAzZXNlbmRfbiBcXHUwMDNjXFx1MDAzYyA0KSB8IChzb2NrLVxcdTAwM2VyZWN2X24pO1xcbiA3MTc6XFx0XFx0c29jay1cXHUwMDNlc2VuZF9uID0gKHNvY2stXFx1MDAzZXNlbmRfbiArIDEpICUgMTY7XFxuIDcxODpcXHRcXHRzb2NrLVxcdTAwM2VyZWN2X2Fja19uID0gKHNvY2stXFx1MDAzZXJlY3ZfbiAtIDEpICUgMTY7XFxuIDcxOTpcXHR9XFxuIDcyMDpcXHRcXG4gNzIxOlxcdHZvaWQgbmZjX2xsY3Bfc2VuZF90b19yYXdfc29jayhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbiA3MjI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGRpcmVjdGlvbilcXG4gNzIzOlxcdHtcXG4gNzI0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2JfY29weSA9IE5VTEwsICpuc2tiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDo1MToxNC41NTE2MjAyODRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2OTczNzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTkZDIExMQ1AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZS4gU3BlY2lmaWNhbGx5IGluIGBuZmNfbGxjcF9yZWN2X2hkbGNgLCBpdCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRhdGFbMl1gIHVzaW5nIGBuZmNfbGxjcF9ucyhza2IpYCBhbmQgYG5mY19sbGNwX25yKHNrYilgLiBJZiB0aGUgYHNrYi1cdTAwM2VsZW5gIHdhcyBsZXNzIHRoYW4gMyAod2hpY2ggaXMgYExMQ1BfSEVBREVSX1NJWkVgIG9mIDIgcGx1cyBgTExDUF9TRVFVRU5DRV9TSVpFYCBvZiAxKSwgdGhhdCBgc2tiLVx1MDAzZWRhdGFbMl1gIGFjY2VzcyB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQhIFNpbWlsYXJseSwgaW4gYG5mY19sbGNwX3JlY3ZfZG1gLCBpdCByZWFkcyBgcmVhc29uID0gc2tiLVx1MDAzZWRhdGFbMl1gLiAgSWYgYHNrYi1cdTAwM2VsZW5gIHdhcyBsZXNzIHRoYW4gMyAoYWdhaW4sIGBMTENQX0hFQURFUl9TSVpFICsgMWApLCB0aGF0IHJlYWQgd291bGQgYWxzbyBiZSBvdXQtb2YtYm91bmRzLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGludHJvZHVjaW5nIGJvdW5kcyBjaGVja3MgdG8gcHJldmVudCB0aG9zZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvbiBgc2tiLVx1MDAzZWRhdGFgLiAgVGhlc2Uga2luZHMgb2Ygb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2l0aGluIGBza2JgIGRhdGEgYnVmZmVycyBhcmUgY2xhc3NpYyBzbGFiL3NrYiBidWZmZXIgaXNzdWVzLCBhbmQgSSdkIGV4cGVjdCBLQVNBTiB0byBiZSBmbGFnZ2luZyB0aGVtLlxuXG5Ob3csIEkgYWx3YXlzIGhhdmUgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcy4gTGV0J3Mgc2VlLi4uIHRoZSBwcmltYXJ5IHF1ZXN0aW9uIGlzOiBBcmUga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nPyBJbiBgbmZjX2xsY3BfcmVjdl9oZGxjYCwgaWYgYHNrYi1cdTAwM2VsZW5gIGlzIGxlc3MgdGhhbiBgTExDUF9IRUFERVJfU0laRSArIExMQ1BfU0VRVUVOQ0VfU0laRWAsIGl0IGNhbGxzIGBuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7IHJldHVybjtgLiAgSSBuZWVkIHRvIHJldmlldyBgbmZjX2xsY3Bfc2VuZF9kbWAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6NTE6MTcuOTIxMzYxMjc1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1NTc1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfc2VuZF9kbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3AuaD0yNDA9aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmgtMjQxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XFxubmV0L25mYy9sbGNwLmg6MjQyOmludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbik7XFxubmV0L25mYy9sbGNwLmgtMjQzLWludCBuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTkzPWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjI2LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYyNzppbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjI4LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9OTExPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDM4LVxcdC8qIFNlbmQgRE0gKi9cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwMzk6XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgcmVhc29uKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwNDAtfVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xMDcwPXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfaGRsYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDgxLVxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIExMQ1BfSEVBREVSX1NJWkUgKyBMTENQX1NFUVVFTkNFX1NJWkUpIHtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEwODI6XFx0XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9OT0NPTk4pO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTA4My1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwOTItXFx0aWYgKGxsY3Bfc29jayA9PSBOVUxMKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMDkzOlxcdFxcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEwOTQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xMTY0PXN0YXRpYyB2b2lkIG5mY19sbGNwX3JlY3ZfZGlzYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTgxLVxcdGlmIChsbGNwX3NvY2sgPT0gTlVMTCkge1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE4MjpcXHRcXHRuZmNfbGxjcF9zZW5kX2RtKGxvY2FsLCBkc2FwLCBzc2FwLCBMTENQX0RNX05PQ09OTik7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMTgzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTIwMi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjEyMDM6XFx0bmZjX2xsY3Bfc2VuZF9kbShsb2NhbCwgZHNhcCwgc3NhcCwgTExDUF9ETV9ESVNDKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMDQtXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTEyMDk9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9jYyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMjIxLVxcdFxcdHByX2VycihcXFwiSW52YWxpZCBDQ1xcXFxuXFxcIik7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMjIyOlxcdFxcdG5mY19sbGNwX3NlbmRfZG0obG9jYWwsIGRzYXAsIHNzYXAsIExMQ1BfRE1fTk9DT05OKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTEyMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjE4LjAyMTkyNDI5OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA3MjM1NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTG93LUxldmVsIExMQ1AgU2VuZCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBgbmZjX2xsY3Bfc2VuZF9kbWAg4oCTIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBEaXJlY3QgTW9kZSBEYXRhIChETSkgaXMgYmVpbmcgc2VudCBhdCB0aGUgTExDUCBsZXZlbC4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIHN0ZXBzLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQsIGFueSBmcmFtaW5nIG9yIGVycm9yIGNvcnJlY3Rpb24gbWVjaGFuaXNtcyB1c2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBORkMgbGF5ZXJzLiBHb3R0YSBnZXQgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgTExDUCBzZW5kIG9wZXJhdGlvbi4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjIxLjAyOTE2MzQyNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI2OlxcdFxcbiA2Mjc6XFx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxcbiA2Mjg6XFx0e1xcbiA2Mjk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNjMwOlxcdFxcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XFxuIDYzMTpcXHRcXHR1MTYgc2l6ZSA9IDE7IC8qIFJlYXNvbiBjb2RlICovXFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdHByX2RlYnVnKFxcXCJTZW5kaW5nIERNIHJlYXNvbiAweCV4XFxcXG5cXFwiLCByZWFzb24pO1xcbiA2MzQ6XFx0XFxuIDYzNTpcXHRcXHRpZiAobG9jYWwgPT0gTlVMTClcXG4gNjM2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA2Mzc6XFx0XFxuIDYzODpcXHRcXHRkZXYgPSBsb2NhbC1cXHUwMDNlZGV2O1xcbiA2Mzk6XFx0XFx0aWYgKGRldiA9PSBOVUxMKVxcbiA2NDA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHNpemUgKz0gTExDUF9IRUFERVJfU0laRTtcXG4gNjQzOlxcdFxcdHNpemUgKz0gZGV2LVxcdTAwM2V0eF9oZWFkcm9vbSArIGRldi1cXHUwMDNldHhfdGFpbHJvb20gKyBORkNfSEVBREVSX1NJWkU7XFxuIDY0NDpcXHRcXG4gNjQ1OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfS0VSTkVMKTtcXG4gNjQ2OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4gNjQ3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGRldi1cXHUwMDNldHhfaGVhZHJvb20gKyBORkNfSEVBREVSX1NJWkUpO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRza2IgPSBsbGNwX2FkZF9oZWFkZXIoc2tiLCBkc2FwLCBzc2FwLCBMTENQX1BEVV9ETSk7XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdHNrYl9wdXRfZGF0YShza2IsIFxcdTAwMjZyZWFzb24sIDEpO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3F1ZXVlLCBza2IpO1xcbiA2NTY6XFx0XFxuIDY1NzpcXHRcXHRyZXR1cm4gMDtcXG4gNjU4OlxcdH1cXG4gNjU5OlxcdFxcbiA2NjA6XFx0aW50IG5mY19sbGNwX3NlbmRfaV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcXG4gNjYxOlxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiA2NjI6XFx0e1xcbiA2NjM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnBkdTtcXG4gNjY0OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzb2NrLVxcdTAwM2VzaztcXG4gNjY1OlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjIxLjAyOTI5MDM2NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk0OTM5NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGNydWNpYWwsIHZ1bG5lcmFiaWxpdHkuIFdlJ3JlIGxvb2tpbmcgYXQgdHdvIGZ1bmN0aW9ucyBoZXJlOiBgbmZjX2xsY3BfcmVjdl9oZGxjKClgIGFuZCBgbmZjX2xsY3BfcmVjdl9kbSgpYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgbmV0d29yayBwYWNrZXRzLCBzcGVjaWZpY2FsbHksIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgZGF0YS5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIGEgbWFsaWNpb3VzIGFjdG9yIHNlbnQgYSBzaG9ydCBwYWNrZXTigJRvbmUgd2hlcmUgdGhlIGxlbmd0aCBvZiBgc2tiLVx1MDAzZWRhdGFgIHdhcyBsZXNzIHRoYW4gdGhlIGV4cGVjdGVkIGhlYWRlciBzaXplIHBsdXMgc2VxdWVuY2Ugb3IgcmVhc29uIGJ5dGVz4oCUd2UnZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gSW4gYG5mY19sbGNwX3JlY3ZfaGRsYygpYCwgdGhlIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBza2ItXHUwMDNlZGF0YVsyXWAgd2l0aG91dCB2ZXJpZnlpbmcgdGhhdCB0aGUgYHNrYmAgd2FzIGFjdHVhbGx5IGxvbmcgZW5vdWdoLiBUaGUgc2FtZSBpc3N1ZSBleGlzdGVkIGluIGBuZmNfbGxjcF9yZWN2X2RtKClgIHdpdGggdGhlIGFjY2VzcyB0byBgc2tiLVx1MDAzZWRhdGFbMl1gLiBUaGlzIGlzIHRoZSBjbGFzc2ljIGtpbmQgb2Ygc3BhdGlhbCBtZW1vcnkgZXJyb3IgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgc2ltcGxlIGFuZCBlbGVnYW50OiBpdCBhZGRzIHByb3BlciBsZW5ndGggY2hlY2tzLiBOb3csIGJlZm9yZSBhY2Nlc3NpbmcgYHNrYi1cdTAwM2VkYXRhWzJdYCwgYm90aCBmdW5jdGlvbnMgd2lsbCB2ZXJpZnkgdGhhdCB0aGUgcGFja2V0IGxlbmd0aCBpcyBzdWZmaWNpZW50LiBJZiB0aGUgcGFja2V0IGlzIHRvbyBzaG9ydCwgYSBETSAoRGlzY29ubmVjdCBNb2RlKSBpcyBzZW50IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlYXJseS4gTm8gbW9yZSBvdXQtb2YtYm91bmRzIHJlYWRzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbXkgYXNzZXNzbWVudDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guXG5cbkkndmUgZXhhbWluZWQgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBJIGNhbiBzYXkgY29uZmlkZW50bHkgdGhhdDpcblxuKiAgIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLlxuKiAgIE5vIHZhcmlhYmxlcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLlxuKiAgIFRoZXJlIGFyZSBubyBtZW1vcnkgaW5mb3JtYXRpb24gbGVha3MuXG4qICAgVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFscyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cblxuR2l2ZW4gdGhlc2Ugb2JzZXJ2YXRpb25zLCB0aGlzIHBhdGNoIGlzIGEgY2xlYXIgd2luOyBpdCBzb2x2ZXMgYW4gaWRlbnRpZmllZCBzcGF0aWFsIG1lbW9yeSBlcnJvciAob3V0LW9mLWJvdW5kcyByZWFkKSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBvdGhlciByaXNrcy4gVGhpcyBpcyB3aHkgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gV2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgYWNjdXJhdGUgaGVyZSwgYW5kIHRoZSBwcm92aWRlZCByZWFzb25pbmcgaXMgYWxzbyBjbGVhciBhbmQgdmFsaWQuIFRoZSBjb2RlIGlzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU3LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjUxOjI1LjYyNDIzMzEzNloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVxcdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHNrYiBsZW5ndGggYm91bmRzIGNoZWNrcyBpbiBuZmNfbGxjcF9yZWN2X2hkbGMoKSBhbmQgbmZjX2xsY3BfcmVjdl9kbSgpIGJlZm9yZSBhY2Nlc3NpbmcgYnl0ZSBvZmZzZXQgMiAoc2tiLVxcdTAwM2VkYXRhWzJdKSBmb3Igc2VxdWVuY2UgbnVtYmVycyAvIHJlYXNvbiBjb2Rlcy4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgKE9PQikgbWVtb3J5IHJlYWRzIG9uIHRydW5jYXRlZCBORkMgTExDUCBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3BhdGlhbCBtZW1vcnkgZXJyb3JzIGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5t98g[1] Phase: Succeeded StartedAt: 2026-09-07 04:51:37 +0000 UTC FinishedAt: 2026-09-07 04:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 04:51:37 +0000 UTC FinishedAt: 2026-09-07 04:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2] Phase: Succeeded StartedAt: 2026-09-07 04:51:37 +0000 UTC FinishedAt: 2026-09-07 08:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 04:51:38 +0000 UTC FinishedAt: 2026-09-07 08:35:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 04:51:38 +0000 UTC FinishedAt: 2026-09-07 04:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 04:51:38 +0000 UTC FinishedAt: 2026-09-07 04:51:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow5t98g/series-workflow5t98g-convert-artifact-548559108/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 04:52:11 +0000 UTC FinishedAt: 2026-09-07 05:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 04:52:11 +0000 UTC FinishedAt: 2026-09-07 05:09:42 +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:*0ae46bef-83ce-4d0f-92da-d79418f5781d,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-workflow5t98g/series-workflow5t98g-convert-artifact-548559108/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": "fb61e36b-8d13-4fe5-a67f-90fc8278a3a8", "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-workflow5t98g/series-workflow5t98g-build-action-733355586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 04:52:11 +0000 UTC FinishedAt: 2026-09-07 05:09:32 +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:*0ae46bef-83ce-4d0f-92da-d79418f5781d,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-workflow5t98g/series-workflow5t98g-convert-artifact-548559108/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": "fb61e36b-8d13-4fe5-a67f-90fc8278a3a8", "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-workflow5t98g/series-workflow5t98g-build-action-733355586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 05:09:42 +0000 UTC FinishedAt: 2026-09-07 05:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 05:09:42 +0000 UTC FinishedAt: 2026-09-07 05:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 05:09:42 +0000 UTC FinishedAt: 2026-09-07 05:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 05:09:42 +0000 UTC FinishedAt: 2026-09-07 05:09:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow5t98g/series-workflow5t98g-convert-artifact-3818785923/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 05:09:52 +0000 UTC FinishedAt: 2026-09-07 05:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 05:09:52 +0000 UTC FinishedAt: 2026-09-07 05:11:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb61e36b-8d13-4fe5-a67f-90fc8278a3a8,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-workflow5t98g/series-workflow5t98g-build-action-733355586/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-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 05:11:54 +0000 UTC FinishedAt: 2026-09-07 05:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 05:11:54 +0000 UTC FinishedAt: 2026-09-07 05:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 05:11:54 +0000 UTC FinishedAt: 2026-09-07 05:30:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 05:11:54 +0000 UTC FinishedAt: 2026-09-07 05:30:32 +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:*0ae46bef-83ce-4d0f-92da-d79418f5781d,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-workflow5t98g/series-workflow5t98g-convert-artifact-3818785923/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": "ac5abb8d-1493-4119-95f8-0c6006e44606", "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-workflow5t98g/series-workflow5t98g-build-action-4019108663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 05:11:54 +0000 UTC FinishedAt: 2026-09-07 05:30:22 +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:*0ae46bef-83ce-4d0f-92da-d79418f5781d,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-workflow5t98g/series-workflow5t98g-convert-artifact-3818785923/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": "ac5abb8d-1493-4119-95f8-0c6006e44606", "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-workflow5t98g/series-workflow5t98g-build-action-4019108663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 05:30:32 +0000 UTC FinishedAt: 2026-09-07 05:30:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 05:30:32 +0000 UTC FinishedAt: 2026-09-07 05:30:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 05:30:32 +0000 UTC FinishedAt: 2026-09-07 05:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 05:30:32 +0000 UTC FinishedAt: 2026-09-07 05:32:22 +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:*ac5abb8d-1493-4119-95f8-0c6006e44606,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-workflow5t98g/series-workflow5t98g-build-action-4019108663/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-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 05:32:32 +0000 UTC FinishedAt: 2026-09-07 08:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 05:32:32 +0000 UTC FinishedAt: 2026-09-07 08:35:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fb61e36b-8d13-4fe5-a67f-90fc8278a3a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ac5abb8d-1493-4119-95f8-0c6006e44606,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,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-workflow5t98g/series-workflow5t98g-build-action-733355586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,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-workflow5t98g/series-workflow5t98g-build-action-4019108663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 05:32:32 +0000 UTC FinishedAt: 2026-09-07 05:32:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 05:32:32 +0000 UTC FinishedAt: 2026-09-07 05:32:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},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-workflow5t98g/series-workflow5t98g-convert-artifact-3296297628/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 05:32:32 +0000 UTC FinishedAt: 2026-09-07 05:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 05:32:32 +0000 UTC FinishedAt: 2026-09-07 05:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 05:32:33 +0000 UTC FinishedAt: 2026-09-07 05:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 05:32:43 +0000 UTC FinishedAt: 2026-09-07 08:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t98g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_recv_hdlc","nfc_llcp_recv_dm","nfc_llcp_rx_skb","nfc_llcp_recv","nfc_llcp_data_received"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_DIGITAL","NFC_SIM"],"series_id":"74cb49d2-c597-4d56-ae04-02da483eea00","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 05:32:43 +0000 UTC FinishedAt: 2026-09-07 08:35:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb61e36b-8d13-4fe5-a67f-90fc8278a3a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ac5abb8d-1493-4119-95f8-0c6006e44606,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-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-workflow5t98g/series-workflow5t98g-build-action-733355586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,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-workflow5t98g/series-workflow5t98g-build-action-4019108663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.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-workflow5t98g/series-workflow5t98g-convert-artifact-3296297628/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}