Name: series-workflowjskxq Phase: Succeeded StartedAt: 2026-07-11 08:47:32 +0000 UTC FinishedAt: 2026-07-11 13:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[0] Phase: Succeeded StartedAt: 2026-07-11 08:47:32 +0000 UTC FinishedAt: 2026-07-11 09:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 08:47:32 +0000 UTC FinishedAt: 2026-07-11 09:07:49 +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": "23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "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": "23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "0fafe5ef-0225-40d4-a24c-199fc2e4a2df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netconsole_skb_pool_init", "netconsole_skb_pool_flush", "refill_skbs", "netcons_skb_pop", "find_skb", "netpoll_send_udp", "netconsole_parser_cmdline", "enabled_store", "local_port_store", "remote_port_store", "remote_mac_store", "drop_netconsole_target", "alloc_param_target", "free_param_target", "__netpoll_setup", "netpoll_setup", "__netpoll_cleanup" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2xvY2FsX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX21hY19zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4NGRjYjk5ZWZiMmYxNDFkOGVkZWVkOGJmNDFmNTRmNGRkMDZjYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOTowNDowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGMxODEyYTk4MzY1Yjc4Li40OWIyMjQzYTIwYjJkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDE5IEBAIE1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TkVUREVWX0lOVEVSTkFMXCYjMzQ7KTtcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1x0XHQyNTZcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1x0XHRcdDEwMDBcbiBcbiYjNDM7LypcbiYjNDM7ICogU2l6aW5nIGZvciB0aGUgcGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKVxuJiM0MzsgKiB3aGVuIGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMgc28gbWVzc2FnZXMgc3RpbGwgZ2V0IG91dCB1bmRlclxuJiM0MzsgKiBtZW1vcnkgcHJlc3N1cmUuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1BWF9VRFBfQ0hVTktcdFx0XHQxNDYwXG4mIzQzOyNkZWZpbmUgTUFYX1NLQlNcdFx0XHQzMlxuJiM0MzsjZGVmaW5lIE1BWF9TS0JfU0laRVx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7XHRcdFx0XHRcdFxcXG4mIzQzO1x0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7XHRcdFx0XHRcdFxcXG4mIzQzO1x0IE1BWF9VRFBfQ0hVTkspXG4mIzQzO1xuIHN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTtcbiBtb2R1bGVfcGFyYW1fc3RyaW5nKG5ldGNvbnNvbGUsIGNvbmZpZywgTUFYX1BBUkFNX0xFTkdUSCwgMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcJiMzNDsgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXHUwMDNjdGd0LWlwXHUwMDNlL1t0Z3QtbWFjYWRkcl1cJiMzNDspO1xuQEAgLTE2MiwxNCAmIzQzOzE3NSwxOSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gICogQG5wOlx0XHRUaGUgbmV0cG9sbCBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFyZ2V0LlxuICAqXHRcdENvbnRhaW5zIHRoZSBvdGhlciB1c2Vyc3BhY2UgdmlzaWJsZSBwYXJhbWV0ZXJzOlxuICAqXHRcdGRldl9uYW1lXHQocmVhZC13cml0ZSlcbi0gKlx0XHRsb2NhbF9wb3J0XHQocmVhZC13cml0ZSlcbi0gKlx0XHRyZW1vdGVfcG9ydFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0bG9jYWxfaXBcdChyZWFkLXdyaXRlKVxuICAqXHRcdHJlbW90ZV9pcFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0bG9jYWxfbWFjXHQocmVhZC1vbmx5KVxuLSAqXHRcdHJlbW90ZV9tYWNcdChyZWFkLXdyaXRlKVxuJiM0MzsgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiYjNDM7ICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiYjNDM7ICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEBidWY6XHRUaGUgYnVmZmVyIHVzZWQgdG8gc2VuZCB0aGUgZnVsbCBtc2cgdG8gdGhlIG5ldHdvcmsgc3RhY2tcbiAgKiBAcmVzdW1lX3dxOlx0V29ya3F1ZXVlIHRvIHJlc3VtZSBkZWFjdGl2YXRlZCB0YXJnZXRcbiYjNDM7ICogQHNrYl9wb29sOlx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXG4mIzQzOyAqXHRcdGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGFcbiYjNDM7ICpcdFx0c3VjY2Vzc2Z1bCBuZXRwb2xsX3NldHVwKCkgLyBuZXRwb2xsX2NsZWFudXAoKSBwYWlyIG9uIEBucC5cbiYjNDM7ICogQHJlZmlsbF93cTpcdFdvcmsgaXRlbSB0aGF0IGFzeW5jaHJvbm91c2x5IHRvcHMgQHNrYl9wb29sIGJhY2sgdXAgdG9cbiYjNDM7ICpcdFx0TUFYX1NLQlMgYWZ0ZXIgZmluZF9za2IoKSBkcmFpbnMgYW4gZW50cnkuXG4gICovXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtMTkwLDExICYjNDM7MjA4LDE1IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHRib29sXHRcdFx0ZXh0ZW5kZWQ7XG4gXHRib29sXHRcdFx0cmVsZWFzZTtcbiBcdHN0cnVjdCBuZXRwb2xsXHRcdG5wO1xuJiM0MztcdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuJiM0MztcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuIFx0ICogTlVMIHRlcm1pbmF0b3Igc28gYSBmdWxsIE1BWF9QUklOVF9DSFVOSyBwYXlsb2FkIGlzIG5vdCB0cnVuY2F0ZWRcbiBcdCAqL1xuIFx0Y2hhclx0XHRcdGJ1ZltNQVhfUFJJTlRfQ0hVTksgJiM0MzsgMV07XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJlc3VtZV93cTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRza2JfcG9vbDtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJlZmlsbF93cTtcbiB9O1xuIFxuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuQEAgLTI5MiwxMSAmIzQzOzMxNCw1NiBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdG1lbXNldChcdTAwMjZudC1cdTAwM2VucC5kZXZfbmFtZSwgMCwgSUZOQU1TSVopO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sID0gXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2w7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbiYjNDM7XHRcdHNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcbiYjNDM7XG4mIzQzO1x0cmVmaWxsX3NrYnMobnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZWVkIHRoZSBwZXItdGFyZ2V0IHNrYiBwb29sIHRoYXQgZmluZF9za2IoKSBmYWxscyBiYWNrIHRvLiBUaGUgcXVldWVcbiYjNDM7ICogaGVhZCBhbmQgcmVmaWxsIHdvcmsgYXJlIHNldCB1cCBvbmNlIGluIGFsbG9jX2FuZF9pbml0KCk7IHRoaXMgb25seVxuJiM0MzsgKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHJlZmlsbF9za2JzKG50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EpO1xuJiM0MztcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XG4mIzQzO31cbiYjNDM7XG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG4gc3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiYjNDM7XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIG1ha2VzIG50LVx1MDAzZW5wLmRldlxuJiM0MztcdCAqIHZpc2libGUgdG8gdGFyZ2V0X2xpc3Qgd2Fsa2VycyAoZS5nLiBuZXRjb25zb2xlX25ldGRldl9ldmVudCksXG4mIzQzO1x0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcbiYjNDM7XHQgKiBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4mIzQzO1xuIFx0aWYgKG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApKSB7XG4gXHRcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzU4LDYgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlbnAuZGV2IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRuZXRjb25zX3JlbGVhc2VfZGV2KG50KTtcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiBcdH1cbkBAIC0zOTMsMTEgJiM0Mzs0NjEsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbiBcbiBcdG50LVx1MDAzZW5wLm5hbWUgPSBcJiMzNDtuZXRjb25zb2xlXCYjMzQ7O1xuIFx0c3Ryc2NweShudC1cdTAwM2VucC5kZXZfbmFtZSwgXCYjMzQ7ZXRoMFwmIzM0OywgSUZOQU1TSVopO1xuLVx0bnQtXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XG4tXHRudC1cdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlbnAucmVtb3RlX21hYyk7XG4mIzQzO1x0bnQtXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XG4mIzQzO1x0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuJiM0MztcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xuJiM0MztcdC8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovXG4mIzQzO1x0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbiBcbiBcdHJldHVybiBudDtcbiB9XG5AQCAtNDE3LDYgJiM0Mzs0ODgsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHtcbiBcdFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xuIFx0XHRXQVJOX09OX09OQ0UobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XG4gXHRcdC8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGhcbiBcdFx0ICogbG9ja3NcbkBAIC00MjksMjEgJiM0Mzs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuLVx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnAtXHUwMDNlbG9jYWxfcG9ydCk7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4mIzQzO1xuJiM0MztcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIHBvcnQgJWRcXG5cJiMzNDssIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnAtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XFxuXCYjMzQ7LCBucC1cdTAwM2VkZXZfbWFjKTtcbi1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBucC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4mIzQzO1x0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIHBvcnQgJWRcXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuLVx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCYjMzQ7LCBucC1cdTAwM2VyZW1vdGVfbWFjKTtcbiYjNDM7XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbiAvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbkBAIC01NjEsMTIgJiM0Mzs2MzUsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZW5wLmxvY2FsX3BvcnQpO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2Vsb2NhbF9wb3J0KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtNTk5LDcgJiM0Mzs2NzMsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcE1cXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5yZW1vdGVfbWFjKTtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwTVxcblwmIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC03NTYsMTEgJiM0Mzs4MzAsMjEgQEAgc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdCAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmVcbiBcdFx0ICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC5cbiBcdFx0ICovXG4tXHRcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKFx1MDAyNm50LVx1MDAzZW5wKTtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXG4mIzQzO1x0XHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUgdG9cbiYjNDM7XHRcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcbiYjNDM7XHRcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXG4mIzQzO1x0XHQgKiBzdGF0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiBcbiBcdFx0cmV0ID0gbmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCk7XG4tXHRcdGlmIChyZXQpXG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9FTkFCTEVEO1xuIFx0XHRwcl9pbmZvKFwmIzM0O25ldHdvcmsgbG9nZ2luZyBzdGFydGVkXFxuXCYjMzQ7KTtcbkBAIC04ODUsNyAmIzQzOzk2OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcdTAwMjZudC1cdTAwM2VucC5sb2NhbF9wb3J0KTtcbiYjNDM7XHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRyZXQgPSBjb3VudDtcbkBAIC05MDcsNyAmIzQzOzk5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcbiYjNDM7XHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0cmV0ID0gY291bnQ7XG5AQCAtOTk0LDcgJiM0MzsxMDc4LDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0aWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSBcdTAwMjZcdTAwMjYgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICYjMzk7XFxuJiMzOTspXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdG1lbWNweShudC1cdTAwM2VucC5yZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XG4mIzQzO1x0bWVtY3B5KG50LVx1MDAzZXJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTQ4MSwxNSAmIzQzOzE1NjUsMTUgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdC8qIEEgU1RBVEVfREVBQ1RJVkFURUQgdGFyZ2V0IG1heSBoYXZlIGJlZW4gbW92ZWQgdG9cbi1cdCAqIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKSBidXQgbm90IHlldFxuLVx0ICogcHJvY2Vzc2VkIGJ5IG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKCkuIFVubGlua2luZyBpdCBiZWxvd1xuLVx0ICogaGlkZXMgaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBoYXMgdG8gY2xlYW4gaXQgdXBcbi1cdCAqIGl0c2VsZi4gUmVjb3JkIHRoYXQgdGhlIHRhcmdldCBzdGlsbCBvd25zIGEgbmV0cG9sbCBiZWZvcmUgdGhlXG4tXHQgKiBzdGF0ZSBpcyBkb3duZ3JhZGVkLlxuJiM0MztcdC8qIEEgdGFyZ2V0IG1vdmVkIHRvIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKVxuJiM0MztcdCAqIGJ1dCBub3QgeWV0IHByb2Nlc3NlZCBzdGlsbCBvd25zIGEgbmV0cG9sbDsgdW5saW5raW5nIGl0IGJlbG93IGhpZGVzXG4mIzQzO1x0ICogaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBtdXN0IHRlYXIgaXQgZG93biBpdHNlbGYuXG4mIzQzO1x0ICogVGhpcyBjb3ZlcnMgTkVUREVWX1VOUkVHSVNURVIgKFNUQVRFX0RFQUNUSVZBVEVEKSBhbmRcbiYjNDM7XHQgKiBORVRERVZfUkVMRUFTRSAvIE5FVERFVl9KT0lOIChTVEFURV9ESVNBQkxFRCk7IGtleSBvZmYgbnQtXHUwMDNlbnAuZGV2LFxuJiM0MztcdCAqIHdoaWNoIHN0YXlzIHNldCB1bnRpbCB0aGUgbmV0cG9sbCBpcyBjbGVhbmVkIHVwLlxuIFx0ICovXG4gXHRuZWVkc19jbGVhbnVwID0gbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCB8fFxuLVx0XHRcdG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEO1xuJiM0MztcdFx0XHRudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERUFDVElWQVRFRCB8fCBudC1cdTAwM2VucC5kZXY7XG4gXHQvKiBEaXNhYmxlIGRlYWN0aXZhdGVkIHRhcmdldCB0byBwcmV2ZW50IHJhY2VzIGJldHdlZW4gcmVzdW1lIGF0dGVtcHRcbiBcdCAqIGFuZCB0YXJnZXQgcmVtb3ZhbC5cbiBcdCAqL1xuQEAgLTE1MTQsOCAmIzQzOzE1OTgsMTAgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdCAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtXHUwMDNlZGV2IGlzIE5VTEwpLCBzb1xuIFx0ICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi5cbiBcdCAqL1xuLVx0aWYgKG5lZWRzX2NsZWFudXApXG4mIzQzO1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuJiM0MztcdH1cbiBcbiBcdGNvbmZpZ19pdGVtX3B1dChcdTAwMjZudC1cdTAwM2Vncm91cC5jZ19pdGVtKTtcbiB9XG5AQCAtMTcwNiw3ICYjNDM7MTc5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzE4LDE5ICYjNDM7MTgwNCwyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4gXHRcdGlmICghaW5fbm1pKCkpXG4gXHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7bmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLFxuLVx0XHRcdFx0XHQgICAgIG5wLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgbnQtXHUwMDNlbnAuZGV2LVx1MDAzZW5hbWUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sKTtcbiYjNDM7XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4mIzQzO1x0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSk7XG4gXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbiYjNDM7XHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRpbnQgY291bnQgPSAwO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzM5LDcgJiM0MzsxODI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxuIFxuIFx0c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIXNrYilcbi1cdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG5wLCBsZW4pO1xuJiM0MztcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCYjNDM7JiM0Mztjb3VudCBcdTAwM2MgMTApIHtcbkBAIC0xNzc5LDggJiM0MzsxODY3LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgdWRwaGRyICp1ZHBoO1xuIFx0aW50IHVkcF9sZW47XG4gXG5AQCAtMTc5MCwyMSAmIzQzOzE4NzksMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuJiM0MztcdHVkcGgtXHUwMDNlc291cmNlID0gaHRvbnMobnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4mIzQzO1x0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0dWRwaC1cdTAwM2VsZW4gPSBodG9ucyh1ZHBfbGVuKTtcbiBcbiBcdG5ldHBvbGxfdWRwX2NoZWNrc3VtKG5wLCBza2IsIGxlbik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4gXG4gXHRldGggPSBza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG5wLVx1MDAzZXJlbW90ZV9tYWMpO1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0ZWxzZVxuQEAgLTE4NjEsOCAmIzQzOzE5NTEsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4mIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4mIzQzO1x0XHRcdCAgICBpbnQgbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICYjNDM7MTk2OSw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBcbiBcdHRvdGFsX2xlbiA9IGlwX2xlbiAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShucC1cdTAwM2VkZXYpO1xuIFxuLVx0c2tiID0gZmluZF9za2IobnAsIHRvdGFsX2xlbiAmIzQzOyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuJiM0MztcdHNrYiA9IGZpbmRfc2tiKG50LCB0b3RhbF9sZW4gJiM0MzsgbnAtXHUwMDNlZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbSxcbiBcdFx0ICAgICAgIHRvdGFsX2xlbiAtIGxlbik7XG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTg4NSwxMiAmIzQzOzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4mIzQzO1x0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG5wLCBza2IsIGxlbik7XG4tXHRwdXNoX2V0aChucCwgc2tiKTtcbiYjNDM7XHRwdXNoX2V0aChudCwgc2tiKTtcbiBcdHNrYi1cdTAwM2VkZXYgPSBucC1cdTAwM2VkZXY7XG4gXG4gXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xuQEAgLTE5MDgsNyAmIzQzOzIwMDAsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4mIzQzO1x0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG4gXHRcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xuQEAgLTIyMDMsOCAmIzQzOzIyOTUsOSBAQCBfX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuJiM0MztzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xuIFx0Y2hhciAqY3VyID0gb3B0O1xuIFx0Y2hhciAqZGVsaW07XG5AQCAtMjIxNSw3ICYjNDM7MjMwOCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0aWYgKCFkZWxpbSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0KmRlbGltID0gMDtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9wb3J0KSlcbiYjNDM7XHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyAmIzQzOzIzNTUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdCpkZWxpbSA9IDA7XG4gXHRcdGlmICgqY3VyID09ICYjMzk7ICYjMzk7IHx8ICpjdXIgPT0gJiMzOTtcXHQmIzM5OylcbiBcdFx0XHRucF9pbmZvKG5wLCBcJiMzNDt3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4mIzQzO1x0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0Y3VyID0gZGVsaW07XG4gXHR9XG5AQCAtMjI4NCwxMSAmIzQzOzIzNzcsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4mIzQzO1x0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnQtXHUwMDNlcmVtb3RlX21hYykpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHR9XG4gXG4tXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7XG4mIzQzO1x0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMyNiwxNCAmIzQzOzI0MTksMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbiYjNDM7XHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZmFpbDtcbiBcbiYjNDM7XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXG4mIzQzO1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuJiM0MztcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxuJiM0MztcdCAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiYjNDM7XG4gXHRlcnIgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwmIzM0OyxcbiBcdFx0ICAgICAgIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCwgY21kbGluZV9jb3VudCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuIFx0XHRcdC8qIG9ubHkgZmFpbCBpZiBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBpcyBzZXQsXG4gXHRcdFx0ICogb3RoZXJ3aXNlLCBrZWVwIHRoZSB0YXJnZXQgaW4gdGhlIGxpc3QsIGJ1dCBkaXNhYmxlZC5cbkBAIC0yMzU1LDYgJiM0MzsyNDU2LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpXG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5AQCAtMjEsMjAgJiM0MzsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwmIzM5O3MgcHJlYWxsb2NhdGVkIHNrYiBwb29sIGNhbiBjYXJyeS4gS2VlcCB0aGlzIGluXG4tICogc3luYyB3aXRoIHRoZSBidWZmZXIgc2l6ZSB1c2VkIGJ5IHJlZmlsbF9za2JzKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jO1xuLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXJcbi0gKiBzYXRpc2Z5IGFuZCBhdm9pZCBkZXF1ZXVpbmcgYSBwb29sZWQgc2tiIHRoYXQgd291bGQgbGF0ZXIgdHJpcFxuLSAqIHNrYl9vdmVyX3BhbmljKCkgaW4gc2tiX3B1dCgpLlxuLSAqL1xuLSNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0MTQ2MFxuLSNkZWZpbmUgTUFYX1NLQl9TSVpFXHRcdFx0XHRcdFx0XFxcbi1cdChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgTUFYX1VEUF9DSFVOSylcbi1cbiBzdHJ1Y3QgbmV0cG9sbCB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG5AQCAtNDksMTAgJiM0MzszNSw2IEBAIHN0cnVjdCBuZXRwb2xsIHtcbiBcbiBcdHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0Ym9vbCBpcHY2O1xuLVx0dTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLVx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTtcbiB9O1xuIFxuICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuY1xuaW5kZXggYWVkNDE1ZDNjZDc0ZmYuLmY4ZGExMDQ4ZWEzYWIwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zNiwxMiAmIzQzOzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiAmIzQzOzIwNyw2IEBAIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHR1cChcdTAwMjZuaS1cdTAwM2VkZXZfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHRza2JfcG9vbCA9IFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbi1cdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4tXHRcdGlmICghc2tiKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTtcbi1cdH1cbi19XG4tXG4gdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC0zNTEsMzIgJiM0MzszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG4gXG4tc3RhdGljIHZvaWQgc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVxuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZucC1cdTAwM2VyZWZpbGxfd3EpO1xuLVx0c2tiX3Bvb2wgPSBcdTAwMjZucC1cdTAwM2Vza2JfcG9vbDtcbi1cdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IG5ldHBvbGwgKm5wID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpO1xuLVxuLVx0cmVmaWxsX3NrYnMobnApO1xuLX1cbi1cbiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4tXHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuLVxuIFx0aWYgKG5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xuIFx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXG5cJiMzNDssXG4gXHRcdCAgICAgICBuZGV2LVx1MDAzZW5hbWUpO1xuQEAgLTQxMSw5ICYjNDM7MzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgJiM0Mzs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBmbHVzaDtcbiYjNDM7XHRcdGdvdG8gcHV0O1xuIFx0cnRubF91bmxvY2soKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXHUwMDNlbnBpbmZvXG5AQCAtNjE0LDggJiM0Mzs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjU5LDggJiM0Mzs2MTIsNiBAQCBzdGF0aWMgdm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bnBpbmZvLVx1MDAzZXR4X3dvcmspO1xuIFx0XHRjYWxsX3JjdShcdTAwMjZucGluZm8tXHUwMDNlcmN1LCByY3VfY2xlYW51cF9uZXRwb2xsX2luZm8pO1xuIFx0fVxuLVxuLVx0c2tiX3Bvb2xfZmx1c2gobnApO1xuIH1cbiBcbiB2b2lkIF9fbmV0cG9sbF9mcmVlKHN0cnVjdCBuZXRwb2xsICpucClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoJiMzNDssCiAgICAmIzM0O3JlZmlsbF9za2JzJiMzNDssCiAgICAmIzM0O25ldGNvbnNfc2tiX3BvcCYjMzQ7LAogICAgJiMzNDtmaW5kX3NrYiYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9wb3J0X3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9wb3J0X3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9tYWNfc3RvcmUmIzM0OywKICAgICYjMzQ7ZHJvcF9uZXRjb25zb2xlX3RhcmdldCYjMzQ7LAogICAgJiMzNDthbGxvY19wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7ZnJlZV9wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBuZXRjb25zb2xlIGFuZCBuZXRwb2xsIGNvZGUgYnkgbW92aW5nIHRoZSBmYWxsYmFjayBza2IgcG9vbCBhbmQgdGFyZ2V0IHBhcmFtZXRlcnMgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGNoYW5nZXMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgc2tiIHBvb2wgYW5kIHRoZSB0YXJnZXQgcGFyYW1ldGVycywgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCBmbHVzaCB0aGUgc2tiIHBvb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4NGRjYjk5ZWZiMmYxNDFkOGVkZWVkOGJmNDFmNTRmNGRkMDZjYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAwOTowNDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCBjMTgxMmE5ODM2NWI3OC4uNDliMjI0M2EyMGIyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTYxLDYgJiM0Mzs2MSwxOSBAQCBNT0RVTEVfSU1QT1JUX05TKCYjMzQ7TkVUREVWX0lOVEVSTkFMJiMzNDspOwogI2RlZmluZSBNQVhfVVNFUkRBVEFfSVRFTVMJCTI1NgogI2RlZmluZSBNQVhfUFJJTlRfQ0hVTksJCQkxMDAwCiAKJiM0MzsvKgomIzQzOyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkKJiM0MzsgKiB3aGVuIGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMgc28gbWVzc2FnZXMgc3RpbGwgZ2V0IG91dCB1bmRlcgomIzQzOyAqIG1lbW9yeSBwcmVzc3VyZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1BWF9VRFBfQ0hVTksJCQkxNDYwCiYjNDM7I2RlZmluZSBNQVhfU0tCUwkJCTMyCiYjNDM7I2RlZmluZSBNQVhfU0tCX1NJWkUJCQkJCQkJXAomIzQzOwkoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7CQkJCQlcCiYjNDM7CSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOwkJCQkJCVwKJiM0MzsJIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOwkJCQkJXAomIzQzOwkgTUFYX1VEUF9DSFVOSykKJiM0MzsKIHN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0Y29uc29sZSwgJiMzNDsgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AJmx0O3RndC1pcCZndDsvW3RndC1tYWNhZGRyXSYjMzQ7KTsKQEAgLTE2MiwxNCAmIzQzOzE3NSwxOSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAgKiBAbnA6CQlUaGUgbmV0cG9sbCBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFyZ2V0LgogICoJCUNvbnRhaW5zIHRoZSBvdGhlciB1c2Vyc3BhY2UgdmlzaWJsZSBwYXJhbWV0ZXJzOgogICoJCWRldl9uYW1lCShyZWFkLXdyaXRlKQotICoJCWxvY2FsX3BvcnQJKHJlYWQtd3JpdGUpCi0gKgkJcmVtb3RlX3BvcnQJKHJlYWQtd3JpdGUpCiAgKgkJbG9jYWxfaXAJKHJlYWQtd3JpdGUpCiAgKgkJcmVtb3RlX2lwCShyZWFkLXdyaXRlKQogICoJCWxvY2FsX21hYwkocmVhZC1vbmx5KQotICoJCXJlbW90ZV9tYWMJKHJlYWQtd3JpdGUpCiYjNDM7ICogQGxvY2FsX3BvcnQ6CVNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KJiM0MzsgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgomIzQzOyAqIEByZW1vdGVfbWFjOglEZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQGJ1ZjoJVGhlIGJ1ZmZlciB1c2VkIHRvIHNlbmQgdGhlIGZ1bGwgbXNnIHRvIHRoZSBuZXR3b3JrIHN0YWNrCiAgKiBAcmVzdW1lX3dxOglXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldAomIzQzOyAqIEBza2JfcG9vbDoJUGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuCiYjNDM7ICoJCWl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGEKJiM0MzsgKgkJc3VjY2Vzc2Z1bCBuZXRwb2xsX3NldHVwKCkgLyBuZXRwb2xsX2NsZWFudXAoKSBwYWlyIG9uIEBucC4KJiM0MzsgKiBAcmVmaWxsX3dxOglXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvCiYjNDM7ICoJCU1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LgogICovCiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTE5MCwxMSAmIzQzOzIwOCwxNSBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogCWJvb2wJCQlleHRlbmRlZDsKIAlib29sCQkJcmVsZWFzZTsKIAlzdHJ1Y3QgbmV0cG9sbAkJbnA7CiYjNDM7CXUxNgkJCWxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwomIzQzOwl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCiAJICogTlVMIHRlcm1pbmF0b3Igc28gYSBmdWxsIE1BWF9QUklOVF9DSFVOSyBwYXlsb2FkIGlzIG5vdCB0cnVuY2F0ZWQKIAkgKi8KIAljaGFyCQkJYnVmW01BWF9QUklOVF9DSFVOSyAmIzQzOyAxXTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVzdW1lX3dxOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNrYl9wb29sOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVmaWxsX3dxOwogfTsKIAogI2lmZGVmCUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKQEAgLTI5MiwxMSAmIzQzOzMxNCw1NiBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCW1lbXNldCgmYW1wO250LSZndDtucC5kZXZfbmFtZSwgMCwgSUZOQU1TSVopOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sID0gJmFtcDtudC0mZ3Q7c2tiX3Bvb2w7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CXdoaWxlIChSRUFEX09OQ0Uoc2tiX3Bvb2wtJmd0O3FsZW4pICZsdDsgTUFYX1NLQlMpIHsKJiM0MzsJCXNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZWZpbGxfd3EpOwomIzQzOwomIzQzOwlyZWZpbGxfc2ticyhudCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZQomIzQzOyAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHkKJiM0MzsgKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlyZWZpbGxfc2ticyhudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxKTsKJiM0MzsJc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbigmYW1wO250LSZndDtza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTsKJiM0Mzt9CiYjNDM7CiAvKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi8KIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJLyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC0mZ3Q7bnAuZGV2CiYjNDM7CSAqIHZpc2libGUgdG8gdGFyZ2V0X2xpc3Qgd2Fsa2VycyAoZS5nLiBuZXRjb25zb2xlX25ldGRldl9ldmVudCksCiYjNDM7CSAqIHdoaWNoIG90aGVyd2lzZSBtYXkgbW92ZSB0aGUgdGFyZ2V0IHRvIHRoZSBjbGVhbnVwIGxpc3QgYW5kCiYjNDM7CSAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwluZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpOwomIzQzOwogCWlmIChuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKSkgewogCQkvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovCiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJbnQtJmd0O3N0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CkBAIC0zNTgsNiAmIzQzOzQyNSw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcnRubF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEICZhbXA7JmFtcDsgbnQtJmd0O25wLmRldiAmYW1wOyZhbXA7CiAJICAgIG50LSZndDtucC5kZXYtJmd0O3JlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgewomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldGNvbnNfcmVsZWFzZV9kZXYobnQpOwogCQludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAl9CkBAIC0zOTMsMTEgJiM0Mzs0NjEsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZCkKIAogCW50LSZndDtucC5uYW1lID0gJiMzNDtuZXRjb25zb2xlJiMzNDs7CiAJc3Ryc2NweShudC0mZ3Q7bnAuZGV2X25hbWUsICYjMzQ7ZXRoMCYjMzQ7LCBJRk5BTVNJWik7Ci0JbnQtJmd0O25wLmxvY2FsX3BvcnQgPSA2NjY1OwotCW50LSZndDtucC5yZW1vdGVfcG9ydCA9IDY2NjY7Ci0JZXRoX2Jyb2FkY2FzdF9hZGRyKG50LSZndDtucC5yZW1vdGVfbWFjKTsKJiM0MzsJbnQtJmd0O2xvY2FsX3BvcnQgPSA2NjY1OwomIzQzOwludC0mZ3Q7cmVtb3RlX3BvcnQgPSA2NjY2OwomIzQzOwlldGhfYnJvYWRjYXN0X2FkZHIobnQtJmd0O3JlbW90ZV9tYWMpOwogCW50LSZndDtzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEOwogCUlOSVRfV09SSygmYW1wO250LSZndDtyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7CiYjNDM7CS8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovCiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtudC0mZ3Q7c2tiX3Bvb2wpOwomIzQzOwlJTklUX1dPUksoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpOwogCiAJcmV0dXJuIG50OwogfQpAQCAtNDE3LDYgJiM0Mzs0ODgsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCAmYW1wO3RhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHsKIAkJLyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqLwogCQlXQVJOX09OX09OQ0UobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpOwomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldGNvbnNfcmVsZWFzZV9kZXYobnQpOwogCQkvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoCiAJCSAqIGxvY2tzCkBAIC00MjksMjEgJiM0Mzs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZCkKIAltdXRleF91bmxvY2soJmFtcDt0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApCiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKLQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBucC0mZ3Q7bG9jYWxfcG9ydCk7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwomIzQzOwomIzQzOwlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7bG9jYWxfcG9ydCk7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnAtJmd0O2xvY2FsX2lwLmluNik7CiAJZWxzZQogCQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtucC0mZ3Q7bG9jYWxfaXAuaXApOwogCW5wX2luZm8obnAsICYjMzQ7aW50ZXJmYWNlIG5hbWUgJiMzOTslcyYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9uYW1lKTsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xuJiMzNDssIG5wLSZndDtkZXZfbWFjKTsKLQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBwb3J0ICVkXG4mIzM0OywgbnAtJmd0O3JlbW90ZV9wb3J0KTsKJiM0MzsJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgcG9ydCAlZFxuJiMzNDssIG50LSZndDtyZW1vdGVfcG9ydCk7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO25wLSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtucC0mZ3Q7cmVtb3RlX2lwLmlwKTsKLQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG5wLSZndDtyZW1vdGVfbWFjKTsKJiM0MzsJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX21hYyk7CiB9CiAKIC8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCB1bmlvbi4gUmV0dXJuIDAgaWYgSVB2NCBpcwpAQCAtNTYxLDEyICYjNDM7NjM1LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiAKIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O25wLmxvY2FsX3BvcnQpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O2xvY2FsX3BvcnQpOwogfQogCiBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7bnAucmVtb3RlX3BvcnQpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O3JlbW90ZV9wb3J0KTsKIH0KIAogc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKQEAgLTU5OSw3ICYjNDM7NjczLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBNXG4mIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLSZndDtucC5yZW1vdGVfbWFjKTsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwTVxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7cmVtb3RlX21hYyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtNzU2LDExICYjNDM7ODMwLDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAogCQkgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlCiAJCSAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuCiAJCSAqLwotCQluZXRjb25zb2xlX3ByaW50X2Jhbm5lcigmYW1wO250LSZndDtucCk7CiYjNDM7CQluZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7CiYjNDM7CiYjNDM7CQkvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sCiYjNDM7CQkgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LSZndDtucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvCiYjNDM7CQkgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkCiYjNDM7CQkgKiBvdGhlcndpc2UgY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZAomIzQzOwkJICogc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7CiAKIAkJcmV0ID0gbmV0cG9sbF9zZXR1cCgmYW1wO250LSZndDtucCk7Ci0JCWlmIChyZXQpCiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiAKIAkJbnQtJmd0O3N0YXRlID0gU1RBVEVfRU5BQkxFRDsKIAkJcHJfaW5mbygmIzM0O25ldHdvcmsgbG9nZ2luZyBzdGFydGVkXG4mIzM0Oyk7CkBAIC04ODUsNyAmIzQzOzk2OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgJmFtcDtudC0mZ3Q7bnAubG9jYWxfcG9ydCk7CiYjNDM7CXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtsb2NhbF9wb3J0KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCXJldCA9IGNvdW50OwpAQCAtOTA3LDcgJiM0Mzs5OTEsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgJmFtcDtudC0mZ3Q7bnAucmVtb3RlX3BvcnQpOwomIzQzOwlyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgJmFtcDtudC0mZ3Q7cmVtb3RlX3BvcnQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmV0ID0gY291bnQ7CkBAIC05OTQsNyAmIzQzOzEwNzgsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAmYW1wOyZhbXA7IGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAhPSAmIzM5O1xuJiMzOTspCiAJCWdvdG8gb3V0X3VubG9jazsKLQltZW1jcHkobnQtJmd0O25wLnJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTsKJiM0MzsJbWVtY3B5KG50LSZndDtyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0xNDgxLDE1ICYjNDM7MTU2NSwxNSBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCiAJbXV0ZXhfbG9jaygmYW1wO3RhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JLyogQSBTVEFURV9ERUFDVElWQVRFRCB0YXJnZXQgbWF5IGhhdmUgYmVlbiBtb3ZlZCB0bwotCSAqIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKSBidXQgbm90IHlldAotCSAqIHByb2Nlc3NlZCBieSBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSgpLiBVbmxpbmtpbmcgaXQgYmVsb3cKLQkgKiBoaWRlcyBpdCBmcm9tIHRoZSBjbGVhbnVwIHdvcmtlciwgc28gdGhpcyBwYXRoIGhhcyB0byBjbGVhbiBpdCB1cAotCSAqIGl0c2VsZi4gUmVjb3JkIHRoYXQgdGhlIHRhcmdldCBzdGlsbCBvd25zIGEgbmV0cG9sbCBiZWZvcmUgdGhlCi0JICogc3RhdGUgaXMgZG93bmdyYWRlZC4KJiM0MzsJLyogQSB0YXJnZXQgbW92ZWQgdG8gdGFyZ2V0X2NsZWFudXBfbGlzdCBieSBuZXRjb25zb2xlX25ldGRldl9ldmVudCgpCiYjNDM7CSAqIGJ1dCBub3QgeWV0IHByb2Nlc3NlZCBzdGlsbCBvd25zIGEgbmV0cG9sbDsgdW5saW5raW5nIGl0IGJlbG93IGhpZGVzCiYjNDM7CSAqIGl0IGZyb20gdGhlIGNsZWFudXAgd29ya2VyLCBzbyB0aGlzIHBhdGggbXVzdCB0ZWFyIGl0IGRvd24gaXRzZWxmLgomIzQzOwkgKiBUaGlzIGNvdmVycyBORVRERVZfVU5SRUdJU1RFUiAoU1RBVEVfREVBQ1RJVkFURUQpIGFuZAomIzQzOwkgKiBORVRERVZfUkVMRUFTRSAvIE5FVERFVl9KT0lOIChTVEFURV9ESVNBQkxFRCk7IGtleSBvZmYgbnQtJmd0O25wLmRldiwKJiM0MzsJICogd2hpY2ggc3RheXMgc2V0IHVudGlsIHRoZSBuZXRwb2xsIGlzIGNsZWFuZWQgdXAuCiAJICovCiAJbmVlZHNfY2xlYW51cCA9IG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIHx8Ci0JCQludC0mZ3Q7c3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQ7CiYjNDM7CQkJbnQtJmd0O3N0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEIHx8IG50LSZndDtucC5kZXY7CiAJLyogRGlzYWJsZSBkZWFjdGl2YXRlZCB0YXJnZXQgdG8gcHJldmVudCByYWNlcyBiZXR3ZWVuIHJlc3VtZSBhdHRlbXB0CiAJICogYW5kIHRhcmdldCByZW1vdmFsLgogCSAqLwpAQCAtMTUxNCw4ICYjNDM7MTU5OCwxMCBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCSAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtJmd0O2RldiBpcyBOVUxMKSwgc28KIAkgKiBpdCBpcyBzYWZlIGV2ZW4gaWYgdGhlIGNsZWFudXAgd29ya2VyIGFscmVhZHkgdG9yZSB0aGUgbmV0cG9sbCBkb3duLgogCSAqLwotCWlmIChuZWVkc19jbGVhbnVwKQomIzQzOwlpZiAobmVlZHNfY2xlYW51cCkgewomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiYjNDM7CX0KIAogCWNvbmZpZ19pdGVtX3B1dCgmYW1wO250LSZndDtncm91cC5jZ19pdGVtKTsKIH0KQEAgLTE3MDYsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0gewogICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkCiAgKiBmcm9tIE5NSSBjb250ZXh0OyB0aGUgbmV4dCBub24tTk1JIGNhbGxlciB3aWxsIHRvcCB0aGUgcG9vbCBiYWNrIHVwLgogICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pCiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC0xNzE4LDE5ICYjNDM7MTgwNCwyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pCiAJCWlmICghaW5fbm1pKCkpCiAJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgmIzM0O25ldGNvbnNvbGU6IGRyb3BwaW5nIG1lc3NhZ2UsIHJlcXVlc3RlZCBza2IgbGVuICVkIGV4Y2VlZHMgcG9vbCBidWZmZXIgc2l6ZSAlenUgb24gJXNcbiYjMzQ7LAogCQkJCQkgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsCi0JCQkJCSAgICAgbnAtJmd0O2Rldi0mZ3Q7bmFtZSk7CiYjNDM7CQkJCQkgICAgIG50LSZndDtucC5kZXYtJmd0O25hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlza2IgPSBza2JfZGVxdWV1ZSgmYW1wO25wLSZndDtza2JfcG9vbCk7CiYjNDM7CXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7bnQtJmd0O3NrYl9wb29sKTsKIAlpZiAoIWluX25taSgpKQotCQlzY2hlZHVsZV93b3JrKCZhbXA7bnAtJmd0O3JlZmlsbF93cSk7CiYjNDM7CQlzY2hlZHVsZV93b3JrKCZhbXA7bnQtJmd0O3JlZmlsbF93cSk7CiAKIAlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpCiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLAomIzQzOwkJCQlpbnQgcmVzZXJ2ZSkKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJaW50IGNvdW50ID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC0xNzM5LDcgJiM0MzsxODI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKQogCiAJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFza2IpCi0JCXNrYiA9IG5ldGNvbnNfc2tiX3BvcChucCwgbGVuKTsKJiM0MzsJCXNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTsKIAogCWlmICghc2tiKSB7CiAJCWlmICgmIzQzOyYjNDM7Y291bnQgJmx0OyAxMCkgewpAQCAtMTc3OSw4ICYjNDM7MTg2Nyw5IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdWRwaC0mZ3Q7Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKIH0KIAotc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQomIzQzO3N0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiB7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCXN0cnVjdCB1ZHBoZHIgKnVkcGg7CiAJaW50IHVkcF9sZW47CiAKQEAgLTE3OTAsMjEgJiM0MzsxODc5LDIyIEBAIHN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJdWRwaCA9IHVkcF9oZHIoc2tiKTsKLQl1ZHBoLSZndDtzb3VyY2UgPSBodG9ucyhucC0mZ3Q7bG9jYWxfcG9ydCk7Ci0JdWRwaC0mZ3Q7ZGVzdCA9IGh0b25zKG5wLSZndDtyZW1vdGVfcG9ydCk7CiYjNDM7CXVkcGgtJmd0O3NvdXJjZSA9IGh0b25zKG50LSZndDtsb2NhbF9wb3J0KTsKJiM0MzsJdWRwaC0mZ3Q7ZGVzdCA9IGh0b25zKG50LSZndDtyZW1vdGVfcG9ydCk7CiAJdWRwaC0mZ3Q7bGVuID0gaHRvbnModWRwX2xlbik7CiAKIAluZXRwb2xsX3VkcF9jaGVja3N1bShucCwgc2tiLCBsZW4pOwogfQogCi1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCiAJZXRoID0gc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX3NvdXJjZSwgbnAtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwotCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfZGVzdCwgbnAtJmd0O3JlbW90ZV9tYWMpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG50LSZndDtyZW1vdGVfbWFjKTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCWVsc2UKQEAgLTE4NjEsOCAmIzQzOzE5NTEsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIAlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7CiB9CiAKLXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKJiM0MztzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAomIzQzOwkJCSAgICBpbnQgbGVuKQogewomIzQzOwlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAlpbnQgdG90YWxfbGVuLCBpcF9sZW4sIHVkcF9sZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTg3Nyw3ICYjNDM7MTk2OSw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIAogCXRvdGFsX2xlbiA9IGlwX2xlbiAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShucC0mZ3Q7ZGV2KTsKIAotCXNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gJiM0MzsgbnAtJmd0O2Rldi0mZ3Q7bmVlZGVkX3RhaWxyb29tLAomIzQzOwlza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICYjNDM7IG5wLSZndDtkZXYtJmd0O25lZWRlZF90YWlscm9vbSwKIAkJICAgICAgIHRvdGFsX2xlbiAtIGxlbik7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTg4NSwxMiAmIzQzOzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbXNnLCBsZW4pOwogCXNrYl9wdXQoc2tiLCBsZW4pOwogCi0JcHVzaF91ZHAobnAsIHNrYiwgbGVuKTsKJiM0MzsJcHVzaF91ZHAobnQsIHNrYiwgbGVuKTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCXB1c2hfaXB2NihucCwgc2tiLCBsZW4pOwogCWVsc2UKIAkJcHVzaF9pcHY0KG5wLCBza2IsIGxlbik7Ci0JcHVzaF9ldGgobnAsIHNrYik7CiYjNDM7CXB1c2hfZXRoKG50LCBza2IpOwogCXNrYi0mZ3Q7ZGV2ID0gbnAtJmd0O2RldjsKIAogCXJldHVybiAoaW50KW5ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7CkBAIC0xOTA4LDcgJiM0MzsyMDAwLDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogICovCiBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiB7Ci0JaW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAoJmFtcDtudC0mZ3Q7bnAsIG1zZywgbGVuKTsKJiM0MzsJaW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7CiAJCWlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkgewpAQCAtMjIwMyw4ICYjNDM7MjI5NSw5IEBAIF9fcmVsZWFzZXMoJmFtcDt0YXJnZXRfbGlzdF9sb2NrKQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdCkKJiM0MztzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogewomIzQzOwlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAlib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTsKIAljaGFyICpjdXIgPSBvcHQ7CiAJY2hhciAqZGVsaW07CkBAIC0yMjE1LDcgJiM0MzsyMzA4LDcgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KQogCQlpZiAoIWRlbGltKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCSpkZWxpbSA9IDA7Ci0JCWlmIChrc3RydG91MTYoY3VyLCAxMCwgJmFtcDtucC0mZ3Q7bG9jYWxfcG9ydCkpCiYjNDM7CQlpZiAoa3N0cnRvdTE2KGN1ciwgMTAsICZhbXA7bnQtJmd0O2xvY2FsX3BvcnQpKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCWN1ciA9IGRlbGltOwogCX0KQEAgLTIyNjIsNyAmIzQzOzIzNTUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpCiAJCSpkZWxpbSA9IDA7CiAJCWlmICgqY3VyID09ICYjMzk7ICYjMzk7IHx8ICpjdXIgPT0gJiMzOTtcdCYjMzk7KQogCQkJbnBfaW5mbyhucCwgJiMzNDt3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7Ci0JCWlmIChrc3RydG91MTYoY3VyLCAxMCwgJmFtcDtucC0mZ3Q7cmVtb3RlX3BvcnQpKQomIzQzOwkJaWYgKGtzdHJ0b3UxNihjdXIsIDEwLCAmYW1wO250LSZndDtyZW1vdGVfcG9ydCkpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJY3VyID0gZGVsaW07CiAJfQpAQCAtMjI4NCwxMSAmIzQzOzIzNzcsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KQogCiAJaWYgKCpjdXIgIT0gMCkgewogCQkvKiBNQUMgYWRkcmVzcyAqLwotCQlpZiAoIW1hY19wdG9uKGN1ciwgbnAtJmd0O3JlbW90ZV9tYWMpKQomIzQzOwkJaWYgKCFtYWNfcHRvbihjdXIsIG50LSZndDtyZW1vdGVfbWFjKSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCX0KIAotCW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTsKJiM0MzsJbmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTIzMjYsMTQgJiM0MzsyNDE5LDIyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLAogCX0KIAogCS8qIFBhcnNlIHBhcmFtZXRlcnMgYW5kIHNldHVwIG5ldHBvbGwgKi8KLQllcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCZhbXA7bnQtJmd0O25wLCB0YXJnZXRfY29uZmlnKTsKJiM0MzsJZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShudCwgdGFyZ2V0X2NvbmZpZyk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwogCiYjNDM7CS8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2wgaXMKJiM0MzsJICogdmFsaWQgYXMgc29vbiBhcyBudC0mZ3Q7bnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3QKJiM0MzsJICogeWV0IG9uIHRhcmdldF9saXN0LCBzbyBhIG5ldGRldiBldmVudCBjYW5ub3QgcmVhY2ggaXQgaGVyZSwgYnV0CiYjNDM7CSAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuCiYjNDM7CSAqLwomIzQzOwluZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpOwomIzQzOwogCWVyciA9IG5ldHBvbGxfc2V0dXAoJmFtcDtudC0mZ3Q7bnApOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7Tm90IGVuYWJsaW5nIG5ldGNvbnNvbGUgZm9yICVzJWQuIE5ldHBvbGwgc2V0dXAgZmFpbGVkXG4mIzM0OywKIAkJICAgICAgIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCwgY21kbGluZV9jb3VudCk7CiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKQogCQkJLyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCwKIAkJCSAqIG90aGVyd2lzZSwga2VlcCB0aGUgdGFyZ2V0IGluIHRoZSBsaXN0LCBidXQgZGlzYWJsZWQuCkBAIC0yMzU1LDYgJiM0MzsyNDU2LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsCiBzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtudC0mZ3Q7cmVzdW1lX3dxKTsKJiM0MzsJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKQomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJbmV0cG9sbF9jbGVhbnVwKCZhbXA7bnQtJmd0O25wKTsKICNpZmRlZglDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCiAJa2ZyZWUobnQtJmd0O3VzZXJkYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMjEsMjAgJiM0MzsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7CiAJc3RydWN0IGluNl9hZGRyCWluNjsKIH07CiAKLS8qCi0gKiBNYXhpbXVtIHBheWxvYWQgbmV0cG9sbCYjMzk7cyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW4KLSAqIHN5bmMgd2l0aCB0aGUgYnVmZmVyIHNpemUgdXNlZCBieSByZWZpbGxfc2ticygpIGluIG5ldC9jb3JlL25ldHBvbGwuYzsKLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXIKLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwCi0gKiBza2Jfb3Zlcl9wYW5pYygpIGluIHNrYl9wdXQoKS4KLSAqLwotI2RlZmluZSBNQVhfVURQX0NIVU5LCTE0NjAKLSNkZWZpbmUgTUFYX1NLQl9TSVpFCQkJCQkJXAotCShzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MzsJCQkJXAotCSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOwkJCQkJXAotCSBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsJCQkJXAotCSBNQVhfVURQX0NIVU5LKQotCiBzdHJ1Y3QgbmV0cG9sbCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKQEAgLTQ5LDEwICYjNDM7MzUsNiBAQCBzdHJ1Y3QgbmV0cG9sbCB7CiAKIAl1bmlvbiBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAlib29sIGlwdjY7Ci0JdTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwotCXU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dOwotCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3Bvb2w7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTsKIH07CiAKICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pCQkJCVwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCBhZWQ0MTVkM2NkNzRmZi4uZjhkYTEwNDhlYTNhYjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTM2LDEyICYjNDM7MzYsNiBAQAogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9uYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwogCi0vKgotICogV2UgbWFpbnRhaW4gYSBzbWFsbCBwb29sIG9mIGZ1bGx5LXNpemVkIHNrYnMsIHRvIG1ha2Ugc3VyZSB0aGUKLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLgotICovCi0KLSNkZWZpbmUgTUFYX1NLQlMgMzIKICNkZWZpbmUgVVNFQ19QRVJfUE9MTAk1MAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhcnJpZXJfdGltZW91dCA9IDQ7CkBAIC0yMTMsMjIgJiM0MzsyMDcsNiBAQCB2b2lkIG5ldHBvbGxfcG9sbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJdXAoJmFtcDtuaS0mZ3Q7ZGV2X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0cG9sbCAqbnApCi17Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2w7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXNrYl9wb29sID0gJmFtcDtucC0mZ3Q7c2tiX3Bvb2w7Ci0KLQl3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLSZndDtxbGVuKSAmbHQ7IE1BWF9TS0JTKSB7Ci0JCXNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwotCQlpZiAoIXNrYikKLQkJCWJyZWFrOwotCi0JCXNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpOwotCX0KLX0KLQogdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM1MSwzMiAmIzQzOzMyOSwxMiBAQCBuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIH0KIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7CiAKLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDsKLQotCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtucC0mZ3Q7cmVmaWxsX3dxKTsKLQlza2JfcG9vbCA9ICZhbXA7bnAtJmd0O3NrYl9wb29sOwotCXNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG5ldHBvbGwgKm5wID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpOwotCi0JcmVmaWxsX3NrYnMobnApOwotfQotCiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvOwogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzOwogCWludCBlcnI7CiAKLQlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7bnAtJmd0O3NrYl9wb29sKTsKLQlJTklUX1dPUksoJmFtcDtucC0mZ3Q7cmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpOwotCiAJaWYgKG5kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDsgSUZGX0RJU0FCTEVfTkVUUE9MTCkgewogCQlucF9lcnIobnAsICYjMzQ7JXMgZG9lc24mIzM5O3Qgc3VwcG9ydCBwb2xsaW5nLCBhYm9ydGluZ1xuJiMzNDssCiAJCSAgICAgICBuZGV2LSZndDtuYW1lKTsKQEAgLTQxMSw5ICYjNDM7MzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCW5wLSZndDtkZXYgPSBuZGV2OwogCXN0cnNjcHkobnAtJmd0O2Rldl9uYW1lLCBuZGV2LSZndDtuYW1lLCBJRk5BTVNJWik7CiAKLQkvKiBmaWxsIHVwIHRoZSBza2IgcXVldWUgKi8KLQlyZWZpbGxfc2ticyhucCk7Ci0KIAkvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovCiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5kZXYtJmd0O25waW5mbywgbnBpbmZvKTsKIApAQCAtNjAzLDcgJiM0Mzs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiAKIAllcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmx1c2g7CiYjNDM7CQlnb3RvIHB1dDsKIAlydG5sX3VubG9jaygpOwogCiAJLyogTWFrZSBzdXJlIGFsbCBOQVBJIHBvbGxzIHdoaWNoIHN0YXJ0ZWQgYmVmb3JlIGRldi0mZ3Q7bnBpbmZvCkBAIC02MTQsOCAmIzQzOzU2OSw2IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCkKIAogCXJldHVybiAwOwogCi1mbHVzaDoKLQlza2JfcG9vbF9mbHVzaChucCk7CiBwdXQ6CiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShucC0mZ3Q7ZGV2KTsKIAlpZiAoaXBfb3ZlcndyaXR0ZW4pCkBAIC02NTksOCAmIzQzOzYxMiw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCkKIAkJZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYygmYW1wO25waW5mby0mZ3Q7dHhfd29yayk7CiAJCWNhbGxfcmN1KCZhbXA7bnBpbmZvLSZndDtyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7CiAJfQotCi0Jc2tiX3Bvb2xfZmx1c2gobnApOwogfQogCiB2b2lkIF9fbmV0cG9sbF9mcmVlKHN0cnVjdCBuZXRwb2xsICpucCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgTmV0Y29uc29sZTogQXNzZXNzaW5nIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyB0byBiZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB3aXRoaW4gdGhlIG5ldHdvcmsgY29uc29sZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYCwgYW5kIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBmYWxsYmFjayBTS0IgcG9vbCBhbmQgc29tZSB0YXJnZXQtc3BlY2lmaWMgcGFyYW1ldGVycywgbGlrZSBwb3J0cyBhbmQgTUFDIGFkZHJlc3NlcywgZnJvbSB0aGUgYG5ldHBvbGxgIHN0cnVjdHVyZSB0byB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3R1cmUuIFRoZSBhc3NvY2lhdGVkIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgaXMgYmVpbmcgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgb3JnYW5pemF0aW9uYWwgc2hpZnQuIEJhc2ljYWxseSwgdGhleSYjMzk7cmUgY2xlYW5pbmcgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWFraW5nIHRoZSBjb2RlIGEgYml0IGNsZWFuZXIgYW5kIG1vcmUgb3JnYW5pemVkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIGNvZGUgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBOZXRjb25zb2xlIGlzIHByZXR0eSBpbXBvcnRhbnQ7IGl04oCZcyBhIGtleSBwaWVjZSBmb3IgbG9nZ2luZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yay4gSXQgYXBwZWFycyB3ZSBjYW4gcmVhY2ggaXQgdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4gV2hpY2ggc3VnZ2VzdHMgaXQgY2FuIGJlIHJlYWRpbHkgZW5hYmxlZCBpbiBtYW55IHN5c3RlbXMuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZnVuY3Rpb25hbCBjb2RlLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSB2YWxpZCBuZXh0IHN0ZXAuCgpUbyBwcm9jZWVkLCBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgb3B0aW9ucyByaWdodC4gYENPTkZJR19ORVRDT05TT0xFYCBhbmQgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIHNlZW0gdG8gYmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFyb3VuZCBgTkVUQ09OU09MRWAsIGJ1dCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTc3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG5ldGNvbnNvbGVgIExvZ2dpbmcgTWVjaGFuaXNtIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9ucywgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGluIGBuZXRjb25zb2xlLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIGEgd2hvbGUgYnVuY2ggb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYHJlZmlsbF9za2JzYCwgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGFuZCB0aGUgYHJlc3VtZV90YXJnZXRgIGZhbWlseS4uLnBsdXMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGFsbG9jYXRpb24sIHByaW50aW5nLCBhbmQgZGV2aWNlIG5hbWUgZnVuY3Rpb25zLiBUaGVyZSBhcmUgYWxzbyBzeXNmcyBmaWxlcy4KClJpZ2h0LCBgbmV0Y29uc29sZWAuIEl0IGludGVyY2VwdHMgYHByaW50a2AgbWVzc2FnZXMgYW5kIHNoaXBzIHRoZW0gb3ZlciBVRFAuIEFoYSwgdGhlIGtleSBpcyB0aGUgdXNlciBzcGFjZSBpbnRlcmFjdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBjb25maWdmcywgc3BlY2lmaWNhbGx5IHVuZGVyIGAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS9gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBvcHBvcnR1bml0aWVzLgoKVGhlIGxpZ2h0YnVsYiBqdXN0IHdlbnQgb2ZmIC0gZnV6emluZyBgY29uZmlnZnNgIGZvciBuZXRjb25zb2xlIGlzIGFic29sdXRlbHkgYSB2aWFibGUgdGFyZ2V0LiBBbmQgdGhlIGJlc3QgcGFydD8gU3l6a2FsbGVyIHN1cHBvcnRzIGNvbmZpZ2ZzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGF0dGFjayBzdXJmYWNlIGFuZCBhdHRhY2sgdmVjdG9ycyAtIHRoaXMgY291bGQgYmUgYSBnb29kIG9uZS4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55IHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgYG5ldGNvbnNvbGVgIGluIGBjb25maWdmc2A/IEl0IG1pZ2h0IG5vdCAqZGlyZWN0bHkqLCBidXQgZXZlbiB3aXRob3V0IHNwZWNpZmljIGRlc2NyaXB0aW9ucywgU3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQgYXMgbG9uZyBhcyB0aGUgY29uZmlnZnMgbW91bnQgZXhpc3RzLiBTeXprYWxsZXIgaGFzIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNpbWlsYXIsIGJ1dCBjb25maWdmcyBpcyB1c3VhbGx5IGFscmVhZHkgbW91bnRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBTeXprYWxsZXIgYWxyZWFkeSBoYXMgZGVzY3JpcHRpb25zIGZvciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYy02LSAqXG5uZXQvY29yZS9uZXRwb2xsLmM6NzogKiBiYXNlZCBvbiB0aGUgbmV0Y29uc29sZSBjb2RlIGZyb206XG5uZXQvY29yZS9uZXRwb2xsLmMtOC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIHRoZSBOZXRjb25zb2xlIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBzaWZ0aW5nIHRocm91Z2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByaWdodCBub3cuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZWZpbmUgdGhlIGNydWNpYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBnb29kIGluaXRpYWwgbGlzdCBvZiB0aG9zZSBzeW1ib2xzIGluIG1pbmQsIGxpa2UgYGFsbG9jX2FuZF9pbml0YCwgYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfcG9ydF9zdG9yZWAsIGByZW1vdGVfcG9ydF9zdG9yZWAsIGByZW1vdGVfbWFjX3N0b3JlYCwgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBgZnJlZV9wYXJhbV90YXJnZXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4KClJpZ2h0LCBsZXQmIzM5O3MgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS4gQ2FuIHVzZXIgc3BhY2UgZXZlbiAqcmVhY2gqIHRoZSBuZXRjb25zb2xlIGZ1bmN0aW9uYWxpdHk/IEFoLCB5ZXMsIHRocm91Z2ggY29uZmlnZnMuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIGZpbmRpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGdvb2QgdGFyZ2V0cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzdWJzZXQgb2YgdGhlIGZpcnN0IGxpc3QsIGJhc2VkIG9uIHRoZWlyIHBvdGVudGlhbCBmb3IgY29udHJvbCBhbmQgZGF0YSBtYW5pcHVsYXRpb246IGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAsIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAsIGFuZCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAuCgpUbyBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0Y29uc29sZS5jYCBpdHNlbGYuIFdlIG1pZ2h0IHVuY292ZXIgc29tZSBhZGRpdGlvbmFsIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIGVuYWJsZWRfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTc2MT1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc4MC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3ODE6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzgyLVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY5OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRjb25zb2xlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGBuZXRjb25zb2xlYCwgYW5kIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCB3aGljaCBtZWFucyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciBgbmV0Y29uc29sZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgY29tcG9uZW50IGhhbmRsZXMgaXRzIFNLQiBwb29sLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcHJlLWFsbG9jYXRpb24gaGVyZSwgcHJvYmFibHkgZHVlIHRvIHRoZSBwZXJmb3JtYW5jZSBjcml0aWNhbCBuYXR1cmUgb2YgbG9nZ2luZyBvdmVyIHRoZSBuZXR3b3JrLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgc3RhbmRhcmQgU0xBQiBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBjdXN0b20uIFdoYXQmIzM5O3MgdGhlIHBvb2wgc2l6ZT8gQW55IGNsZXZlciB0cmlja3MgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbiB1bmRlciBsb2FkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSBjYW4gaWRlbnRpZnkgcXVpY2tseSwgcGFydGljdWxhcmx5IHdpdGggbXVsdGktY29yZSBzeXN0ZW1zIGFuZCB0aGUgY29uY3VycmVudCBuYXR1cmUgb2YgbmV0d29yayB0cmFmZmljPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uLCB0aGUgYmFja2JvbmUuIEEgc29saWQgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uIGRvd24gdGhlIGxpbmUsIGFuZCBhbnkgaW5lZmZpY2llbmNpZXMgaGVyZSB3aWxsIG1hbmlmZXN0IGFzIGhlYWRhY2hlcyBsYXRlci4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHJpbmcgYnVmZmVyIG9yIGNpcmN1bGFyIHF1ZXVlIGF0IHRoZSBoZWFydCBvZiB0aGUgcG9vbCBpbXBsZW1lbnRhdGlvbiwgb2YgY291cnNlLCBidXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgZnVuZGFtZW50YWwgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzMxPXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0Mi0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIHByb3ZpZGVkIHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZTogVGhlIFNlYXJjaCBmb3IgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgZGlyZWN0cyBtZSB0byBzdW1tYXJpemUgbXkgJiMzNDt0aG91Z2h0cy4mIzM0OyBDbGVhcmx5LCBJIG5lZWQgdG8gaW50ZXJwcmV0IHRoaXMgYXMgYSBjYWxsIHRvIGFjdGlvbiB3aXRoaW4gbXkgaW50ZXJuYWwgcmVhc29uaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGNvZGUgZmlsZSBtZW50aW9uZWQ6IGBuZXRjb25zb2xlLmNgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIHN1Z2dlc3Rpb247IGl0JiMzOTtzIGEgZGlyZWN0IHBvaW50ZXIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIEkmIzM5O20gYmVpbmcgZGlyZWN0ZWQgaGVyZS4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYCwgaXMgdGhlIGtleS4gVGhlIHRlcm0gJiMzNDtTS0ImIzM0OyBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIFNvY2tldCBCdWZmZXJzLCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suICYjMzQ7UG9vbCBmbHVzaCYjMzQ7IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBjbGVhbnVwIG9wZXJhdGlvbiBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGVzZSBTS0JzIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIG9yIHJlY3ljbGluZyBuZXR3b3JrIGJ1ZmZlcnMgdXNlZCBieSB0aGUgbmV0Y29uc29sZS4gSSB3b3VsZCBiZWdpbiB0aGUgc2VhcmNoIGluIGBuZXRjb25zb2xlLmNgIGtub3dpbmcgdGhhdCB0aGlzIGlzIGFuIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYSBjbGVhbnVwIG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXRjb25zb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLiogbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzQzPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzQ4OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldGNvbnNvbGUuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgbmV0d29yayBjb25zb2xlcywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuIEEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGFyZWEgb2YgaW50ZXJlc3QgaXMgYG5ldGNvbnNfc2tiX3BvcGAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gKnJlbW92aW5nKiBvciAqcHJvY2Vzc2luZyogZGF0YSBmcm9tIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApLiBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBpc3N1ZSwgaWYgd2UmIzM5O3JlIGRlYnVnZ2luZykgaGFwcGVucyByZWdhcmRpbmcgcmVjZWl2aW5nIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgbmV0d29yayBjb25zb2xlIGRhdGEuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLiogbmV0Y29uc19za2JfcG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlY2xhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3BgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCAmIzM0O1dhaXQsIGlzICp0aGF0KiB0aGUgc2lnbmF0dXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGg/JiMzNDsgSXQmIzM5O3MganVtcGluZyBvdXQgYXQgbWUgYmVjYXVzZSB0aGUgdHlwZSBpcyBhIGJpdCB1bnVzdWFsLgoKU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBzY29wZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCBleHRlcm5hbCBsaW5rYWdlLCBzbyBpdCBsaWtlbHkgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9ucy4gVGhlbiwgdGhlIHJldHVybiB0eXBlIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IHNrX2J1ZmZgLiBUaGUgYHNrX2J1ZmZgIGlzIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggbmV0d29yayBwYWNrZXQgYnVmZmVycy4gVGhlIG5hbWUgYG5ldGNvbnNfc2tiX3BvcGAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYWJvdXQgcG9wcGluZyBhIGJ1ZmZlciBvZmYgb2Ygc29tZXRoaW5nLCBwcm9iYWJseSBhIG5ldHdvcmsgY29uc29sZSBvciBzb21lIGZvcm0gb2YgbmV0d29yayBjb25uZWN0aW9uIHN0cnVjdHVyZSwgYW5kIHJldHVybmluZyBpdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIHdoZXJlIGFuZCBob3cgdGhpcyBgbmV0Y29uc2AgY29udGV4dCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlIGBza19idWZmYCBpcyBiZWluZyB1c2VkIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdGhpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzc5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OTQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc5NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OTYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODE4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cdGlmICghc2tiKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MzA6XHRcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBLZXJuZWwgTmV0d29ya2luZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGNvbnNvbGUgYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYSBzcGVjaWZpYyBTZWFyY2ggS2VybmVsIEJ1ZmZlciAoU0tCKSBpcyBoYW5kbGVkLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5ldGNvbnNvbGUuY2AuIEl0JiMzOTtzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGZvciBmaW5kaW5nIGEgc3BlY2lmaWMgU0tCIHdpdGhpbiB0aGF0IG1vZHVsZSB3aWxsIGJlIGluIHRoZSBgZmluZF9za2JgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGxvY2F0ZXMgYW5kIG1hbmFnZXMgdGhlc2UgU0tCcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldHdvcmsgY29uc29sZSwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBmaW5kX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWZpbml0aW9uKioKClNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCBJJiMzOTttIGxvb2tpbmcgYXQgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgb3IgYSBzaW1pbGFyIG5ldHdvcmstb3JpZW50ZWQgZW52aXJvbm1lbnQuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBgc3RhdGljYCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXTigJlzIGdvb2QgZm9yIGVuY2Fwc3VsYXRpb24gYW5kIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBjbGFzaGVzIHdpdGggb3RoZXIgZnVuY3Rpb25zLiBUaGUgZnVuY3Rpb24mIzM5O3MgcmV0dXJuIHR5cGUgaXMgYHN0cnVjdCBza19idWZmICpgLiBBaCwgc28gaXQmIzM5O3MgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhIGBza19idWZmYCBzdHJ1Y3R1cmUuIGBza19idWZmYCBpcyB0aGUgc3RhbmRhcmQgc29ja2V0IGJ1ZmZlciBzdHJ1Y3R1cmUuIEFuZCB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYGZpbmRfc2tiYC4gUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIHRoaXMgaXMgbGlrZWx5IGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gbG9jYXRlIGFuIGBza19idWZmYCBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIGlmIGZvdW5kLCBvciBOVUxMIChpbXBsaWNpdGx5KSBpZiBub3QuIEl0JiMzOTtzIHByb2JhYmx5IGFuIGludGVybmFsIGZ1bmN0aW9uLCBjb25zaWRlcmluZyBpdOKAmXMgc3RhdGljLiBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIHdoYXQgcGFyYW1ldGVycyBpdCB0YWtlcyBhbmQgd2hhdCBpdCYjMzk7cyBzZWFyY2hpbmcgZm9yIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01Mz1NT0RVTEVfSU1QT1JUX05TKFwmIzM0O05FVERFVl9JTlRFUk5BTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0LS8qXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjU6ICogU2l6aW5nIGZvciB0aGUgcGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY2LSAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0NT1lbnVtIHRhcmdldF9zdGF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NS0gKiBAcmVzdW1lX3dxOlx0V29ya3F1ZXVlIHRvIHJlc3VtZSBkZWFjdGl2YXRlZCB0YXJnZXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODY6ICogQHNrYl9wb29sOlx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3LSAqXHRcdGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGFcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5LSAqIEByZWZpbGxfd3E6XHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkwOiAqXHRcdE1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MS0gKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzMxPXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzOC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMzk6LyogU2VlZCB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0by4gVGhlIHF1ZXVlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQwLSAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTc5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTg6c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MTktXHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTcxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5NzI6XHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICYjNDM7IG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3My1cdFx0ICAgICAgIHRvdGFsX2xlbiAtIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDUxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0OiBOZXRjb25zb2xlIFBhcmFtZXRlciBhbmQgTGlmZWN5Y2xlIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0Y29uc29sZS9uZXRwb2xsIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIHNoaWZ0IGluIGxpZmVjeWNsZSBhbmQgcGFyYW1ldGVyIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIG1vdmVtZW50IG9mIGBza2JfcG9vbGAsIGByZWZpbGxfd3FgLCBgbG9jYWxfcG9ydGAsIGByZW1vdGVfcG9ydGAsIGFuZCBgcmVtb3RlX21hY2AgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgU0tCIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCB3aGljaCBhcmUgbmV3IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgdGhpcyBTS0IgcG9vbC4gVGhlIHdheSB0aGVzZSBhcmUgdXNlZCwgYW5kIHRoZWlyIGludGVyYWN0aW9ucywgYXJlIGRlZmluaXRlbHkgd29ydGggY2xvc2Ugc2NydXRpbnkgZHVyaW5nIGZ1enppbmcuCgpGdXJ0aGVybW9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLCBgcHVzaF91ZHBgLCBgcHVzaF9ldGhgLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50YCBpbnN0ZWFkIG9mIGBzdHJ1Y3QgbmV0cG9sbCAqbnBgIHVuZGVyc2NvcmUgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIGNvbXBsZXRlIHNoaWZ0IGluIGhvdyB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBjb25zb2xlLgoKVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZSwgd2l0aG91dCBhIGRvdWJ0OgoqICAgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAgYW5kIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYDogVGhlc2UgYXJlIG5ldywgYW5kIG1hbmFnZSBwb29sIGxpZmVjeWNsZS4KKiAgIGByZWZpbGxfc2tic2AgYW5kIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgOiBMaWtlbHkgcmVsYXRlZCB0byBwb29sIHJlZmlsbCBhbmQgYXNzb2NpYXRlZCB3b3JrIHF1ZXVlLgoqICAgYG5ldGNvbnNfc2tiX3BvcGAgYW5kIGBmaW5kX3NrYmA6IEZvciBnZXR0aW5nIFNLQnMgZnJvbSB0aGUgcG9vbC4KKiAgIGBuZXRwb2xsX3NlbmRfdWRwYCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgOiBDb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgY2hhbmdlZC4KKiAgIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBhbmQgYHJlbW90ZV9tYWNfc3RvcmVgOiBUaGVzZSBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGUgbmV3IGR5bmFtaWMgY29uZmlndXJhdGlvbiBjYXBhYmlsaXRpZXMgYW5kIG5lZWQgcGFydGljdWxhcmx5IGNhcmVmdWwgZXZhbHVhdGlvbi4KKiAgIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgOiBGb3IgbWVtb3J5IGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHRoZSB0YXJnZXQuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIGBORVRDT05TT0xFYCBlbmFibGVzIHRoZSBiYXNlIG1vZHVsZSwgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGVuYWJsZXMgdGhlIGR5bmFtaWMgY29uZmlnZnMgZmVhdHVyZXPigJR3aGljaCBhcmUgY3J1Y2lhbCBmb3IgZnV6emluZyBhbGwgdGhvc2Ugc3RvcmUgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIGJvdGggYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCB0byBwcm9wZXJseSBjb3ZlciB0aGUgc3VyZmFjZSBvZiB0aGlzIHBhdGNoLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIGluIHRoZXNlIGtpbmRzIG9mIGxpZmVjeWNsZSBhbmQgcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBnaXZlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJvbmcgZnV6emluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5Mj1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5My1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk0OiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NS1cdHN0cnVjdCBjb25maWdfZ3JvdXBcdGdyb3VwO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyOiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMy1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYxPXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NjojZWxzZVx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjctXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI5OD1zdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMDI6I2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01MjY9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU0OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NTA6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTUxLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjc1PXN0YXRpYyBpbnQgcHJlcGFyZV9zeXNkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTctfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2OTg6I2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5OS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTk4LSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDAtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAwMT1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAwNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAwNi1cdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMTg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwMjc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA2Mz1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzU6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc2LVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LVx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM5ND1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzNy1cdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzODpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzktXHRcdFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ1Nj1zdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYxLVx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDYyOiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjMtXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODY9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTktXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTAwOlx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMS1cdFx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODgwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LCB0aGUgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIG9wdGlvbiBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBpZiBJJiMzOTttIGdvaW5nIHRvIGJlIHVzaW5nIHRoZSBjb25maWdmcyBpbnRlcmZhY2UgYW5kIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGNsZWFyLiBUaGVyZWZvcmUsIG15IGJhc2UgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgc2V0dXAgbXVzdCBpbmNsdWRlIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIAoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nLiBBaCwgeWVzLCBJIHNlZSB0aGF0IGBDT05GSUdfTkVUUE9MTGAgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSB3aGVuIEkgZW5hYmxlIGBORVRDT05TT0xFYC4gR29vZCB0byBrbm93OyBJJiMzOTtsbCB0YWtlIHRoYXQgaW50byBjb25zaWRlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzQ0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTkVUQ09OU09MRSBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVENPTlNPTEVgLiBJIGtub3cgaXQmIzM5O3MgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZSwgc28gdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHRoYXQgaGFuZGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L0tjb25maWdgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBuZXR3b3JrIGRyaXZlciBvcHRpb25zIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBORVRDT05TT0xFYCBjYW4gYmUgc2VsZWN0ZWQgYW5kIGJ1aWx0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgZW5zdXJpbmcgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuIDM0NTpcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM0NjpcdFx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0Y29uc29sZSBDaGFuZ2VzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9uIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KCkZpcnN0LCBJIGNvbXBpbGVkIGEgbGlzdCBvZiBzeW1ib2xzIEkgdGhvdWdodCB3ZXJlIGNlbnRyYWwgdG8gdGhpcyBjaGFuZ2U6IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGByZWZpbGxfc2tic2AsIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAsIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgLgoKVGhlbiBJIGRvdmUgZGVlcGVyLCBhbmQgcmVhbGl6ZWQgdGhhdCBhIGdvb2QgY2h1bmsgb2YgdGhlc2Ugd2VyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBuZXRjb25zb2xlLmNgLiBTbyBJIHN0YXJ0ZWQgY29uZmlybWluZyB0aGVtLCBzdGFydGluZyB3aXRoIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIHZlcmlmeWluZyBpdCB3YXMgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuCgpUaGVuIEkgd2lkZW5lZCB0aGUgc2VhcmNoIGFuZCBkaXNjb3ZlcmVkIHRoYXQgYSBmZXcgZnVuY3Rpb25zIChgcmVmaWxsX3NrYnNgLCBgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyYCwgYHNrYl9wb29sX2ZsdXNoYCkgd2VyZSByZW1vdmVkIGZyb20gYG5ldHBvbGwuY2AsIG1lYW5pbmcgdGhlIGNvcmUgbmV0cG9sbCBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiByZWZhY3RvcmVkIG9yIG1vdmVkLiBBbmQgSSBmb3VuZCB0aGF0IGBfX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9zZXR1cGAsIGFuZCBgX19uZXRwb2xsX2NsZWFudXBgIHdlcmUgbW9kaWZpZWQgaW4gYG5ldHBvbGwuY2AuCgpTbyBub3csIGEgbW9yZSByZWZpbmVkIGxpc3QgaW5jbHVkZXMgdGhlIGBuZXRwb2xsYCBmdW5jdGlvbnM6IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGByZWZpbGxfc2tic2AsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfcG9ydF9zdG9yZWAsIGByZW1vdGVfcG9ydF9zdG9yZWAsIGByZW1vdGVfbWFjX3N0b3JlYCwgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgLCBgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgYGZyZWVfcGFyYW1fdGFyZ2V0YCwgYF9fbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NldHVwYCwgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAuCgpJIG5lZWQgdG8gY29uZmlybSB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLCBjb25maWdmcyBjYWxsYmFja3MsIG9yIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0L2V4aXQgdG8gYmUgc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aC4gU3BlY2lmaWNhbGx5LCBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgIGFyZSBjb25maWdmcyBjYWxsYmFja3MsIGFzIGlzIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YC4gVGhlIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGBmcmVlX3BhcmFtX3RhcmdldGAgaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGV4aXQgb3IgaW4gZXJyb3IgcGF0aHMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIGNsZWFudXAgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuZXRwb2xsX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYz0zMzI9aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zODEtfVxubmV0L2NvcmUvbmV0cG9sbC5jOjM4MjpFWFBPUlRfU1lNQk9MX0dQTChfX25ldHBvbGxfc2V0dXApO1xubmV0L2NvcmUvbmV0cG9sbC5jLTM4My1cbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9NTAyPWludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtNTgwLX1cbm5ldC9jb3JlL25ldHBvbGwuYzo1ODE6RVhQT1JUX1NZTUJPTChuZXRwb2xsX3NldHVwKTtcbm5ldC9jb3JlL25ldHBvbGwuYy01ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIG9yIGludmVzdGlnYXRpb246CgoqKkNoZWNraW5nIEV4cG9ydGVkIFN5bWJvbHM6IEEgUXVpY2sgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBxdWVzdGlvbiB3YXMgYWJvdXQgd2hldGhlciBvciBub3Qgc29tZXRoaW5nIGlzIGV4cG9ydGVkLiBUaGUgYW5zd2VyIHNlZW1zIHRvIGJlLCAmIzM0O3llcywgaXQgaXMgZXhwb3J0ZWQuJiMzNDsgVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgc3BlY2lmaWMgc3ltYm9sLCBgX19uZXRwb2xsX2NsZWFudXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgKml0KiBzcGVjaWZpY2FsbHkgaXMgZXhwb3J0ZWQsIHRvby4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrIGJlY2F1c2UgaWYgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgdmlzaWJsZSwgYSBrZXkgcGFydCBvZiBteSB1bmRlcnN0YW5kaW5nIG9yIGEgcmVsYXRlZCBwcm9jZXNzIHdpbGwgYmUgZmxhd2VkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyAmIzM0O2lzIGl0IGV4cG9ydGVkPyYjMzQ7IHF1ZXN0aW9uOyBJJiMzOTttIGhvbmluZyBpbiBvbiBhIHByZWNpc2UgcGllY2Ugb2YgaW5mb3JtYXRpb24gY3J1Y2lhbCB0byBteSBpbnZlc3RpZ2F0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBuZXRwb2xsIGFuZCBjbGVhbnVwIHJvdXRpbmVzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmV0cG9sbF9jbGVhbnVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYz02Mjg9dm9pZCBkb19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy02MzMtfVxubmV0L2NvcmUvbmV0cG9sbC5jOjYzNDpFWFBPUlRfU1lNQk9MKGRvX25ldHBvbGxfY2xlYW51cCk7XG5uZXQvY29yZS9uZXRwb2xsLmMtNjM1LVxubmV0L2NvcmUvbmV0cG9sbC5jPTYzNj12b2lkIG5ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTY0NC19XG5uZXQvY29yZS9uZXRwb2xsLmM6NjQ1OkVYUE9SVF9TWU1CT0wobmV0cG9sbF9jbGVhbnVwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTEKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZS9OZXRwb2xsIFJlZmFjdG9yKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGNvbmZ1c2lvbiBjbGVhcnMgdXAg4oCTIGBfX25ldHBvbGxfY2xlYW51cGAgaXNuJiMzOTt0IGV4cG9ydGVkIGJlY2F1c2UsIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdCYjMzk7cyBzY29wZWQgd2l0aGluIGBuZXRwb2xsLmNgLiBHb29kLgoKUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVzdHJ1Y3R1cmluZyBob3cgdGhlIGZhbGxiYWNrIFNLQiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBhcmUgbWFuYWdlZCwgbW92aW5nIHRoZW0gZnJvbSB0aGUgYG5ldHBvbGxgIHN0cnVjdHVyZSB0byBgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGluaGVyZW50bHkgYWx0ZXJzIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBTS0IgcG9vbCBhbmQgdGhvc2UgcGFyYW1ldGVycy4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBuZXcgZnVuY3Rpb25zIGZvciBpbml0aWFsaXphdGlvbiBhbmQgZmx1c2hpbmcgb2YgdGhlIHBvb2wg4oCTIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgIGFuZCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAuIFRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byB6ZXJvIGluIG9uLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIHdpdGggdGhpcyBraW5kIG9mIGNoYW5nZSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlLiBXZSBuZWVkIHRvIGJlIHJpZ29yb3VzbHkgdGVzdGluZyB0aGUgbmV3IGJlaGF2aW9yLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyB0ZXN0aW5nLCBiZXNpZGVzIHRoZSBpbml0aWFsIGFuZCBmbHVzaCBmdW5jdGlvbiBmb3IgdGhlIHBvb2wsIGFyZTogYHJlZmlsbF9za2JzYCwgYG5ldGNvbnNfc2tiX3BvcGAsIGBmaW5kX3NrYmAsIGBuZXRwb2xsX3NlbmRfdWRwYCB3aGljaCBhcmUgY3J1Y2lhbCBpbiB0aGUgY29yZSBkYXRhIHBhdGguIEFsc28sIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBhbmQgdGhlIGFzc29jaWF0ZWQgc3RvcmUgZnVuY3Rpb25zOiBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLiBGaW5hbGx5LCB0aGUgdGFyZ2V0IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGFzIHdlbGwgYXMgc2V0dXAvY2xlYW51cCBmdW5jdGlvbnMgbGlrZSBgX19uZXRwb2xsX3NldHVwYCwgYG5ldHBvbGxfc2V0dXBgIGFuZCBgX19uZXRwb2xsX2NsZWFudXBgLCB3aGljaCBJIGFsc28gbmVlZCB0byB2ZXJpZnkuCgpBbHJpZ2h0LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgbG9nIHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2xvY2FsX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX21hY19zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2luaXQmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2ticyYjMzQ7LAogICAgJiMzNDtuZXRjb25zX3NrYl9wb3AmIzM0OywKICAgICYjMzQ7ZmluZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bG9jYWxfcG9ydF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfcG9ydF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfbWFjX3N0b3JlJiMzNDssCiAgICAmIzM0O2Ryb3BfbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O2ZyZWVfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBjb2RlIGJ5IG1vdmluZyB0aGUgZmFsbGJhY2sgc2tiIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gVGhpcyBjaGFuZ2VzIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHNrYiBwb29sIGFuZCB0aGUgdGFyZ2V0IHBhcmFtZXRlcnMsIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgZmx1c2ggdGhlIHNrYiBwb29sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MDYuMTA4MDczNjY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MzkxOTgwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibG9jYWxfcG9ydF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX3BvcnRfc3RvcmVcIixcbiAgICBcInJlbW90ZV9tYWNfc3RvcmVcIixcbiAgICBcImRyb3BfbmV0Y29uc29sZV90YXJnZXRcIixcbiAgICBcImFsbG9jX3BhcmFtX3RhcmdldFwiLFxuICAgIFwiZnJlZV9wYXJhbV90YXJnZXRcIixcbiAgICBcIl9fbmV0cG9sbF9zZXR1cFwiLFxuICAgIFwibmV0cG9sbF9zZXR1cFwiLFxuICAgIFwiX19uZXRwb2xsX2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MDYuMTA4MDgwNTI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2ODY5NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzg0ZGNiOTllZmIyZjE0MWQ4ZWRlZWQ4YmY0MWY1NGY0ZGQwNmNjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOTowNDowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCBjMTgxMmE5ODM2NWI3OC4uNDliMjI0M2EyMGIyZDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuQEAgLTYxLDYgKzYxLDE5IEBAIE1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1xcdFxcdDI1NlxcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1xcdFxcdFxcdDEwMDBcXG4gXFxuKy8qXFxuKyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKClcXG4rICogd2hlbiBpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzIHNvIG1lc3NhZ2VzIHN0aWxsIGdldCBvdXQgdW5kZXJcXG4rICogbWVtb3J5IHByZXNzdXJlLlxcbisgKi9cXG4rI2RlZmluZSBNQVhfVURQX0NIVU5LXFx0XFx0XFx0MTQ2MFxcbisjZGVmaW5lIE1BWF9TS0JTXFx0XFx0XFx0MzJcXG4rI2RlZmluZSBNQVhfU0tCX1NJWkVcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IE1BWF9VRFBfQ0hVTkspXFxuK1xcbiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XFxuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcXFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFxcdTAwM2N0Z3QtaXBcXHUwMDNlL1t0Z3QtbWFjYWRkcl1cXFwiKTtcXG5AQCAtMTYyLDE0ICsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xcbiAgKiBAbnA6XFx0XFx0VGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC5cXG4gICpcXHRcXHRDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczpcXG4gICpcXHRcXHRkZXZfbmFtZVxcdChyZWFkLXdyaXRlKVxcbi0gKlxcdFxcdGxvY2FsX3BvcnRcXHQocmVhZC13cml0ZSlcXG4tICpcXHRcXHRyZW1vdGVfcG9ydFxcdChyZWFkLXdyaXRlKVxcbiAgKlxcdFxcdGxvY2FsX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0cmVtb3RlX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4tICpcXHRcXHRyZW1vdGVfbWFjXFx0KHJlYWQtd3JpdGUpXFxuKyAqIEBsb2NhbF9wb3J0OlxcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9tYWM6XFx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4gICogQGJ1ZjpcXHRUaGUgYnVmZmVyIHVzZWQgdG8gc2VuZCB0aGUgZnVsbCBtc2cgdG8gdGhlIG5ldHdvcmsgc3RhY2tcXG4gICogQHJlc3VtZV93cTpcXHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxcbisgKiBAc2tiX3Bvb2w6XFx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXFxuKyAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbisgKlxcdFxcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXFxuKyAqIEByZWZpbGxfd3E6XFx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xcbisgKlxcdFxcdE1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LlxcbiAgKi9cXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTE5MCwxMSArMjA4LDE1IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuIFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZDtcXG4gXFx0Ym9vbFxcdFxcdFxcdHJlbGVhc2U7XFxuIFxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuK1xcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbitcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuIFxcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXFxuIFxcdCAqL1xcbiBcXHRjaGFyXFx0XFx0XFx0YnVmW01BWF9QUklOVF9DSFVOSyArIDFdO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZXN1bWVfd3E7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWRcXHRza2JfcG9vbDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cmVmaWxsX3dxO1xcbiB9O1xcbiBcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbkBAIC0yOTIsMTEgKzMxNCw1NiBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdG1lbXNldChcXHUwMDI2bnQtXFx1MDAzZW5wLmRldl9uYW1lLCAwLCBJRk5BTVNJWik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2wgPSBcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cXHUwMDNlcWxlbikgXFx1MDAzYyBNQVhfU0tCUykge1xcbitcXHRcXHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcXG4rXFxuK1xcdHJlZmlsbF9za2JzKG50KTtcXG4rfVxcbitcXG4rLyogU2VlZCB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0by4gVGhlIHF1ZXVlXFxuKyAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHlcXG4rICogKHJlKWZpbGxzIHRoZSBwb29sLiBQYWlyIHdpdGggbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0cmVmaWxsX3NrYnMobnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSk7XFxuK1xcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcXG4rfVxcbitcXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXFxuIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbitcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIG1ha2VzIG50LVxcdTAwM2VucC5kZXZcXG4rXFx0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcXG4rXFx0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcXG4rXFx0ICogY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XFxuK1xcbiBcXHRpZiAobmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKSkge1xcbiBcXHRcXHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXFxuK1xcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiBcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuQEAgLTM1OCw2ICs0MjUsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRydG5sX2xvY2soKTtcXG4gXFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2IG50LVxcdTAwM2VucC5kZXYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG50LVxcdTAwM2VucC5kZXYtXFx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkge1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiBcXHR9XFxuQEAgLTM5MywxMSArNDYxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuIFxcbiBcXHRudC1cXHUwMDNlbnAubmFtZSA9IFxcXCJuZXRjb25zb2xlXFxcIjtcXG4gXFx0c3Ryc2NweShudC1cXHUwMDNlbnAuZGV2X25hbWUsIFxcXCJldGgwXFxcIiwgSUZOQU1TSVopO1xcbi1cXHRudC1cXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XFxuLVxcdG50LVxcdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XFxuLVxcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cXHUwMDNlbnAucmVtb3RlX21hYyk7XFxuK1xcdG50LVxcdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcXG4rXFx0bnQtXFx1MDAzZXJlbW90ZV9wb3J0ID0gNjY2NjtcXG4rXFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gXFx0bnQtXFx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcXG4rXFx0LyogU2V0IHVwIHRoZSBza2IgcG9vbCBwcmltaXRpdmVzIG9uY2U7IGVuYWJsaW5nIG9ubHkgcmVmaWxscyBpdC4gKi9cXG4rXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZudC1cXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xcbiBcXG4gXFx0cmV0dXJuIG50O1xcbiB9XFxuQEAgLTQxNyw2ICs0ODgsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnQsIHRtcCwgXFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xcbiBcXHRcXHRXQVJOX09OX09OQ0UobnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpO1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIFxcdFxcdC8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGhcXG4gXFx0XFx0ICogbG9ja3NcXG5AQCAtNDI5LDIxICs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4tXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIHBvcnQgJWRcXFxcblxcXCIsIG5wLVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4rXFxuK1xcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuIFxcdGlmIChucC1cXHUwMDNlaXB2NilcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJpbnRlcmZhY2UgbmFtZSAnJXMnXFxcXG5cXFwiLCBucC1cXHUwMDNlZGV2X25hbWUpO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAnJXBNJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9tYWMpO1xcbi1cXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIHBvcnQgJWRcXFxcblxcXCIsIG5wLVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuK1xcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9wb3J0KTtcXG4gXFx0aWYgKG5wLVxcdTAwM2VpcHY2KVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2VyZW1vdGVfaXAuaW42KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnAtXFx1MDAzZXJlbW90ZV9pcC5pcCk7XFxuLVxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXFxcblxcXCIsIG5wLVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4rXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiB9XFxuIFxcbiAvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcXG5AQCAtNTYxLDEyICs2MzUsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgdG9fdGFyZ2V0KGl0ZW0pLVxcdTAwM2VucC5sb2NhbF9wb3J0KTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgdG9fdGFyZ2V0KGl0ZW0pLVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuQEAgLTU5OSw3ICs2NzMsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcE1cXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbnAucmVtb3RlX21hYyk7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwTVxcXFxuXFxcIiwgdG9fdGFyZ2V0KGl0ZW0pLVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuQEAgLTc1NiwxMSArODMwLDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuIFxcdFxcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4rXFx0XFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xcbitcXG4rXFx0XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxcbitcXHRcXHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXFxuK1xcdFxcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcXG4rXFx0XFx0ICogb3RoZXJ3aXNlIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWRcXG4rXFx0XFx0ICogc3RhdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xcbiBcXG4gXFx0XFx0cmV0ID0gbmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9FTkFCTEVEO1xcbiBcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcXFxuXFxcIik7XFxuQEAgLTg4NSw3ICs5NjksNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcXHUwMDI2bnQtXFx1MDAzZW5wLmxvY2FsX3BvcnQpO1xcbitcXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0cmV0ID0gY291bnQ7XFxuQEAgLTkwNyw3ICs5OTEsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFxcdTAwMjZudC1cXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xcbitcXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdHJldCA9IGNvdW50O1xcbkBAIC05OTQsNyArMTA3OCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0aWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSBcXHUwMDI2XFx1MDAyNiBidWZbTUFDX0FERFJfU1RSX0xFTl0gIT0gJ1xcXFxuJylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRtZW1jcHkobnQtXFx1MDAzZW5wLnJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcXG4rXFx0bWVtY3B5KG50LVxcdTAwM2VyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XFxuIFxcbiBcXHRyZXQgPSBjb3VudDtcXG4gb3V0X3VubG9jazpcXG5AQCAtMTQ4MSwxNSArMTU2NSwxNSBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0LyogQSBTVEFURV9ERUFDVElWQVRFRCB0YXJnZXQgbWF5IGhhdmUgYmVlbiBtb3ZlZCB0b1xcbi1cXHQgKiB0YXJnZXRfY2xlYW51cF9saXN0IGJ5IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KCkgYnV0IG5vdCB5ZXRcXG4tXFx0ICogcHJvY2Vzc2VkIGJ5IG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKCkuIFVubGlua2luZyBpdCBiZWxvd1xcbi1cXHQgKiBoaWRlcyBpdCBmcm9tIHRoZSBjbGVhbnVwIHdvcmtlciwgc28gdGhpcyBwYXRoIGhhcyB0byBjbGVhbiBpdCB1cFxcbi1cXHQgKiBpdHNlbGYuIFJlY29yZCB0aGF0IHRoZSB0YXJnZXQgc3RpbGwgb3ducyBhIG5ldHBvbGwgYmVmb3JlIHRoZVxcbi1cXHQgKiBzdGF0ZSBpcyBkb3duZ3JhZGVkLlxcbitcXHQvKiBBIHRhcmdldCBtb3ZlZCB0byB0YXJnZXRfY2xlYW51cF9saXN0IGJ5IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KClcXG4rXFx0ICogYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkIHN0aWxsIG93bnMgYSBuZXRwb2xsOyB1bmxpbmtpbmcgaXQgYmVsb3cgaGlkZXNcXG4rXFx0ICogaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBtdXN0IHRlYXIgaXQgZG93biBpdHNlbGYuXFxuK1xcdCAqIFRoaXMgY292ZXJzIE5FVERFVl9VTlJFR0lTVEVSIChTVEFURV9ERUFDVElWQVRFRCkgYW5kXFxuK1xcdCAqIE5FVERFVl9SRUxFQVNFIC8gTkVUREVWX0pPSU4gKFNUQVRFX0RJU0FCTEVEKTsga2V5IG9mZiBudC1cXHUwMDNlbnAuZGV2LFxcbitcXHQgKiB3aGljaCBzdGF5cyBzZXQgdW50aWwgdGhlIG5ldHBvbGwgaXMgY2xlYW5lZCB1cC5cXG4gXFx0ICovXFxuIFxcdG5lZWRzX2NsZWFudXAgPSBudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCB8fFxcbi1cXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQ7XFxuK1xcdFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9ERUFDVElWQVRFRCB8fCBudC1cXHUwMDNlbnAuZGV2O1xcbiBcXHQvKiBEaXNhYmxlIGRlYWN0aXZhdGVkIHRhcmdldCB0byBwcmV2ZW50IHJhY2VzIGJldHdlZW4gcmVzdW1lIGF0dGVtcHRcXG4gXFx0ICogYW5kIHRhcmdldCByZW1vdmFsLlxcbiBcXHQgKi9cXG5AQCAtMTUxNCw4ICsxNTk4LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuIFxcdCAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtXFx1MDAzZWRldiBpcyBOVUxMKSwgc29cXG4gXFx0ICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi5cXG4gXFx0ICovXFxuLVxcdGlmIChuZWVkc19jbGVhbnVwKVxcbitcXHRpZiAobmVlZHNfY2xlYW51cCkge1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0cG9sbF9jbGVhbnVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbitcXHR9XFxuIFxcbiBcXHRjb25maWdfaXRlbV9wdXQoXFx1MDAyNm50LVxcdTAwM2Vncm91cC5jZ19pdGVtKTtcXG4gfVxcbkBAIC0xNzA2LDcgKzE3OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0ge1xcbiAgKiBwb29sIGxvY2tzIGFuZCBpcyB0aGVyZWZvcmUgbm90IE5NSS1zYWZlLiBTa2lwIHRoZSByZWZpbGwgd2hlbiBjYWxsZWRcXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbilcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG5AQCAtMTcxOCwxOSArMTgwNCwyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXFxuIFxcdFxcdGlmICghaW5fbm1pKCkpXFxuIFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcXCJuZXRjb25zb2xlOiBkcm9wcGluZyBtZXNzYWdlLCByZXF1ZXN0ZWQgc2tiIGxlbiAlZCBleGNlZWRzIHBvb2wgYnVmZmVyIHNpemUgJXp1IG9uICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbnQtXFx1MDAzZW5wLmRldi1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bnAtXFx1MDAzZXNrYl9wb29sKTtcXG4rXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCk7XFxuIFxcdGlmICghaW5fbm1pKCkpXFxuLVxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5wLVxcdTAwM2VyZWZpbGxfd3EpO1xcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZudC1cXHUwMDNlcmVmaWxsX3dxKTtcXG4gXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLFxcbitcXHRcXHRcXHRcXHRpbnQgcmVzZXJ2ZSlcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiBcXHRpbnQgY291bnQgPSAwO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG5AQCAtMTczOSw3ICsxODI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxcbiBcXG4gXFx0c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XFxuIFxcdGlmICghc2tiKVxcbi1cXHRcXHRza2IgPSBuZXRjb25zX3NrYl9wb3AobnAsIGxlbik7XFxuK1xcdFxcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTtcXG4gXFxuIFxcdGlmICghc2tiKSB7XFxuIFxcdFxcdGlmICgrK2NvdW50IFxcdTAwM2MgMTApIHtcXG5AQCAtMTc3OSw4ICsxODY3LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IENTVU1fTUFOR0xFRF8wO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuK3N0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0c3RydWN0IHVkcGhkciAqdWRwaDtcXG4gXFx0aW50IHVkcF9sZW47XFxuIFxcbkBAIC0xNzkwLDIxICsxODc5LDIyIEBAIHN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG4gXFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gXFxuIFxcdHVkcGggPSB1ZHBfaGRyKHNrYik7XFxuLVxcdHVkcGgtXFx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4tXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGh0b25zKG5wLVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuK1xcdHVkcGgtXFx1MDAzZXNvdXJjZSA9IGh0b25zKG50LVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4rXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGh0b25zKG50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIFxcdHVkcGgtXFx1MDAzZWxlbiA9IGh0b25zKHVkcF9sZW4pO1xcbiBcXG4gXFx0bmV0cG9sbF91ZHBfY2hlY2tzdW0obnAsIHNrYiwgbGVuKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aDtcXG4gXFxuIFxcdGV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRldGhlcl9hZGRyX2NvcHkoZXRoLVxcdTAwM2VoX3NvdXJjZSwgbnAtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbi1cXHRldGhlcl9hZGRyX2NvcHkoZXRoLVxcdTAwM2VoX2Rlc3QsIG5wLVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4rXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIFxcdGlmIChucC1cXHUwMDNlaXB2NilcXG4gXFx0XFx0ZXRoLVxcdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIFxcdGVsc2VcXG5AQCAtMTg2MSw4ICsxOTUxLDEwIEBAIHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbitzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbitcXHRcXHRcXHQgICAgaW50IGxlbilcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiBcXHRpbnQgdG90YWxfbGVuLCBpcF9sZW4sIHVkcF9sZW47XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbkBAIC0xODc3LDcgKzE5NjksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuIFxcbiBcXHR0b3RhbF9sZW4gPSBpcF9sZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShucC1cXHUwMDNlZGV2KTtcXG4gXFxuLVxcdHNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gKyBucC1cXHUwMDNlZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20sXFxuK1xcdHNrYiA9IGZpbmRfc2tiKG50LCB0b3RhbF9sZW4gKyBucC1cXHUwMDNlZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20sXFxuIFxcdFxcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xcbiBcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTE4ODUsMTIgKzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbiBcXHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIG1zZywgbGVuKTtcXG4gXFx0c2tiX3B1dChza2IsIGxlbik7XFxuIFxcbi1cXHRwdXNoX3VkcChucCwgc2tiLCBsZW4pO1xcbitcXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xcbiBcXHRpZiAobnAtXFx1MDAzZWlwdjYpXFxuIFxcdFxcdHB1c2hfaXB2NihucCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChucCwgc2tiLCBsZW4pO1xcbi1cXHRwdXNoX2V0aChucCwgc2tiKTtcXG4rXFx0cHVzaF9ldGgobnQsIHNrYik7XFxuIFxcdHNrYi1cXHUwMDNlZGV2ID0gbnAtXFx1MDAzZWRldjtcXG4gXFxuIFxcdHJldHVybiAoaW50KW5ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XFxuQEAgLTE5MDgsNyArMjAwMCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4gICovXFxuIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4ge1xcbi1cXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChcXHUwMDI2bnQtXFx1MDAzZW5wLCBtc2csIGxlbik7XFxuK1xcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkge1xcbiBcXHRcXHRpZiAocmVzdWx0ID09IE5FVF9YTUlUX0RST1ApIHtcXG5AQCAtMjIwMyw4ICsyMjk1LDkgQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuK3N0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XFxuIFxcdGNoYXIgKmN1ciA9IG9wdDtcXG4gXFx0Y2hhciAqZGVsaW07XFxuQEAgLTIyMTUsNyArMjMwOCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcXG4gXFx0XFx0aWYgKCFkZWxpbSlcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuIFxcdFxcdCpkZWxpbSA9IDA7XFxuLVxcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm5wLVxcdTAwM2Vsb2NhbF9wb3J0KSlcXG4rXFx0XFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX3BvcnQpKVxcbiBcXHRcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0XFx0Y3VyID0gZGVsaW07XFxuIFxcdH1cXG5AQCAtMjI2Miw3ICsyMzU1LDcgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbiBcXHRcXHRpZiAoKmN1ciA9PSAnICcgfHwgKmN1ciA9PSAnXFxcXHQnKVxcbiBcXHRcXHRcXHRucF9pbmZvKG5wLCBcXFwid2FybmluZzogd2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZFxcXFxuXFxcIik7XFxuLVxcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm5wLVxcdTAwM2VyZW1vdGVfcG9ydCkpXFxuK1xcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfcG9ydCkpXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbkBAIC0yMjg0LDExICsyMzc3LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG4gXFx0XFx0LyogTUFDIGFkZHJlc3MgKi9cXG4tXFx0XFx0aWYgKCFtYWNfcHRvbihjdXIsIG5wLVxcdTAwM2VyZW1vdGVfbWFjKSlcXG4rXFx0XFx0aWYgKCFtYWNfcHRvbihjdXIsIG50LVxcdTAwM2VyZW1vdGVfbWFjKSlcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuIFxcdH1cXG4gXFxuLVxcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTtcXG4rXFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0yMzI2LDE0ICsyNDE5LDIyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXFxuLVxcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoXFx1MDAyNm50LVxcdTAwM2VucCwgdGFyZ2V0X2NvbmZpZyk7XFxuK1xcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuIFxcbitcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXFxuK1xcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XFxuK1xcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxcbitcXHQgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LlxcbitcXHQgKi9cXG4rXFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4rXFxuIFxcdGVyciA9IG5ldHBvbGxfc2V0dXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJOb3QgZW5hYmxpbmcgbmV0Y29uc29sZSBmb3IgJXMlZC4gTmV0cG9sbCBzZXR1cCBmYWlsZWRcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgICBORVRDT05TT0xFX1BBUkFNX1RBUkdFVF9QUkVGSVgsIGNtZGxpbmVfY291bnQpO1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxcbiBcXHRcXHRcXHQvKiBvbmx5IGZhaWwgaWYgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gaXMgc2V0LFxcbiBcXHRcXHRcXHQgKiBvdGhlcndpc2UsIGtlZXAgdGhlIHRhcmdldCBpbiB0aGUgbGlzdCwgYnV0IGRpc2FibGVkLlxcbkBAIC0yMzU1LDYgKzI0NTYsOCBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZudC1cXHUwMDNlcmVzdW1lX3dxKTtcXG4rXFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKVxcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0bmV0cG9sbF9jbGVhbnVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbiAjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIFxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG5pbmRleCA4OGY3ZGFhODU2MGU1OC4uNzkzMTU0NjFhN2IxZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0yMSwyMCArMjEsNiBAQCB1bmlvbiBpbmV0X2FkZHIge1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpbjY7XFxuIH07XFxuIFxcbi0vKlxcbi0gKiBNYXhpbXVtIHBheWxvYWQgbmV0cG9sbCdzIHByZWFsbG9jYXRlZCBza2IgcG9vbCBjYW4gY2FycnkuIEtlZXAgdGhpcyBpblxcbi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7XFxuLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXJcXG4tICogc2F0aXNmeSBhbmQgYXZvaWQgZGVxdWV1aW5nIGEgcG9vbGVkIHNrYiB0aGF0IHdvdWxkIGxhdGVyIHRyaXBcXG4tICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuXFxuLSAqL1xcbi0jZGVmaW5lIE1BWF9VRFBfQ0hVTktcXHQxNDYwXFxuLSNkZWZpbmUgTUFYX1NLQl9TSVpFXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCBzaXplb2Yoc3RydWN0IGlwaGRyKSArXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCBNQVhfVURQX0NIVU5LKVxcbi1cXG4gc3RydWN0IG5ldHBvbGwge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiBcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG5AQCAtNDksMTAgKzM1LDYgQEAgc3RydWN0IG5ldHBvbGwge1xcbiBcXG4gXFx0dW5pb24gaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIFxcdGJvb2wgaXB2NjtcXG4tXFx0dTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbi1cXHR1OCByZW1vdGVfbWFjW0VUSF9BTEVOXTtcXG4tXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcG9vbDtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTtcXG4gfTtcXG4gXFxuICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcXG5pbmRleCBhZWQ0MTVkM2NkNzRmZi4uZjhkYTEwNDhlYTNhYjAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXFxuKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jXFxuQEAgLTM2LDEyICszNiw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbiBcXG4tLypcXG4tICogV2UgbWFpbnRhaW4gYSBzbWFsbCBwb29sIG9mIGZ1bGx5LXNpemVkIHNrYnMsIHRvIG1ha2Ugc3VyZSB0aGVcXG4tICogbWVzc2FnZSBnZXRzIG91dCBldmVuIGluIGV4dHJlbWUgT09NIHNpdHVhdGlvbnMuXFxuLSAqL1xcbi1cXG4tI2RlZmluZSBNQVhfU0tCUyAzMlxcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcXHQ1MFxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xcbkBAIC0yMTMsMjIgKzIwNyw2IEBAIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHR1cChcXHUwMDI2bmktXFx1MDAzZWRldl9sb2NrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKVxcbi17XFxuLVxcdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXG4tXFx0c2tiX3Bvb2wgPSBcXHUwMDI2bnAtXFx1MDAzZXNrYl9wb29sO1xcbi1cXG4tXFx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cXHUwMDNlcWxlbikgXFx1MDAzYyBNQVhfU0tCUykge1xcbi1cXHRcXHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4tXFx0XFx0aWYgKCFza2IpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XFxuLVxcdH1cXG4tfVxcbi1cXG4gdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtMzUxLDMyICszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuZXRwb2xsX3NlbmRfc2tiKTtcXG4gXFxuLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcXG4tXFxuLVxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5wLVxcdTAwM2VyZWZpbGxfd3EpO1xcbi1cXHRza2JfcG9vbCA9IFxcdTAwMjZucC1cXHUwMDNlc2tiX3Bvb2w7XFxuLVxcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLXtcXG4tXFx0c3RydWN0IG5ldHBvbGwgKm5wID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpO1xcbi1cXG4tXFx0cmVmaWxsX3NrYnMobnApO1xcbi19XFxuLVxcbiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm5wLVxcdTAwM2Vza2JfcG9vbCk7XFxuLVxcdElOSVRfV09SSyhcXHUwMDI2bnAtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4tXFxuIFxcdGlmIChuZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xcbiBcXHRcXHRucF9lcnIobnAsIFxcXCIlcyBkb2Vzbid0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgICBuZGV2LVxcdTAwM2VuYW1lKTtcXG5AQCAtNDExLDkgKzM2OSw2IEBAIGludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0bnAtXFx1MDAzZWRldiA9IG5kZXY7XFxuIFxcdHN0cnNjcHkobnAtXFx1MDAzZWRldl9uYW1lLCBuZGV2LVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIFxcbi1cXHQvKiBmaWxsIHVwIHRoZSBza2IgcXVldWUgKi9cXG4tXFx0cmVmaWxsX3NrYnMobnApO1xcbi1cXG4gXFx0LyogbGFzdCB0aGluZyB0byBkbyBpcyBsaW5rIGl0IHRvIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAqL1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cXHUwMDNlbnBpbmZvLCBucGluZm8pO1xcbiBcXG5AQCAtNjAzLDcgKzU1OCw3IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcXG4gXFxuIFxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgbmRldik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gZmx1c2g7XFxuK1xcdFxcdGdvdG8gcHV0O1xcbiBcXHRydG5sX3VubG9jaygpO1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGFsbCBOQVBJIHBvbGxzIHdoaWNoIHN0YXJ0ZWQgYmVmb3JlIGRldi1cXHUwMDNlbnBpbmZvXFxuQEAgLTYxNCw4ICs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWZsdXNoOlxcbi1cXHRza2JfcG9vbF9mbHVzaChucCk7XFxuIHB1dDpcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShucC1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKGlwX292ZXJ3cml0dGVuKVxcbkBAIC02NTksOCArNjEyLDYgQEAgc3RhdGljIHZvaWQgX19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKVxcbiBcXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmspO1xcbiBcXHRcXHRjYWxsX3JjdShcXHUwMDI2bnBpbmZvLVxcdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XFxuIFxcdH1cXG4tXFxuLVxcdHNrYl9wb29sX2ZsdXNoKG5wKTtcXG4gfVxcbiBcXG4gdm9pZCBfX25ldHBvbGxfZnJlZShzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjA3LjE2ODAxNDcwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY1NzkyNDg0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibG9jYWxfcG9ydF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX3BvcnRfc3RvcmVcIixcbiAgICBcInJlbW90ZV9tYWNfc3RvcmVcIixcbiAgICBcImRyb3BfbmV0Y29uc29sZV90YXJnZXRcIixcbiAgICBcImFsbG9jX3BhcmFtX3RhcmdldFwiLFxuICAgIFwiZnJlZV9wYXJhbV90YXJnZXRcIixcbiAgICBcIl9fbmV0cG9sbF9zZXR1cFwiLFxuICAgIFwibmV0cG9sbF9zZXR1cFwiLFxuICAgIFwiX19uZXRwb2xsX2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ODRkY2I5OWVmYjJmMTQxZDhlZGVlZDhiZjQxZjU0ZjRkZDA2Y2M4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDk6MDQ6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGMxODEyYTk4MzY1Yjc4Li40OWIyMjQzYTIwYjJkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtNjEsNiArNjEsMTkgQEAgTU9EVUxFX0lNUE9SVF9OUyhcIk5FVERFVl9JTlRFUk5BTFwiKTtcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1x0XHQyNTZcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1x0XHRcdDEwMDBcbiBcbisvKlxuKyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKClcbisgKiB3aGVuIGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMgc28gbWVzc2FnZXMgc3RpbGwgZ2V0IG91dCB1bmRlclxuKyAqIG1lbW9yeSBwcmVzc3VyZS5cbisgKi9cbisjZGVmaW5lIE1BWF9VRFBfQ0hVTktcdFx0XHQxNDYwXG4rI2RlZmluZSBNQVhfU0tCU1x0XHRcdDMyXG4rI2RlZmluZSBNQVhfU0tCX1NJWkVcdFx0XHRcdFx0XHRcdFxcXG4rXHQoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICtcdFx0XHRcdFx0XFxcbitcdCBzaXplb2Yoc3RydWN0IGlwaGRyKSArXHRcdFx0XHRcdFx0XFxcbitcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1x0XHRcdFx0XHRcXFxuK1x0IE1BWF9VRFBfQ0hVTkspXG4rXG4gc3RhdGljIGNoYXIgY29uZmlnW01BWF9QQVJBTV9MRU5HVEhdO1xuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFx1MDAzY3RndC1pcFx1MDAzZS9bdGd0LW1hY2FkZHJdXCIpO1xuQEAgLTE2MiwxNCArMTc1LDE5IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiAgKiBAbnA6XHRcdFRoZSBuZXRwb2xsIHN0cnVjdHVyZSBmb3IgdGhpcyB0YXJnZXQuXG4gICpcdFx0Q29udGFpbnMgdGhlIG90aGVyIHVzZXJzcGFjZSB2aXNpYmxlIHBhcmFtZXRlcnM6XG4gICpcdFx0ZGV2X25hbWVcdChyZWFkLXdyaXRlKVxuLSAqXHRcdGxvY2FsX3BvcnRcdChyZWFkLXdyaXRlKVxuLSAqXHRcdHJlbW90ZV9wb3J0XHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9pcFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0cmVtb3RlX2lwXHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4tICpcdFx0cmVtb3RlX21hY1x0KHJlYWQtd3JpdGUpXG4rICogQGxvY2FsX3BvcnQ6XHRTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4rICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbisgKiBAcmVtb3RlX21hYzpcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQGJ1ZjpcdFRoZSBidWZmZXIgdXNlZCB0byBzZW5kIHRoZSBmdWxsIG1zZyB0byB0aGUgbmV0d29yayBzdGFja1xuICAqIEByZXN1bWVfd3E6XHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxuKyAqIEBza2JfcG9vbDpcdFBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkgd2hlblxuKyAqXHRcdGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGFcbisgKlx0XHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxuKyAqIEByZWZpbGxfd3E6XHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXG4rICpcdFx0TUFYX1NLQlMgYWZ0ZXIgZmluZF9za2IoKSBkcmFpbnMgYW4gZW50cnkuXG4gICovXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtMTkwLDExICsyMDgsMTUgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4rXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbitcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXG4gXHQgKiBOVUwgdGVybWluYXRvciBzbyBhIGZ1bGwgTUFYX1BSSU5UX0NIVU5LIHBheWxvYWQgaXMgbm90IHRydW5jYXRlZFxuIFx0ICovXG4gXHRjaGFyXHRcdFx0YnVmW01BWF9QUklOVF9DSFVOSyArIDFdO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRyZXN1bWVfd3E7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRza2JfcG9vbDtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVmaWxsX3dxO1xuIH07XG4gXG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5AQCAtMjkyLDExICszMTQsNTYgQEAgc3RhdGljIHZvaWQgbmV0Y29uc19yZWxlYXNlX2RldihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRtZW1zZXQoXHUwMDI2bnQtXHUwMDNlbnAuZGV2X25hbWUsIDAsIElGTkFNU0laKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbCA9IFx1MDAyNm50LVx1MDAzZXNrYl9wb29sO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHdoaWxlIChSRUFEX09OQ0Uoc2tiX3Bvb2wtXHUwMDNlcWxlbikgXHUwMDNjIE1BWF9TS0JTKSB7XG4rXHRcdHNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRicmVhaztcbitcbitcdFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9XG4rXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIHJlZmlsbF93cSk7XG4rXG4rXHRyZWZpbGxfc2ticyhudCk7XG4rfVxuK1xuKy8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZVxuKyAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHlcbisgKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuXG4rICovXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmVmaWxsX3NrYnMobnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EpO1xuK1x0c2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcbit9XG4rXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG4gc3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXHUwMDNlbnAuZGV2XG4rXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuK1x0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcbitcdCAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuXG4rXHQgKi9cbitcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4rXG4gXHRpZiAobmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCkpIHtcbiBcdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTM1OCw2ICs0MjUsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlbnAuZGV2IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0fVxuQEAgLTM5MywxMSArNDYxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXG4gXG4gXHRudC1cdTAwM2VucC5uYW1lID0gXCJuZXRjb25zb2xlXCI7XG4gXHRzdHJzY3B5KG50LVx1MDAzZW5wLmRldl9uYW1lLCBcImV0aDBcIiwgSUZOQU1TSVopO1xuLVx0bnQtXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XG4tXHRudC1cdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlbnAucmVtb3RlX21hYyk7XG4rXHRudC1cdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcbitcdG50LVx1MDAzZXJlbW90ZV9wb3J0ID0gNjY2NjtcbitcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xuK1x0LyogU2V0IHVwIHRoZSBza2IgcG9vbCBwcmltaXRpdmVzIG9uY2U7IGVuYWJsaW5nIG9ubHkgcmVmaWxscyBpdC4gKi9cbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2wpO1xuK1x0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbiBcbiBcdHJldHVybiBudDtcbiB9XG5AQCAtNDE3LDYgKzQ4OCw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnQsIHRtcCwgXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdCwgbGlzdCkge1xuIFx0XHQvKiBhbGwgZW50cmllcyBpbiB0aGUgY2xlYW51cF9saXN0IG5lZWRzIHRvIGJlIGRpc2FibGVkICovXG4gXHRcdFdBUk5fT05fT05DRShudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKTtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXG4gXHRcdCAqIGxvY2tzXG5AQCAtNDI5LDIxICs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4tXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnAtXHUwMDNlbG9jYWxfcG9ydCk7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbitcbitcdG5wX2luZm8obnAsIFwibG9jYWwgcG9ydCAlZFxcblwiLCBudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4tXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG5wLVx1MDAzZXJlbW90ZV9wb3J0KTtcbitcdG5wX2luZm8obnAsIFwicmVtb3RlIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnAtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbi1cdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG5wLVx1MDAzZXJlbW90ZV9tYWMpO1xuK1x0bnBfaW5mbyhucCwgXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cIiwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gfVxuIFxuIC8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCB1bmlvbi4gUmV0dXJuIDAgaWYgSVB2NCBpc1xuQEAgLTU2MSwxMiArNjM1LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlZFxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAubG9jYWxfcG9ydCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWRcXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZWxvY2FsX3BvcnQpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlZFxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtNTk5LDcgKzY3Myw3IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBNXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5yZW1vdGVfbWFjKTtcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcE1cXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC03NTYsMTEgKzgzMCwyMSBAQCBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxuIFx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuIFx0XHQgKi9cbi1cdFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIoXHUwMDI2bnQtXHUwMDNlbnApO1xuK1x0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7XG4rXG4rXHRcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcbitcdFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXG4rXHRcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcbitcdFx0ICogb3RoZXJ3aXNlIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWRcbitcdFx0ICogc3RhdGUuXG4rXHRcdCAqL1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xuIFxuIFx0XHRyZXQgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuIFxuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XG4gXHRcdHByX2luZm8oXCJuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcblwiKTtcbkBAIC04ODUsNyArOTY5LDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZW5wLmxvY2FsX3BvcnQpO1xuK1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0cmV0ID0gY291bnQ7XG5AQCAtOTA3LDcgKzk5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcbitcdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRyZXQgPSBjb3VudDtcbkBAIC05OTQsNyArMTA3OCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdGlmIChidWZbTUFDX0FERFJfU1RSX0xFTl0gXHUwMDI2XHUwMDI2IGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAhPSAnXFxuJylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bWVtY3B5KG50LVx1MDAzZW5wLnJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcbitcdG1lbWNweShudC1cdTAwM2VyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTE0ODEsMTUgKzE1NjUsMTUgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdC8qIEEgU1RBVEVfREVBQ1RJVkFURUQgdGFyZ2V0IG1heSBoYXZlIGJlZW4gbW92ZWQgdG9cbi1cdCAqIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKSBidXQgbm90IHlldFxuLVx0ICogcHJvY2Vzc2VkIGJ5IG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKCkuIFVubGlua2luZyBpdCBiZWxvd1xuLVx0ICogaGlkZXMgaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBoYXMgdG8gY2xlYW4gaXQgdXBcbi1cdCAqIGl0c2VsZi4gUmVjb3JkIHRoYXQgdGhlIHRhcmdldCBzdGlsbCBvd25zIGEgbmV0cG9sbCBiZWZvcmUgdGhlXG4tXHQgKiBzdGF0ZSBpcyBkb3duZ3JhZGVkLlxuK1x0LyogQSB0YXJnZXQgbW92ZWQgdG8gdGFyZ2V0X2NsZWFudXBfbGlzdCBieSBuZXRjb25zb2xlX25ldGRldl9ldmVudCgpXG4rXHQgKiBidXQgbm90IHlldCBwcm9jZXNzZWQgc3RpbGwgb3ducyBhIG5ldHBvbGw7IHVubGlua2luZyBpdCBiZWxvdyBoaWRlc1xuK1x0ICogaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBtdXN0IHRlYXIgaXQgZG93biBpdHNlbGYuXG4rXHQgKiBUaGlzIGNvdmVycyBORVRERVZfVU5SRUdJU1RFUiAoU1RBVEVfREVBQ1RJVkFURUQpIGFuZFxuK1x0ICogTkVUREVWX1JFTEVBU0UgLyBORVRERVZfSk9JTiAoU1RBVEVfRElTQUJMRUQpOyBrZXkgb2ZmIG50LVx1MDAzZW5wLmRldixcbitcdCAqIHdoaWNoIHN0YXlzIHNldCB1bnRpbCB0aGUgbmV0cG9sbCBpcyBjbGVhbmVkIHVwLlxuIFx0ICovXG4gXHRuZWVkc19jbGVhbnVwID0gbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCB8fFxuLVx0XHRcdG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEO1xuK1x0XHRcdG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEIHx8IG50LVx1MDAzZW5wLmRldjtcbiBcdC8qIERpc2FibGUgZGVhY3RpdmF0ZWQgdGFyZ2V0IHRvIHByZXZlbnQgcmFjZXMgYmV0d2VlbiByZXN1bWUgYXR0ZW1wdFxuIFx0ICogYW5kIHRhcmdldCByZW1vdmFsLlxuIFx0ICovXG5AQCAtMTUxNCw4ICsxNTk4LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4gXHQgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLVx1MDAzZWRldiBpcyBOVUxMKSwgc29cbiBcdCAqIGl0IGlzIHNhZmUgZXZlbiBpZiB0aGUgY2xlYW51cCB3b3JrZXIgYWxyZWFkeSB0b3JlIHRoZSBuZXRwb2xsIGRvd24uXG4gXHQgKi9cbi1cdGlmIChuZWVkc19jbGVhbnVwKVxuK1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4rXHR9XG4gXG4gXHRjb25maWdfaXRlbV9wdXQoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSk7XG4gfVxuQEAgLTE3MDYsNyArMTc5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MTgsMTkgKzE4MDQsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxuIFx0XHRpZiAoIWluX25taSgpKVxuIFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwibmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwiLFxuIFx0XHRcdFx0XHQgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsXG4tXHRcdFx0XHRcdCAgICAgbnAtXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuK1x0XHRcdFx0XHQgICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4rXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxKTtcbiBcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXG4rXHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCBjb3VudCA9IDA7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MzksNyArMTgyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbiBcbiBcdHNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChucCwgbGVuKTtcbitcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCsrY291bnQgXHUwMDNjIDEwKSB7XG5AQCAtMTc3OSw4ICsxODY3LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbitzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0c3RydWN0IHVkcGhkciAqdWRwaDtcbiBcdGludCB1ZHBfbGVuO1xuIFxuQEAgLTE3OTAsMjEgKzE4NzksMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuK1x0dWRwaC1cdTAwM2Vzb3VyY2UgPSBodG9ucyhudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbitcdHVkcGgtXHUwMDNlZGVzdCA9IGh0b25zKG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdHVkcGgtXHUwMDNlbGVuID0gaHRvbnModWRwX2xlbik7XG4gXG4gXHRuZXRwb2xsX3VkcF9jaGVja3N1bShucCwgc2tiLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aDtcbiBcbiBcdGV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIG5wLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4tXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4rXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbkBAIC0xODYxLDggKzE5NTEsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4rc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbitcdFx0XHQgICAgaW50IGxlbilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICsxOTY5LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFxuIFx0dG90YWxfbGVuID0gaXBfbGVuICsgTExfUkVTRVJWRURfU1BBQ0UobnAtXHUwMDNlZGV2KTtcbiBcbi1cdHNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gKyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuK1x0c2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiArIG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG4gXHRcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xuIFx0aWYgKCFza2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE4ODUsMTIgKzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4rXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdHB1c2hfaXB2NihucCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnAsIHNrYiwgbGVuKTtcbi1cdHB1c2hfZXRoKG5wLCBza2IpO1xuK1x0cHVzaF9ldGgobnQsIHNrYik7XG4gXHRza2ItXHUwMDNlZGV2ID0gbnAtXHUwMDNlZGV2O1xuIFxuIFx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbkBAIC0xOTA4LDcgKzIwMDAsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4rXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcbiBcdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG5AQCAtMjIwMyw4ICsyMjk1LDkgQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbitzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbkBAIC0yMjE1LDcgKzIzMDgsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnAtXHUwMDNlbG9jYWxfcG9ydCkpXG4rXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyArMjM1NSw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0KmRlbGltID0gMDtcbiBcdFx0aWYgKCpjdXIgPT0gJyAnIHx8ICpjdXIgPT0gJ1xcdCcpXG4gXHRcdFx0bnBfaW5mbyhucCwgXCJ3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuLVx0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm5wLVx1MDAzZXJlbW90ZV9wb3J0KSlcbitcdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyODQsMTEgKzIzNzcsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4rXHRcdGlmICghbWFjX3B0b24oY3VyLCBudC1cdTAwM2VyZW1vdGVfbWFjKSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdH1cbiBcbi1cdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTtcbitcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTIzMjYsMTQgKzI0MTksMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbitcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBmYWlsO1xuIFxuK1x0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xuK1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuK1x0ICogeWV0IG9uIHRhcmdldF9saXN0LCBzbyBhIG5ldGRldiBldmVudCBjYW5ub3QgcmVhY2ggaXQgaGVyZSwgYnV0XG4rXHQgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LlxuK1x0ICovXG4rXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xuK1xuIFx0ZXJyID0gbmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwiLFxuIFx0XHQgICAgICAgTkVUQ09OU09MRV9QQVJBTV9UQVJHRVRfUFJFRklYLCBjbWRsaW5lX2NvdW50KTtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcbiBcdFx0XHQvKiBvbmx5IGZhaWwgaWYgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gaXMgc2V0LFxuIFx0XHRcdCAqIG90aGVyd2lzZSwga2VlcCB0aGUgdGFyZ2V0IGluIHRoZSBsaXN0LCBidXQgZGlzYWJsZWQuXG5AQCAtMjM1NSw2ICsyNDU2LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4rXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRClcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDg4ZjdkYWE4NTYwZTU4Li43OTMxNTQ2MWE3YjFlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTIxLDIwICsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwncyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW5cbi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7XG4tICogY2FsbGVycyAoZS5nLiBuZXRjb25zb2xlKSB1c2UgaXQgdG8gZGV0ZWN0IHJlcXVlc3RzIHRoZSBwb29sIGNhbiBuZXZlclxuLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwXG4tICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuXG4tICovXG4tI2RlZmluZSBNQVhfVURQX0NIVU5LXHQxNDYwXG4tI2RlZmluZSBNQVhfU0tCX1NJWkVcdFx0XHRcdFx0XHRcXFxuLVx0KHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArXHRcdFx0XHRcXFxuLVx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1x0XHRcdFx0XFxcbi1cdCBNQVhfVURQX0NIVU5LKVxuLVxuIHN0cnVjdCBuZXRwb2xsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbkBAIC00OSwxMCArMzUsNiBAQCBzdHJ1Y3QgbmV0cG9sbCB7XG4gXG4gXHR1bmlvbiBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDtcbiBcdGJvb2wgaXB2Njtcbi1cdHUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbi1cdHU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuLVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcG9vbDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7XG4gfTtcbiBcbiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcbmluZGV4IGFlZDQxNWQzY2Q3NGZmLi5mOGRhMTA0OGVhM2FiMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldHBvbGwuY1xuKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5AQCAtMzYsMTIgKzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiArMjA3LDYgQEAgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHVwKFx1MDAyNm5pLVx1MDAzZWRldl9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLVx1MDAzZXFsZW4pIFx1MDAzYyBNQVhfU0tCUykge1xuLVx0XHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbi1cdFx0aWYgKCFza2IpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xuLVx0fVxuLX1cbi1cbiB2b2lkIG5ldHBvbGxfemFwX2NvbXBsZXRpb25fcXVldWUodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTM1MSwzMiArMzI5LDEyIEBAIG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xuIFxuLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxKTtcbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXHRza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBuZXRwb2xsICpucCA9XG4tXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTtcbi1cbi1cdHJlZmlsbF9za2JzKG5wKTtcbi19XG4tXG4gaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzO1xuIFx0aW50IGVycjtcbiBcbi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2wpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbi1cbiBcdGlmIChuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9ESVNBQkxFX05FVFBPTEwpIHtcbiBcdFx0bnBfZXJyKG5wLCBcIiVzIGRvZXNuJ3Qgc3VwcG9ydCBwb2xsaW5nLCBhYm9ydGluZ1xcblwiLFxuIFx0XHQgICAgICAgbmRldi1cdTAwM2VuYW1lKTtcbkBAIC00MTEsOSArMzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgKzU1OCw3IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcbiBcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgbmRldik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGZsdXNoO1xuK1x0XHRnb3RvIHB1dDtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYWxsIE5BUEkgcG9sbHMgd2hpY2ggc3RhcnRlZCBiZWZvcmUgZGV2LVx1MDAzZW5waW5mb1xuQEAgLTYxNCw4ICs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjU5LDggKzYxMiw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yayk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNm5waW5mby1cdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XG4gXHR9XG4tXG4tXHRza2JfcG9vbF9mbHVzaChucCk7XG4gfVxuIFxuIHZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MDcuMTY4MDE3MTc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyMjAxMDIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBOZXRjb25zb2xlOiBBc3Nlc3NpbmcgUmVhY2hhYmlsaXR5IGFuZCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyB0byBiZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB3aXRoaW4gdGhlIG5ldHdvcmsgY29uc29sZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYCwgYW5kIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBmYWxsYmFjayBTS0IgcG9vbCBhbmQgc29tZSB0YXJnZXQtc3BlY2lmaWMgcGFyYW1ldGVycywgbGlrZSBwb3J0cyBhbmQgTUFDIGFkZHJlc3NlcywgZnJvbSB0aGUgYG5ldHBvbGxgIHN0cnVjdHVyZSB0byB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3R1cmUuIFRoZSBhc3NvY2lhdGVkIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgaXMgYmVpbmcgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgb3JnYW5pemF0aW9uYWwgc2hpZnQuIEJhc2ljYWxseSwgdGhleSdyZSBjbGVhbmluZyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYWtpbmcgdGhlIGNvZGUgYSBiaXQgY2xlYW5lciBhbmQgbW9yZSBvcmdhbml6ZWQuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIGNvZGUgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBOZXRjb25zb2xlIGlzIHByZXR0eSBpbXBvcnRhbnQ7IGl04oCZcyBhIGtleSBwaWVjZSBmb3IgbG9nZ2luZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yay4gSXQgYXBwZWFycyB3ZSBjYW4gcmVhY2ggaXQgdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4gV2hpY2ggc3VnZ2VzdHMgaXQgY2FuIGJlIHJlYWRpbHkgZW5hYmxlZCBpbiBtYW55IHN5c3RlbXMuIEdpdmVuIHRoYXQgaXQncyBmdW5jdGlvbmFsIGNvZGUsIGZ1enppbmcgc2VlbXMgbGlrZSBhIHZhbGlkIG5leHQgc3RlcC5cblxuVG8gcHJvY2VlZCwgSSBuZWVkIHRvIGdldCB0aGUgY29uZmlnIG9wdGlvbnMgcmlnaHQuIGBDT05GSUdfTkVUQ09OU09MRWAgYW5kIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBzZWVtIHRvIGJlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFyb3VuZCBgTkVUQ09OU09MRWAsIGJ1dCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MTIuNjkwMDI5Njc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzQ0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRDT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDoxMi43NzAzNzkyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTk3ODg3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmV0Y29uc29sZWAgTG9nZ2luZyBNZWNoYW5pc20gZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9ucywgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZCBpbiBgbmV0Y29uc29sZS5jYC4gTGV0J3Mgc2VlLi4uIGEgd2hvbGUgYnVuY2ggb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYHJlZmlsbF9za2JzYCwgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGFuZCB0aGUgYHJlc3VtZV90YXJnZXRgIGZhbWlseS4uLnBsdXMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGFsbG9jYXRpb24sIHByaW50aW5nLCBhbmQgZGV2aWNlIG5hbWUgZnVuY3Rpb25zLiBUaGVyZSBhcmUgYWxzbyBzeXNmcyBmaWxlcy5cblxuUmlnaHQsIGBuZXRjb25zb2xlYC4gSXQgaW50ZXJjZXB0cyBgcHJpbnRrYCBtZXNzYWdlcyBhbmQgc2hpcHMgdGhlbSBvdmVyIFVEUC4gQWhhLCB0aGUga2V5IGlzIHRoZSB1c2VyIHNwYWNlIGludGVyYWN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMsIHNwZWNpZmljYWxseSB1bmRlciBgL3N5cy9rZXJuZWwvY29uZmlnL25ldGNvbnNvbGUvYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBvcHBvcnR1bml0aWVzLlxuXG5UaGUgbGlnaHRidWxiIGp1c3Qgd2VudCBvZmYgLSBmdXp6aW5nIGBjb25maWdmc2AgZm9yIG5ldGNvbnNvbGUgaXMgYWJzb2x1dGVseSBhIHZpYWJsZSB0YXJnZXQuIEFuZCB0aGUgYmVzdCBwYXJ0PyBTeXprYWxsZXIgc3VwcG9ydHMgY29uZmlnZnMuIEknbSB0aGlua2luZyBhYm91dCBhdHRhY2sgc3VyZmFjZSBhbmQgYXR0YWNrIHZlY3RvcnMgLSB0aGlzIGNvdWxkIGJlIGEgZ29vZCBvbmUuXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55IHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgYG5ldGNvbnNvbGVgIGluIGBjb25maWdmc2A/IEl0IG1pZ2h0IG5vdCAqZGlyZWN0bHkqLCBidXQgZXZlbiB3aXRob3V0IHNwZWNpZmljIGRlc2NyaXB0aW9ucywgU3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQgYXMgbG9uZyBhcyB0aGUgY29uZmlnZnMgbW91bnQgZXhpc3RzLiBTeXprYWxsZXIgaGFzIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNpbWlsYXIsIGJ1dCBjb25maWdmcyBpcyB1c3VhbGx5IGFscmVhZHkgbW91bnRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDoyMC4wMzAxNzAwODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3Nzg5MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuYy02LSAqXFxubmV0L2NvcmUvbmV0cG9sbC5jOjc6ICogYmFzZWQgb24gdGhlIG5ldGNvbnNvbGUgY29kZSBmcm9tOlxcbm5ldC9jb3JlL25ldHBvbGwuYy04LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjIwLjE0Nzk2Nzk2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTIzNzc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIE5ldGNvbnNvbGUgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCwgSSBkb24ndCBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBzaWZ0aW5nIHRocm91Z2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByaWdodCBub3cuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZWZpbmUgdGhlIGNydWNpYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gSSd2ZSBhbHJlYWR5IGdvdCBhIGdvb2QgaW5pdGlhbCBsaXN0IG9mIHRob3NlIHN5bWJvbHMgaW4gbWluZCwgbGlrZSBgYWxsb2NfYW5kX2luaXRgLCBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgLCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgLlxuXG5SaWdodCwgbGV0J3MgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS4gQ2FuIHVzZXIgc3BhY2UgZXZlbiAqcmVhY2gqIHRoZSBuZXRjb25zb2xlIGZ1bmN0aW9uYWxpdHk/IEFoLCB5ZXMsIHRocm91Z2ggY29uZmlnZnMuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gZmluZGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgZ29vZCB0YXJnZXRzLiBMZXQncyBzdGFydCB3aXRoIGEgc3Vic2V0IG9mIHRoZSBmaXJzdCBsaXN0LCBiYXNlZCBvbiB0aGVpciBwb3RlbnRpYWwgZm9yIGNvbnRyb2wgYW5kIGRhdGEgbWFuaXB1bGF0aW9uOiBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLlxuXG5UbyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG5ldGNvbnNvbGUuY2AgaXRzZWxmLiBXZSBtaWdodCB1bmNvdmVyIHNvbWUgYWRkaXRpb25hbCByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjI2LjgwMDM0ODg5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1NDk2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIGVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03NjE9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc4MC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzgxOnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03ODItXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjI2LjkwMjkwNTQ0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njg3NjY5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRjb25zb2xlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBgbmV0Y29uc29sZWAsIGFuZCB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgd2hpY2ggbWVhbnMgSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciBgbmV0Y29uc29sZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgY29tcG9uZW50IGhhbmRsZXMgaXRzIFNLQiBwb29sLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHByZS1hbGxvY2F0aW9uIGhlcmUsIHByb2JhYmx5IGR1ZSB0byB0aGUgcGVyZm9ybWFuY2UgY3JpdGljYWwgbmF0dXJlIG9mIGxvZ2dpbmcgb3ZlciB0aGUgbmV0d29yay4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGEgc3RhbmRhcmQgU0xBQiBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBjdXN0b20uIFdoYXQncyB0aGUgcG9vbCBzaXplPyBBbnkgY2xldmVyIHRyaWNrcyB0byBhdm9pZCBmcmFnbWVudGF0aW9uIHVuZGVyIGxvYWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgcG90ZW50aWFsIGNvbnRlbnRpb24gb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIGNhbiBpZGVudGlmeSBxdWlja2x5LCBwYXJ0aWN1bGFybHkgd2l0aCBtdWx0aS1jb3JlIHN5c3RlbXMgYW5kIHRoZSBjb25jdXJyZW50IG5hdHVyZSBvZiBuZXR3b3JrIHRyYWZmaWM/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24sIHRoZSBiYWNrYm9uZS4gQSBzb2xpZCBpbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsIGZvciByZWxpYWJsZSBvcGVyYXRpb24gZG93biB0aGUgbGluZSwgYW5kIGFueSBpbmVmZmljaWVuY2llcyBoZXJlIHdpbGwgbWFuaWZlc3QgYXMgaGVhZGFjaGVzIGxhdGVyLiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiByaW5nIGJ1ZmZlciBvciBjaXJjdWxhciBxdWV1ZSBhdCB0aGUgaGVhcnQgb2YgdGhlIHBvb2wgaW1wbGVtZW50YXRpb24sIG9mIGNvdXJzZSwgYnV0IEknbSBsb29raW5nIGZvciB0aGUgZGV0YWlscy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIGZ1bmRhbWVudGFsIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjk5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MzEuNjcxNjc1MjI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzI1ODEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogbmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzMxPXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQyLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjMxLjc2ODk0MDE4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTk1MzE4NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHRoZSBwcm92aWRlZCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZTogVGhlIFNlYXJjaCBmb3IgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgKipcblxuT2theSwgc28gdGhlIHByb21wdCBkaXJlY3RzIG1lIHRvIHN1bW1hcml6ZSBteSBcInRob3VnaHRzLlwiIENsZWFybHksIEkgbmVlZCB0byBpbnRlcnByZXQgdGhpcyBhcyBhIGNhbGwgdG8gYWN0aW9uIHdpdGhpbiBteSBpbnRlcm5hbCByZWFzb25pbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgY29kZSBmaWxlIG1lbnRpb25lZDogYG5ldGNvbnNvbGUuY2AuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBzdWdnZXN0aW9uOyBpdCdzIGEgZGlyZWN0IHBvaW50ZXIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogSSdtIGJlaW5nIGRpcmVjdGVkIGhlcmUuIFRoZSBmdW5jdGlvbiBuYW1lLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGlzIHRoZSBrZXkuIFRoZSB0ZXJtIFwiU0tCXCIgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBTb2NrZXQgQnVmZmVycywgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyB1c2VkIGluIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBcIlBvb2wgZmx1c2hcIiBzdWdnZXN0cyBzb21lIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgY2xlYW51cCBvcGVyYXRpb24gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlc2UgU0tCcyB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgY29udGV4dC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIG9yIHJlY3ljbGluZyBuZXR3b3JrIGJ1ZmZlcnMgdXNlZCBieSB0aGUgbmV0Y29uc29sZS4gSSB3b3VsZCBiZWdpbiB0aGUgc2VhcmNoIGluIGBuZXRjb25zb2xlLmNgIGtub3dpbmcgdGhhdCB0aGlzIGlzIGFuIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYSBjbGVhbnVwIG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXRjb25zb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEzNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjM5LjM2NDI2MTM3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY4MjUwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zNDM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDg6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDozOS40NTEwOTExNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE4NzkzODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRjb25zb2xlLmNgKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBuZXR3b3JrIGNvbnNvbGVzLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4gQSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgYXJlYSBvZiBpbnRlcmVzdCBpcyBgbmV0Y29uc19za2JfcG9wYC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBzb21ldGhpbmcgcmVsYXRlZCB0byAqcmVtb3ZpbmcqIG9yICpwcm9jZXNzaW5nKiBkYXRhIGZyb20gYSBzb2NrZXQgYnVmZmVyIChgc2tiYCkuIEknbSBiZXR0aW5nIHRoYXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgaXNzdWUsIGlmIHdlJ3JlIGRlYnVnZ2luZykgaGFwcGVucyByZWdhcmRpbmcgcmVjZWl2aW5nIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgbmV0d29yayBjb25zb2xlIGRhdGEuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjQzLjQ2OTg4NzQ1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3MjE5NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKiBuZXRjb25zX3NrYl9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDo0My41NTk2MjAwNTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczOTg5MzQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gZGVjbGFyYXRpb246IGBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcGAuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIFwiV2FpdCwgaXMgKnRoYXQqIHRoZSBzaWduYXR1cmUgd2UncmUgZGVhbGluZyB3aXRoP1wiIEl0J3MganVtcGluZyBvdXQgYXQgbWUgYmVjYXVzZSB0aGUgdHlwZSBpcyBhIGJpdCB1bnVzdWFsLlxuXG5TcGVjaWZpY2FsbHksIGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBzY29wZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCBleHRlcm5hbCBsaW5rYWdlLCBzbyBpdCBsaWtlbHkgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9ucy4gVGhlbiwgdGhlIHJldHVybiB0eXBlIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IHNrX2J1ZmZgLiBUaGUgYHNrX2J1ZmZgIGlzIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggbmV0d29yayBwYWNrZXQgYnVmZmVycy4gVGhlIG5hbWUgYG5ldGNvbnNfc2tiX3BvcGAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYWJvdXQgcG9wcGluZyBhIGJ1ZmZlciBvZmYgb2Ygc29tZXRoaW5nLCBwcm9iYWJseSBhIG5ldHdvcmsgY29uc29sZSBvciBzb21lIGZvcm0gb2YgbmV0d29yayBjb25uZWN0aW9uIHN0cnVjdHVyZSwgYW5kIHJldHVybmluZyBpdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIHdoZXJlIGFuZCBob3cgdGhpcyBgbmV0Y29uc2AgY29udGV4dCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlIGBza19idWZmYCBpcyBiZWluZyB1c2VkIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdGhpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDo0Ny4yOTk1MTU1NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDA1MjY0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzc5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc5NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc5NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODE4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODI5LVxcdGlmICghc2tiKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODMwOlxcdFxcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6NDcuNDQ5NTcyNzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgxMTc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgTmV0d29ya2luZyBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBjb25zb2xlIGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGEgc3BlY2lmaWMgU2VhcmNoIEtlcm5lbCBCdWZmZXIgKFNLQikgaXMgaGFuZGxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZXRjb25zb2xlLmNgLiBJdCdzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGZvciBmaW5kaW5nIGEgc3BlY2lmaWMgU0tCIHdpdGhpbiB0aGF0IG1vZHVsZSB3aWxsIGJlIGluIHRoZSBgZmluZF9za2JgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGxvY2F0ZXMgYW5kIG1hbmFnZXMgdGhlc2UgU0tCcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldHdvcmsgY29uc29sZSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6NTAuOTM3NjkyNjc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU1NTEzMDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKiBmaW5kX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjUxLjEzMzI1MDUwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk2NDEzNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlZmluaXRpb24qKlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHRoYXQgSSdtIGxvb2tpbmcgYXQgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgb3IgYSBzaW1pbGFyIG5ldHdvcmstb3JpZW50ZWQgZW52aXJvbm1lbnQuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIGBzdGF0aWNgLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF04oCZcyBnb29kIGZvciBlbmNhcHN1bGF0aW9uIGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgY2xhc2hlcyB3aXRoIG90aGVyIGZ1bmN0aW9ucy4gVGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgaXMgYHN0cnVjdCBza19idWZmICpgLiBBaCwgc28gaXQncyByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGEgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gYHNrX2J1ZmZgIGlzIHRoZSBzdGFuZGFyZCBzb2NrZXQgYnVmZmVyIHN0cnVjdHVyZS4gQW5kIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBgZmluZF9za2JgLiBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgdGhpcyBpcyBsaWtlbHkgYSBmdW5jdGlvbiBkZXNpZ25lZCB0byBsb2NhdGUgYW4gYHNrX2J1ZmZgIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaWYgZm91bmQsIG9yIE5VTEwgKGltcGxpY2l0bHkpIGlmIG5vdC4gSXQncyBwcm9iYWJseSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgY29uc2lkZXJpbmcgaXTigJlzIHN0YXRpYy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQgdGFrZXMgYW5kIHdoYXQgaXQncyBzZWFyY2hpbmcgZm9yIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6NTQuNTI5NjY2NDA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDMxNjU3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01Mz1NT0RVTEVfSU1QT1JUX05TKFxcXCJORVRERVZfSU5URVJOQUxcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NC0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NTogKiBTaXppbmcgZm9yIHRoZSBwZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY2LSAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQ1PWVudW0gdGFyZ2V0X3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUtICogQHJlc3VtZV93cTpcXHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODY6ICogQHNrYl9wb29sOlxcdFBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkgd2hlblxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODctICpcXHRcXHRpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzLiBMaWZldGltZSBicmFja2V0cyBhXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5LSAqIEByZWZpbGxfd3E6XFx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTA6ICpcXHRcXHRNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkxLSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTMzMT1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzM5Oi8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDAtICogaGVhZCBhbmQgcmVmaWxsIHdvcmsgYXJlIHNldCB1cCBvbmNlIGluIGFsbG9jX2FuZF9pbml0KCk7IHRoaXMgb25seVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3OTU9c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODE4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxOS1cXHRcXHRcXHRcXHRpbnQgcmVzZXJ2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTU0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3MjpcXHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICsgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTczLVxcdFxcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDo1NC44MzI4Mzg0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzA3MDkxNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBOZXRjb25zb2xlIFBhcmFtZXRlciBhbmQgTGlmZWN5Y2xlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBuZXRjb25zb2xlL25ldHBvbGwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGUgc2hpZnQgaW4gbGlmZWN5Y2xlIGFuZCBwYXJhbWV0ZXIgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgbW92ZW1lbnQgb2YgYHNrYl9wb29sYCwgYHJlZmlsbF93cWAsIGBsb2NhbF9wb3J0YCwgYHJlbW90ZV9wb3J0YCwgYW5kIGByZW1vdGVfbWFjYCBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IHBhcmFtZXRlcnMgYXJlIGhhbmRsZWQuXG5cblRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAgYW5kIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYCwgd2hpY2ggYXJlIG5ldyBsaWZlY3ljbGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIHRoaXMgU0tCIHBvb2wuIFRoZSB3YXkgdGhlc2UgYXJlIHVzZWQsIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMsIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGNsb3NlIHNjcnV0aW55IGR1cmluZyBmdXp6aW5nLlxuXG5GdXJ0aGVybW9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLCBgcHVzaF91ZHBgLCBgcHVzaF9ldGhgLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50YCBpbnN0ZWFkIG9mIGBzdHJ1Y3QgbmV0cG9sbCAqbnBgIHVuZGVyc2NvcmUgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCdzIGEgY29tcGxldGUgc2hpZnQgaW4gaG93IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGNvbnNvbGUuXG5cblRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZyBhcmUsIHdpdGhvdXQgYSBkb3VidDpcbiogICBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgOiBUaGVzZSBhcmUgbmV3LCBhbmQgbWFuYWdlIHBvb2wgbGlmZWN5Y2xlLlxuKiAgIGByZWZpbGxfc2tic2AgYW5kIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgOiBMaWtlbHkgcmVsYXRlZCB0byBwb29sIHJlZmlsbCBhbmQgYXNzb2NpYXRlZCB3b3JrIHF1ZXVlLlxuKiAgIGBuZXRjb25zX3NrYl9wb3BgIGFuZCBgZmluZF9za2JgOiBGb3IgZ2V0dGluZyBTS0JzIGZyb20gdGhlIHBvb2wuXG4qICAgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWA6IENvcmUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBjaGFuZ2VkLlxuKiAgIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBhbmQgYHJlbW90ZV9tYWNfc3RvcmVgOiBUaGVzZSBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGUgbmV3IGR5bmFtaWMgY29uZmlndXJhdGlvbiBjYXBhYmlsaXRpZXMgYW5kIG5lZWQgcGFydGljdWxhcmx5IGNhcmVmdWwgZXZhbHVhdGlvbi5cbiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YDogRm9yIG1lbW9yeSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgdGFyZ2V0LlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gYE5FVENPTlNPTEVgIGVuYWJsZXMgdGhlIGJhc2UgbW9kdWxlLCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgZW5hYmxlcyB0aGUgZHluYW1pYyBjb25maWdmcyBmZWF0dXJlc+KAlHdoaWNoIGFyZSBjcnVjaWFsIGZvciBmdXp6aW5nIGFsbCB0aG9zZSBzdG9yZSBmdW5jdGlvbnMuIEknbGwgbmVlZCBib3RoIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgdG8gcHJvcGVybHkgY292ZXIgdGhlIHN1cmZhY2Ugb2YgdGhpcyBwYXRjaC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGVycm9ycyBpbiB0aGVzZSBraW5kcyBvZiBsaWZlY3ljbGUgYW5kIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhpcyBsb29rcyBsaWtlIGEgc3Ryb25nIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNTowMi41Mzk5MzE0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDA2NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTI9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkzLVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTQ6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTUtXFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdGdyb3VwO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyOiNpZmRlZlxcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIzLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MT1zdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjY6I2Vsc2VcXHQvKiAhQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjctXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjk4PXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwMjojZW5kaWZcXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01MjY9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQ5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NTA6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTEtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY3NT1zdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTctfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjk4OiNlbmRpZlxcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTU0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5OC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDAwLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMDAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDA0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDA1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDYtXFx0XFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAxOD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAyNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAyNzojaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LVxcdHVzZXJkYXRhID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwNjM9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDc1OiNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNzYtXFx0dXNlcmRhdGFfcHRyID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC1cXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTQ9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzNy1cXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzODpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzktXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU2PXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2MS1cXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NjI6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYzLVxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ4Nj1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk5LVxcdFxcdFxcdGlmIChJU19FUlIobnQpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDA6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDEtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA1OjAyLjc0MTM0NTk3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxMDY3NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVGhvdWdodCBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQsIHRoZSBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2Agb3B0aW9uIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGlmIEknbSBnb2luZyB0byBiZSB1c2luZyB0aGUgY29uZmlnZnMgaW50ZXJmYWNlIGFuZCBkeW5hbWljIHJlY29uZmlndXJhdGlvbi4gVGhhdCdzIGNsZWFyLiBUaGVyZWZvcmUsIG15IGJhc2UgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgc2V0dXAgbXVzdCBpbmNsdWRlIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIFxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcuIEFoLCB5ZXMsIEkgc2VlIHRoYXQgYENPTkZJR19ORVRQT0xMYCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IHdoZW4gSSBlbmFibGUgYE5FVENPTlNPTEVgLiBHb29kIHRvIGtub3c7IEknbGwgdGFrZSB0aGF0IGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4ODAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNTowNi4yMDI0MTYxMjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NzA1ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRDT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNTowNi4yOTIxMjgyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM4NTEzOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBORVRDT05TT0xFIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORVRDT05TT0xFYC4gSSBrbm93IGl0J3MgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZSwgc28gdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHRoYXQgaGFuZGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBuZXR3b3JrIGRyaXZlciBvcHRpb25zIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYE5FVENPTlNPTEVgIGNhbiBiZSBzZWxlY3RlZCBhbmQgYnVpbHQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgYnVpbGRpbmcgYmxvY2tzIGFyZSBpbiBwbGFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA1OjEwLjAzMDY0NTk5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjc6XFx0Y29uZmlnIE5FVENPTlNPTEVcXG4gMzI4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG4gMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNToxMC4wMzA3NjY3MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMTU1MDM1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGNvbnNvbGUgQ2hhbmdlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGNvbmZpZ3VyYXRpb24gc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5GaXJzdCwgSSBjb21waWxlZCBhIGxpc3Qgb2Ygc3ltYm9scyBJIHRob3VnaHQgd2VyZSBjZW50cmFsIHRvIHRoaXMgY2hhbmdlOiBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgcmVmaWxsX3NrYnNgLCBgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyYCwgYG5ldGNvbnNfc2tiX3BvcGAsIGBmaW5kX3NrYmAsIGBuZXRwb2xsX3NlbmRfdWRwYCwgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YC5cblxuVGhlbiBJIGRvdmUgZGVlcGVyLCBhbmQgcmVhbGl6ZWQgdGhhdCBhIGdvb2QgY2h1bmsgb2YgdGhlc2Ugd2VyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBuZXRjb25zb2xlLmNgLiBTbyBJIHN0YXJ0ZWQgY29uZmlybWluZyB0aGVtLCBzdGFydGluZyB3aXRoIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIHZlcmlmeWluZyBpdCB3YXMgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuXG5cblRoZW4gSSB3aWRlbmVkIHRoZSBzZWFyY2ggYW5kIGRpc2NvdmVyZWQgdGhhdCBhIGZldyBmdW5jdGlvbnMgKGByZWZpbGxfc2tic2AsIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgLCBgc2tiX3Bvb2xfZmx1c2hgKSB3ZXJlIHJlbW92ZWQgZnJvbSBgbmV0cG9sbC5jYCwgbWVhbmluZyB0aGUgY29yZSBuZXRwb2xsIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHJlZmFjdG9yZWQgb3IgbW92ZWQuIEFuZCBJIGZvdW5kIHRoYXQgYF9fbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NldHVwYCwgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAgd2VyZSBtb2RpZmllZCBpbiBgbmV0cG9sbC5jYC5cblxuU28gbm93LCBhIG1vcmUgcmVmaW5lZCBsaXN0IGluY2x1ZGVzIHRoZSBgbmV0cG9sbGAgZnVuY3Rpb25zOiBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgcmVmaWxsX3NrYnNgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAsIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGBfX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9zZXR1cGAsIGFuZCBgX19uZXRwb2xsX2NsZWFudXBgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLCBjb25maWdmcyBjYWxsYmFja3MsIG9yIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0L2V4aXQgdG8gYmUgc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoLiBTcGVjaWZpY2FsbHksIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrcywgYXMgaXMgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgLiBUaGUgYGFsbG9jX3BhcmFtX3RhcmdldGAgaXMgY2FsbGVkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgYGZyZWVfcGFyYW1fdGFyZ2V0YCBpcyB1c2VkIGR1cmluZyBtb2R1bGUgZXhpdCBvciBpbiBlcnJvciBwYXRocy4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgbmV0cG9sbCBzZXR1cCBhbmQgY2xlYW51cCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDU6MjEuMDQ2MjcyNzc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY0NzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZXRwb2xsX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRwb2xsLmM9MzMyPWludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zODEtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgzLVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTUwMj1pbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtNTgwLX1cXG5uZXQvY29yZS9uZXRwb2xsLmM6NTgxOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZXR1cCk7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTU4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDU6MjEuMTMyOTI0NzcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTk3MzY4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGRlYnVnZ2luZyBvciBpbnZlc3RpZ2F0aW9uOlxuXG4qKkNoZWNraW5nIEV4cG9ydGVkIFN5bWJvbHM6IEEgUXVpY2sgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIHdhcyBhYm91dCB3aGV0aGVyIG9yIG5vdCBzb21ldGhpbmcgaXMgZXhwb3J0ZWQuIFRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUsIFwieWVzLCBpdCBpcyBleHBvcnRlZC5cIiBUaGF0J3MgZ29vZCB0byBrbm93LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgc3BlY2lmaWMgc3ltYm9sLCBgX19uZXRwb2xsX2NsZWFudXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgKml0KiBzcGVjaWZpY2FsbHkgaXMgZXhwb3J0ZWQsIHRvby4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrIGJlY2F1c2UgaWYgdGhpcyBmdW5jdGlvbiBpc24ndCB2aXNpYmxlLCBhIGtleSBwYXJ0IG9mIG15IHVuZGVyc3RhbmRpbmcgb3IgYSByZWxhdGVkIHByb2Nlc3Mgd2lsbCBiZSBmbGF3ZWQuIFRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgXCJpcyBpdCBleHBvcnRlZD9cIiBxdWVzdGlvbjsgSSdtIGhvbmluZyBpbiBvbiBhIHByZWNpc2UgcGllY2Ugb2YgaW5mb3JtYXRpb24gY3J1Y2lhbCB0byBteSBpbnZlc3RpZ2F0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBuZXRwb2xsIGFuZCBjbGVhbnVwIHJvdXRpbmVzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNToyNC42MzI2NjM2ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYxMDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZXRwb2xsX2NsZWFudXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuYz02Mjg9dm9pZCBkb19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTYzMy19XFxubmV0L2NvcmUvbmV0cG9sbC5jOjYzNDpFWFBPUlRfU1lNQk9MKGRvX25ldHBvbGxfY2xlYW51cCk7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTYzNS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9NjM2PXZvaWQgbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy02NDQtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzo2NDU6RVhQT1JUX1NZTUJPTChuZXRwb2xsX2NsZWFudXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNToyNC43MzYyNzkxMDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg2Mzk3MTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUvTmV0cG9sbCBSZWZhY3RvcioqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNvbmZ1c2lvbiBjbGVhcnMgdXAg4oCTIGBfX25ldHBvbGxfY2xlYW51cGAgaXNuJ3QgZXhwb3J0ZWQgYmVjYXVzZSwgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIGl0J3Mgc2NvcGVkIHdpdGhpbiBgbmV0cG9sbC5jYC4gR29vZC5cblxuUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXN0cnVjdHVyaW5nIGhvdyB0aGUgZmFsbGJhY2sgU0tCIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGFyZSBtYW5hZ2VkLCBtb3ZpbmcgdGhlbSBmcm9tIHRoZSBgbmV0cG9sbGAgc3RydWN0dXJlIHRvIGBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgaW5oZXJlbnRseSBhbHRlcnMgdGhlIGxpZmVjeWNsZSBvZiB0aGF0IFNLQiBwb29sIGFuZCB0aG9zZSBwYXJhbWV0ZXJzLiBUaGV5J3ZlIGludHJvZHVjZWQgbmV3IGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6YXRpb24gYW5kIGZsdXNoaW5nIG9mIHRoZSBwb29sIOKAkyBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLiBUaGF0J3MgYSBrZXkgYXJlYSB0byB6ZXJvIGluIG9uLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgd2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLCBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGhlcmUuIFdlIG5lZWQgdG8gYmUgcmlnb3JvdXNseSB0ZXN0aW5nIHRoZSBuZXcgYmVoYXZpb3IuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gVGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgdGVzdGluZywgYmVzaWRlcyB0aGUgaW5pdGlhbCBhbmQgZmx1c2ggZnVuY3Rpb24gZm9yIHRoZSBwb29sLCBhcmU6IGByZWZpbGxfc2tic2AsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgLCBgbmV0cG9sbF9zZW5kX3VkcGAgd2hpY2ggYXJlIGNydWNpYWwgaW4gdGhlIGNvcmUgZGF0YSBwYXRoLiBBbHNvLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYW5kIHRoZSBhc3NvY2lhdGVkIHN0b3JlIGZ1bmN0aW9uczogYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfcG9ydF9zdG9yZWAsIGByZW1vdGVfcG9ydF9zdG9yZWAsIGByZW1vdGVfbWFjX3N0b3JlYC4gRmluYWxseSwgdGhlIHRhcmdldCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBgZnJlZV9wYXJhbV90YXJnZXRgLCBhcyB3ZWxsIGFzIHNldHVwL2NsZWFudXAgZnVuY3Rpb25zIGxpa2UgYF9fbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NldHVwYCBhbmQgYF9fbmV0cG9sbF9jbGVhbnVwYCwgd2hpY2ggSSBhbHNvIG5lZWQgdG8gdmVyaWZ5LlxuXG5BbHJpZ2h0LCBJJ2xsIGdvIGFoZWFkIGFuZCBsb2cgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1MSwiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDU6MzMuNjAwMjUzMzIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDA2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2luaXRcIixcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgICBcInJlZmlsbF9za2JzXCIsXG4gICAgXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgICBcImZpbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJsb2NhbF9wb3J0X3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfcG9ydF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX21hY19zdG9yZVwiLFxuICAgIFwiZHJvcF9uZXRjb25zb2xlX3RhcmdldFwiLFxuICAgIFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJmcmVlX3BhcmFtX3RhcmdldFwiLFxuICAgIFwiX19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NldHVwXCIsXG4gICAgXCJfX25ldHBvbGxfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBjb2RlIGJ5IG1vdmluZyB0aGUgZmFsbGJhY2sgc2tiIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gVGhpcyBjaGFuZ2VzIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHNrYiBwb29sIGFuZCB0aGUgdGFyZ2V0IHBhcmFtZXRlcnMsIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgZmx1c2ggdGhlIHNrYiBwb29sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdFwiLFxuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaFwiLFxuICAgIFwicmVmaWxsX3NrYnNcIixcbiAgICBcIm5ldGNvbnNfc2tiX3BvcFwiLFxuICAgIFwiZmluZF9za2JcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcImVuYWJsZWRfc3RvcmVcIixcbiAgICBcImxvY2FsX3BvcnRfc3RvcmVcIixcbiAgICBcInJlbW90ZV9wb3J0X3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfbWFjX3N0b3JlXCIsXG4gICAgXCJkcm9wX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gICAgXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgICBcImZyZWVfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJfX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2V0dXBcIixcbiAgICBcIl9fbmV0cG9sbF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBuZXRjb25zb2xlIGFuZCBuZXRwb2xsIGNvZGUgYnkgbW92aW5nIHRoZSBmYWxsYmFjayBza2IgcG9vbCBhbmQgdGFyZ2V0IHBhcmFtZXRlcnMgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGNoYW5nZXMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgc2tiIHBvb2wgYW5kIHRoZSB0YXJnZXQgcGFyYW1ldGVycywgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCBmbHVzaCB0aGUgc2tiIHBvb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 08:47:32 +0000 UTC FinishedAt: 2026-07-11 09:05:34 +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": "23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "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": "23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "0fafe5ef-0225-40d4-a24c-199fc2e4a2df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netconsole_skb_pool_init", "netconsole_skb_pool_flush", "refill_skbs", "netcons_skb_pop", "find_skb", "netpoll_send_udp", "netconsole_parser_cmdline", "enabled_store", "local_port_store", "remote_port_store", "remote_mac_store", "drop_netconsole_target", "alloc_param_target", "free_param_target", "__netpoll_setup", "netpoll_setup", "__netpoll_cleanup" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2xvY2FsX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX21hY19zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4NGRjYjk5ZWZiMmYxNDFkOGVkZWVkOGJmNDFmNTRmNGRkMDZjYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOTowNDowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGMxODEyYTk4MzY1Yjc4Li40OWIyMjQzYTIwYjJkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDE5IEBAIE1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TkVUREVWX0lOVEVSTkFMXCYjMzQ7KTtcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1x0XHQyNTZcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1x0XHRcdDEwMDBcbiBcbiYjNDM7LypcbiYjNDM7ICogU2l6aW5nIGZvciB0aGUgcGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKVxuJiM0MzsgKiB3aGVuIGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMgc28gbWVzc2FnZXMgc3RpbGwgZ2V0IG91dCB1bmRlclxuJiM0MzsgKiBtZW1vcnkgcHJlc3N1cmUuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1BWF9VRFBfQ0hVTktcdFx0XHQxNDYwXG4mIzQzOyNkZWZpbmUgTUFYX1NLQlNcdFx0XHQzMlxuJiM0MzsjZGVmaW5lIE1BWF9TS0JfU0laRVx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7XHRcdFx0XHRcdFxcXG4mIzQzO1x0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7XHRcdFx0XHRcdFxcXG4mIzQzO1x0IE1BWF9VRFBfQ0hVTkspXG4mIzQzO1xuIHN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTtcbiBtb2R1bGVfcGFyYW1fc3RyaW5nKG5ldGNvbnNvbGUsIGNvbmZpZywgTUFYX1BBUkFNX0xFTkdUSCwgMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcJiMzNDsgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXHUwMDNjdGd0LWlwXHUwMDNlL1t0Z3QtbWFjYWRkcl1cJiMzNDspO1xuQEAgLTE2MiwxNCAmIzQzOzE3NSwxOSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gICogQG5wOlx0XHRUaGUgbmV0cG9sbCBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFyZ2V0LlxuICAqXHRcdENvbnRhaW5zIHRoZSBvdGhlciB1c2Vyc3BhY2UgdmlzaWJsZSBwYXJhbWV0ZXJzOlxuICAqXHRcdGRldl9uYW1lXHQocmVhZC13cml0ZSlcbi0gKlx0XHRsb2NhbF9wb3J0XHQocmVhZC13cml0ZSlcbi0gKlx0XHRyZW1vdGVfcG9ydFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0bG9jYWxfaXBcdChyZWFkLXdyaXRlKVxuICAqXHRcdHJlbW90ZV9pcFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0bG9jYWxfbWFjXHQocmVhZC1vbmx5KVxuLSAqXHRcdHJlbW90ZV9tYWNcdChyZWFkLXdyaXRlKVxuJiM0MzsgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiYjNDM7ICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiYjNDM7ICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEBidWY6XHRUaGUgYnVmZmVyIHVzZWQgdG8gc2VuZCB0aGUgZnVsbCBtc2cgdG8gdGhlIG5ldHdvcmsgc3RhY2tcbiAgKiBAcmVzdW1lX3dxOlx0V29ya3F1ZXVlIHRvIHJlc3VtZSBkZWFjdGl2YXRlZCB0YXJnZXRcbiYjNDM7ICogQHNrYl9wb29sOlx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXG4mIzQzOyAqXHRcdGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGFcbiYjNDM7ICpcdFx0c3VjY2Vzc2Z1bCBuZXRwb2xsX3NldHVwKCkgLyBuZXRwb2xsX2NsZWFudXAoKSBwYWlyIG9uIEBucC5cbiYjNDM7ICogQHJlZmlsbF93cTpcdFdvcmsgaXRlbSB0aGF0IGFzeW5jaHJvbm91c2x5IHRvcHMgQHNrYl9wb29sIGJhY2sgdXAgdG9cbiYjNDM7ICpcdFx0TUFYX1NLQlMgYWZ0ZXIgZmluZF9za2IoKSBkcmFpbnMgYW4gZW50cnkuXG4gICovXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtMTkwLDExICYjNDM7MjA4LDE1IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHRib29sXHRcdFx0ZXh0ZW5kZWQ7XG4gXHRib29sXHRcdFx0cmVsZWFzZTtcbiBcdHN0cnVjdCBuZXRwb2xsXHRcdG5wO1xuJiM0MztcdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuJiM0MztcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuIFx0ICogTlVMIHRlcm1pbmF0b3Igc28gYSBmdWxsIE1BWF9QUklOVF9DSFVOSyBwYXlsb2FkIGlzIG5vdCB0cnVuY2F0ZWRcbiBcdCAqL1xuIFx0Y2hhclx0XHRcdGJ1ZltNQVhfUFJJTlRfQ0hVTksgJiM0MzsgMV07XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJlc3VtZV93cTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRza2JfcG9vbDtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJlZmlsbF93cTtcbiB9O1xuIFxuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuQEAgLTI5MiwxMSAmIzQzOzMxNCw1NiBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdG1lbXNldChcdTAwMjZudC1cdTAwM2VucC5kZXZfbmFtZSwgMCwgSUZOQU1TSVopO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sID0gXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2w7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbiYjNDM7XHRcdHNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcbiYjNDM7XG4mIzQzO1x0cmVmaWxsX3NrYnMobnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZWVkIHRoZSBwZXItdGFyZ2V0IHNrYiBwb29sIHRoYXQgZmluZF9za2IoKSBmYWxscyBiYWNrIHRvLiBUaGUgcXVldWVcbiYjNDM7ICogaGVhZCBhbmQgcmVmaWxsIHdvcmsgYXJlIHNldCB1cCBvbmNlIGluIGFsbG9jX2FuZF9pbml0KCk7IHRoaXMgb25seVxuJiM0MzsgKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHJlZmlsbF9za2JzKG50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EpO1xuJiM0MztcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XG4mIzQzO31cbiYjNDM7XG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG4gc3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiYjNDM7XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIG1ha2VzIG50LVx1MDAzZW5wLmRldlxuJiM0MztcdCAqIHZpc2libGUgdG8gdGFyZ2V0X2xpc3Qgd2Fsa2VycyAoZS5nLiBuZXRjb25zb2xlX25ldGRldl9ldmVudCksXG4mIzQzO1x0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcbiYjNDM7XHQgKiBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4mIzQzO1xuIFx0aWYgKG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApKSB7XG4gXHRcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzU4LDYgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlbnAuZGV2IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRuZXRjb25zX3JlbGVhc2VfZGV2KG50KTtcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiBcdH1cbkBAIC0zOTMsMTEgJiM0Mzs0NjEsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbiBcbiBcdG50LVx1MDAzZW5wLm5hbWUgPSBcJiMzNDtuZXRjb25zb2xlXCYjMzQ7O1xuIFx0c3Ryc2NweShudC1cdTAwM2VucC5kZXZfbmFtZSwgXCYjMzQ7ZXRoMFwmIzM0OywgSUZOQU1TSVopO1xuLVx0bnQtXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XG4tXHRudC1cdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlbnAucmVtb3RlX21hYyk7XG4mIzQzO1x0bnQtXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XG4mIzQzO1x0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuJiM0MztcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xuJiM0MztcdC8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovXG4mIzQzO1x0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbiBcbiBcdHJldHVybiBudDtcbiB9XG5AQCAtNDE3LDYgJiM0Mzs0ODgsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHtcbiBcdFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xuIFx0XHRXQVJOX09OX09OQ0UobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XG4gXHRcdC8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGhcbiBcdFx0ICogbG9ja3NcbkBAIC00MjksMjEgJiM0Mzs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuLVx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnAtXHUwMDNlbG9jYWxfcG9ydCk7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4mIzQzO1xuJiM0MztcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIHBvcnQgJWRcXG5cJiMzNDssIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnAtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XFxuXCYjMzQ7LCBucC1cdTAwM2VkZXZfbWFjKTtcbi1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBucC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4mIzQzO1x0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIHBvcnQgJWRcXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuLVx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCYjMzQ7LCBucC1cdTAwM2VyZW1vdGVfbWFjKTtcbiYjNDM7XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbiAvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbkBAIC01NjEsMTIgJiM0Mzs2MzUsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZW5wLmxvY2FsX3BvcnQpO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2Vsb2NhbF9wb3J0KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xuJiM0MztcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtNTk5LDcgJiM0Mzs2NzMsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcE1cXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5yZW1vdGVfbWFjKTtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwTVxcblwmIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC03NTYsMTEgJiM0Mzs4MzAsMjEgQEAgc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdCAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmVcbiBcdFx0ICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC5cbiBcdFx0ICovXG4tXHRcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKFx1MDAyNm50LVx1MDAzZW5wKTtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXG4mIzQzO1x0XHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUgdG9cbiYjNDM7XHRcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcbiYjNDM7XHRcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXG4mIzQzO1x0XHQgKiBzdGF0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiBcbiBcdFx0cmV0ID0gbmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCk7XG4tXHRcdGlmIChyZXQpXG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9FTkFCTEVEO1xuIFx0XHRwcl9pbmZvKFwmIzM0O25ldHdvcmsgbG9nZ2luZyBzdGFydGVkXFxuXCYjMzQ7KTtcbkBAIC04ODUsNyAmIzQzOzk2OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcdTAwMjZudC1cdTAwM2VucC5sb2NhbF9wb3J0KTtcbiYjNDM7XHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRyZXQgPSBjb3VudDtcbkBAIC05MDcsNyAmIzQzOzk5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcbiYjNDM7XHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0cmV0ID0gY291bnQ7XG5AQCAtOTk0LDcgJiM0MzsxMDc4LDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0aWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSBcdTAwMjZcdTAwMjYgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICYjMzk7XFxuJiMzOTspXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdG1lbWNweShudC1cdTAwM2VucC5yZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XG4mIzQzO1x0bWVtY3B5KG50LVx1MDAzZXJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTQ4MSwxNSAmIzQzOzE1NjUsMTUgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdC8qIEEgU1RBVEVfREVBQ1RJVkFURUQgdGFyZ2V0IG1heSBoYXZlIGJlZW4gbW92ZWQgdG9cbi1cdCAqIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKSBidXQgbm90IHlldFxuLVx0ICogcHJvY2Vzc2VkIGJ5IG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKCkuIFVubGlua2luZyBpdCBiZWxvd1xuLVx0ICogaGlkZXMgaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBoYXMgdG8gY2xlYW4gaXQgdXBcbi1cdCAqIGl0c2VsZi4gUmVjb3JkIHRoYXQgdGhlIHRhcmdldCBzdGlsbCBvd25zIGEgbmV0cG9sbCBiZWZvcmUgdGhlXG4tXHQgKiBzdGF0ZSBpcyBkb3duZ3JhZGVkLlxuJiM0MztcdC8qIEEgdGFyZ2V0IG1vdmVkIHRvIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKVxuJiM0MztcdCAqIGJ1dCBub3QgeWV0IHByb2Nlc3NlZCBzdGlsbCBvd25zIGEgbmV0cG9sbDsgdW5saW5raW5nIGl0IGJlbG93IGhpZGVzXG4mIzQzO1x0ICogaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBtdXN0IHRlYXIgaXQgZG93biBpdHNlbGYuXG4mIzQzO1x0ICogVGhpcyBjb3ZlcnMgTkVUREVWX1VOUkVHSVNURVIgKFNUQVRFX0RFQUNUSVZBVEVEKSBhbmRcbiYjNDM7XHQgKiBORVRERVZfUkVMRUFTRSAvIE5FVERFVl9KT0lOIChTVEFURV9ESVNBQkxFRCk7IGtleSBvZmYgbnQtXHUwMDNlbnAuZGV2LFxuJiM0MztcdCAqIHdoaWNoIHN0YXlzIHNldCB1bnRpbCB0aGUgbmV0cG9sbCBpcyBjbGVhbmVkIHVwLlxuIFx0ICovXG4gXHRuZWVkc19jbGVhbnVwID0gbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCB8fFxuLVx0XHRcdG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEO1xuJiM0MztcdFx0XHRudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERUFDVElWQVRFRCB8fCBudC1cdTAwM2VucC5kZXY7XG4gXHQvKiBEaXNhYmxlIGRlYWN0aXZhdGVkIHRhcmdldCB0byBwcmV2ZW50IHJhY2VzIGJldHdlZW4gcmVzdW1lIGF0dGVtcHRcbiBcdCAqIGFuZCB0YXJnZXQgcmVtb3ZhbC5cbiBcdCAqL1xuQEAgLTE1MTQsOCAmIzQzOzE1OTgsMTAgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdCAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtXHUwMDNlZGV2IGlzIE5VTEwpLCBzb1xuIFx0ICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi5cbiBcdCAqL1xuLVx0aWYgKG5lZWRzX2NsZWFudXApXG4mIzQzO1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuJiM0MztcdH1cbiBcbiBcdGNvbmZpZ19pdGVtX3B1dChcdTAwMjZudC1cdTAwM2Vncm91cC5jZ19pdGVtKTtcbiB9XG5AQCAtMTcwNiw3ICYjNDM7MTc5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzE4LDE5ICYjNDM7MTgwNCwyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4gXHRcdGlmICghaW5fbm1pKCkpXG4gXHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7bmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLFxuLVx0XHRcdFx0XHQgICAgIG5wLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgbnQtXHUwMDNlbnAuZGV2LVx1MDAzZW5hbWUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sKTtcbiYjNDM7XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4mIzQzO1x0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSk7XG4gXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbiYjNDM7XHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRpbnQgY291bnQgPSAwO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzM5LDcgJiM0MzsxODI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxuIFxuIFx0c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIXNrYilcbi1cdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG5wLCBsZW4pO1xuJiM0MztcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCYjNDM7JiM0Mztjb3VudCBcdTAwM2MgMTApIHtcbkBAIC0xNzc5LDggJiM0MzsxODY3LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgdWRwaGRyICp1ZHBoO1xuIFx0aW50IHVkcF9sZW47XG4gXG5AQCAtMTc5MCwyMSAmIzQzOzE4NzksMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuJiM0MztcdHVkcGgtXHUwMDNlc291cmNlID0gaHRvbnMobnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4mIzQzO1x0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0dWRwaC1cdTAwM2VsZW4gPSBodG9ucyh1ZHBfbGVuKTtcbiBcbiBcdG5ldHBvbGxfdWRwX2NoZWNrc3VtKG5wLCBza2IsIGxlbik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4gXG4gXHRldGggPSBza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG5wLVx1MDAzZXJlbW90ZV9tYWMpO1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0ZWxzZVxuQEAgLTE4NjEsOCAmIzQzOzE5NTEsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4mIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4mIzQzO1x0XHRcdCAgICBpbnQgbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICYjNDM7MTk2OSw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBcbiBcdHRvdGFsX2xlbiA9IGlwX2xlbiAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShucC1cdTAwM2VkZXYpO1xuIFxuLVx0c2tiID0gZmluZF9za2IobnAsIHRvdGFsX2xlbiAmIzQzOyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuJiM0MztcdHNrYiA9IGZpbmRfc2tiKG50LCB0b3RhbF9sZW4gJiM0MzsgbnAtXHUwMDNlZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbSxcbiBcdFx0ICAgICAgIHRvdGFsX2xlbiAtIGxlbik7XG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTg4NSwxMiAmIzQzOzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4mIzQzO1x0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG5wLCBza2IsIGxlbik7XG4tXHRwdXNoX2V0aChucCwgc2tiKTtcbiYjNDM7XHRwdXNoX2V0aChudCwgc2tiKTtcbiBcdHNrYi1cdTAwM2VkZXYgPSBucC1cdTAwM2VkZXY7XG4gXG4gXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xuQEAgLTE5MDgsNyAmIzQzOzIwMDAsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4mIzQzO1x0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG4gXHRcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xuQEAgLTIyMDMsOCAmIzQzOzIyOTUsOSBAQCBfX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuJiM0MztzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xuIFx0Y2hhciAqY3VyID0gb3B0O1xuIFx0Y2hhciAqZGVsaW07XG5AQCAtMjIxNSw3ICYjNDM7MjMwOCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0aWYgKCFkZWxpbSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0KmRlbGltID0gMDtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9wb3J0KSlcbiYjNDM7XHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyAmIzQzOzIzNTUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdCpkZWxpbSA9IDA7XG4gXHRcdGlmICgqY3VyID09ICYjMzk7ICYjMzk7IHx8ICpjdXIgPT0gJiMzOTtcXHQmIzM5OylcbiBcdFx0XHRucF9pbmZvKG5wLCBcJiMzNDt3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4mIzQzO1x0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0Y3VyID0gZGVsaW07XG4gXHR9XG5AQCAtMjI4NCwxMSAmIzQzOzIzNzcsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4mIzQzO1x0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnQtXHUwMDNlcmVtb3RlX21hYykpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHR9XG4gXG4tXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7XG4mIzQzO1x0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMyNiwxNCAmIzQzOzI0MTksMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbiYjNDM7XHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZmFpbDtcbiBcbiYjNDM7XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXG4mIzQzO1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuJiM0MztcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxuJiM0MztcdCAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiYjNDM7XG4gXHRlcnIgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwmIzM0OyxcbiBcdFx0ICAgICAgIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCwgY21kbGluZV9jb3VudCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuIFx0XHRcdC8qIG9ubHkgZmFpbCBpZiBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBpcyBzZXQsXG4gXHRcdFx0ICogb3RoZXJ3aXNlLCBrZWVwIHRoZSB0YXJnZXQgaW4gdGhlIGxpc3QsIGJ1dCBkaXNhYmxlZC5cbkBAIC0yMzU1LDYgJiM0MzsyNDU2LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpXG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5AQCAtMjEsMjAgJiM0MzsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwmIzM5O3MgcHJlYWxsb2NhdGVkIHNrYiBwb29sIGNhbiBjYXJyeS4gS2VlcCB0aGlzIGluXG4tICogc3luYyB3aXRoIHRoZSBidWZmZXIgc2l6ZSB1c2VkIGJ5IHJlZmlsbF9za2JzKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jO1xuLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXJcbi0gKiBzYXRpc2Z5IGFuZCBhdm9pZCBkZXF1ZXVpbmcgYSBwb29sZWQgc2tiIHRoYXQgd291bGQgbGF0ZXIgdHJpcFxuLSAqIHNrYl9vdmVyX3BhbmljKCkgaW4gc2tiX3B1dCgpLlxuLSAqL1xuLSNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0MTQ2MFxuLSNkZWZpbmUgTUFYX1NLQl9TSVpFXHRcdFx0XHRcdFx0XFxcbi1cdChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgTUFYX1VEUF9DSFVOSylcbi1cbiBzdHJ1Y3QgbmV0cG9sbCB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG5AQCAtNDksMTAgJiM0MzszNSw2IEBAIHN0cnVjdCBuZXRwb2xsIHtcbiBcbiBcdHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0Ym9vbCBpcHY2O1xuLVx0dTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLVx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTtcbiB9O1xuIFxuICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuY1xuaW5kZXggYWVkNDE1ZDNjZDc0ZmYuLmY4ZGExMDQ4ZWEzYWIwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zNiwxMiAmIzQzOzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiAmIzQzOzIwNyw2IEBAIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHR1cChcdTAwMjZuaS1cdTAwM2VkZXZfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHRza2JfcG9vbCA9IFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbi1cdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4tXHRcdGlmICghc2tiKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTtcbi1cdH1cbi19XG4tXG4gdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC0zNTEsMzIgJiM0MzszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG4gXG4tc3RhdGljIHZvaWQgc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVxuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZucC1cdTAwM2VyZWZpbGxfd3EpO1xuLVx0c2tiX3Bvb2wgPSBcdTAwMjZucC1cdTAwM2Vza2JfcG9vbDtcbi1cdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IG5ldHBvbGwgKm5wID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpO1xuLVxuLVx0cmVmaWxsX3NrYnMobnApO1xuLX1cbi1cbiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4tXHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuLVxuIFx0aWYgKG5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xuIFx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXG5cJiMzNDssXG4gXHRcdCAgICAgICBuZGV2LVx1MDAzZW5hbWUpO1xuQEAgLTQxMSw5ICYjNDM7MzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgJiM0Mzs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBmbHVzaDtcbiYjNDM7XHRcdGdvdG8gcHV0O1xuIFx0cnRubF91bmxvY2soKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXHUwMDNlbnBpbmZvXG5AQCAtNjE0LDggJiM0Mzs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjU5LDggJiM0Mzs2MTIsNiBAQCBzdGF0aWMgdm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bnBpbmZvLVx1MDAzZXR4X3dvcmspO1xuIFx0XHRjYWxsX3JjdShcdTAwMjZucGluZm8tXHUwMDNlcmN1LCByY3VfY2xlYW51cF9uZXRwb2xsX2luZm8pO1xuIFx0fVxuLVxuLVx0c2tiX3Bvb2xfZmx1c2gobnApO1xuIH1cbiBcbiB2b2lkIF9fbmV0cG9sbF9mcmVlKHN0cnVjdCBuZXRwb2xsICpucClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoJiMzNDssCiAgICAmIzM0O3JlZmlsbF9za2JzJiMzNDssCiAgICAmIzM0O25ldGNvbnNfc2tiX3BvcCYjMzQ7LAogICAgJiMzNDtmaW5kX3NrYiYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9wb3J0X3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9wb3J0X3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9tYWNfc3RvcmUmIzM0OywKICAgICYjMzQ7ZHJvcF9uZXRjb25zb2xlX3RhcmdldCYjMzQ7LAogICAgJiMzNDthbGxvY19wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7ZnJlZV9wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBuZXRjb25zb2xlIGFuZCBuZXRwb2xsIGNvZGUgYnkgbW92aW5nIHRoZSBmYWxsYmFjayBza2IgcG9vbCBhbmQgdGFyZ2V0IHBhcmFtZXRlcnMgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGNoYW5nZXMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgc2tiIHBvb2wgYW5kIHRoZSB0YXJnZXQgcGFyYW1ldGVycywgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCBmbHVzaCB0aGUgc2tiIHBvb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4NGRjYjk5ZWZiMmYxNDFkOGVkZWVkOGJmNDFmNTRmNGRkMDZjYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAwOTowNDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCBjMTgxMmE5ODM2NWI3OC4uNDliMjI0M2EyMGIyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTYxLDYgJiM0Mzs2MSwxOSBAQCBNT0RVTEVfSU1QT1JUX05TKCYjMzQ7TkVUREVWX0lOVEVSTkFMJiMzNDspOwogI2RlZmluZSBNQVhfVVNFUkRBVEFfSVRFTVMJCTI1NgogI2RlZmluZSBNQVhfUFJJTlRfQ0hVTksJCQkxMDAwCiAKJiM0MzsvKgomIzQzOyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkKJiM0MzsgKiB3aGVuIGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMgc28gbWVzc2FnZXMgc3RpbGwgZ2V0IG91dCB1bmRlcgomIzQzOyAqIG1lbW9yeSBwcmVzc3VyZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1BWF9VRFBfQ0hVTksJCQkxNDYwCiYjNDM7I2RlZmluZSBNQVhfU0tCUwkJCTMyCiYjNDM7I2RlZmluZSBNQVhfU0tCX1NJWkUJCQkJCQkJXAomIzQzOwkoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7CQkJCQlcCiYjNDM7CSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOwkJCQkJCVwKJiM0MzsJIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOwkJCQkJXAomIzQzOwkgTUFYX1VEUF9DSFVOSykKJiM0MzsKIHN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0Y29uc29sZSwgJiMzNDsgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AJmx0O3RndC1pcCZndDsvW3RndC1tYWNhZGRyXSYjMzQ7KTsKQEAgLTE2MiwxNCAmIzQzOzE3NSwxOSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAgKiBAbnA6CQlUaGUgbmV0cG9sbCBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFyZ2V0LgogICoJCUNvbnRhaW5zIHRoZSBvdGhlciB1c2Vyc3BhY2UgdmlzaWJsZSBwYXJhbWV0ZXJzOgogICoJCWRldl9uYW1lCShyZWFkLXdyaXRlKQotICoJCWxvY2FsX3BvcnQJKHJlYWQtd3JpdGUpCi0gKgkJcmVtb3RlX3BvcnQJKHJlYWQtd3JpdGUpCiAgKgkJbG9jYWxfaXAJKHJlYWQtd3JpdGUpCiAgKgkJcmVtb3RlX2lwCShyZWFkLXdyaXRlKQogICoJCWxvY2FsX21hYwkocmVhZC1vbmx5KQotICoJCXJlbW90ZV9tYWMJKHJlYWQtd3JpdGUpCiYjNDM7ICogQGxvY2FsX3BvcnQ6CVNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KJiM0MzsgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgomIzQzOyAqIEByZW1vdGVfbWFjOglEZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQGJ1ZjoJVGhlIGJ1ZmZlciB1c2VkIHRvIHNlbmQgdGhlIGZ1bGwgbXNnIHRvIHRoZSBuZXR3b3JrIHN0YWNrCiAgKiBAcmVzdW1lX3dxOglXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldAomIzQzOyAqIEBza2JfcG9vbDoJUGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuCiYjNDM7ICoJCWl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGEKJiM0MzsgKgkJc3VjY2Vzc2Z1bCBuZXRwb2xsX3NldHVwKCkgLyBuZXRwb2xsX2NsZWFudXAoKSBwYWlyIG9uIEBucC4KJiM0MzsgKiBAcmVmaWxsX3dxOglXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvCiYjNDM7ICoJCU1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LgogICovCiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTE5MCwxMSAmIzQzOzIwOCwxNSBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogCWJvb2wJCQlleHRlbmRlZDsKIAlib29sCQkJcmVsZWFzZTsKIAlzdHJ1Y3QgbmV0cG9sbAkJbnA7CiYjNDM7CXUxNgkJCWxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwomIzQzOwl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCiAJICogTlVMIHRlcm1pbmF0b3Igc28gYSBmdWxsIE1BWF9QUklOVF9DSFVOSyBwYXlsb2FkIGlzIG5vdCB0cnVuY2F0ZWQKIAkgKi8KIAljaGFyCQkJYnVmW01BWF9QUklOVF9DSFVOSyAmIzQzOyAxXTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVzdW1lX3dxOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNrYl9wb29sOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVmaWxsX3dxOwogfTsKIAogI2lmZGVmCUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKQEAgLTI5MiwxMSAmIzQzOzMxNCw1NiBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCW1lbXNldCgmYW1wO250LSZndDtucC5kZXZfbmFtZSwgMCwgSUZOQU1TSVopOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sID0gJmFtcDtudC0mZ3Q7c2tiX3Bvb2w7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CXdoaWxlIChSRUFEX09OQ0Uoc2tiX3Bvb2wtJmd0O3FsZW4pICZsdDsgTUFYX1NLQlMpIHsKJiM0MzsJCXNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZWZpbGxfd3EpOwomIzQzOwomIzQzOwlyZWZpbGxfc2ticyhudCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZQomIzQzOyAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHkKJiM0MzsgKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlyZWZpbGxfc2ticyhudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxKTsKJiM0MzsJc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbigmYW1wO250LSZndDtza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTsKJiM0Mzt9CiYjNDM7CiAvKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi8KIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJLyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC0mZ3Q7bnAuZGV2CiYjNDM7CSAqIHZpc2libGUgdG8gdGFyZ2V0X2xpc3Qgd2Fsa2VycyAoZS5nLiBuZXRjb25zb2xlX25ldGRldl9ldmVudCksCiYjNDM7CSAqIHdoaWNoIG90aGVyd2lzZSBtYXkgbW92ZSB0aGUgdGFyZ2V0IHRvIHRoZSBjbGVhbnVwIGxpc3QgYW5kCiYjNDM7CSAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwluZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpOwomIzQzOwogCWlmIChuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKSkgewogCQkvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovCiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJbnQtJmd0O3N0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CkBAIC0zNTgsNiAmIzQzOzQyNSw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcnRubF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEICZhbXA7JmFtcDsgbnQtJmd0O25wLmRldiAmYW1wOyZhbXA7CiAJICAgIG50LSZndDtucC5kZXYtJmd0O3JlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgewomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldGNvbnNfcmVsZWFzZV9kZXYobnQpOwogCQludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAl9CkBAIC0zOTMsMTEgJiM0Mzs0NjEsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZCkKIAogCW50LSZndDtucC5uYW1lID0gJiMzNDtuZXRjb25zb2xlJiMzNDs7CiAJc3Ryc2NweShudC0mZ3Q7bnAuZGV2X25hbWUsICYjMzQ7ZXRoMCYjMzQ7LCBJRk5BTVNJWik7Ci0JbnQtJmd0O25wLmxvY2FsX3BvcnQgPSA2NjY1OwotCW50LSZndDtucC5yZW1vdGVfcG9ydCA9IDY2NjY7Ci0JZXRoX2Jyb2FkY2FzdF9hZGRyKG50LSZndDtucC5yZW1vdGVfbWFjKTsKJiM0MzsJbnQtJmd0O2xvY2FsX3BvcnQgPSA2NjY1OwomIzQzOwludC0mZ3Q7cmVtb3RlX3BvcnQgPSA2NjY2OwomIzQzOwlldGhfYnJvYWRjYXN0X2FkZHIobnQtJmd0O3JlbW90ZV9tYWMpOwogCW50LSZndDtzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEOwogCUlOSVRfV09SSygmYW1wO250LSZndDtyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7CiYjNDM7CS8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovCiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtudC0mZ3Q7c2tiX3Bvb2wpOwomIzQzOwlJTklUX1dPUksoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpOwogCiAJcmV0dXJuIG50OwogfQpAQCAtNDE3LDYgJiM0Mzs0ODgsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCAmYW1wO3RhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHsKIAkJLyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqLwogCQlXQVJOX09OX09OQ0UobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpOwomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldGNvbnNfcmVsZWFzZV9kZXYobnQpOwogCQkvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoCiAJCSAqIGxvY2tzCkBAIC00MjksMjEgJiM0Mzs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZCkKIAltdXRleF91bmxvY2soJmFtcDt0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApCiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKLQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBucC0mZ3Q7bG9jYWxfcG9ydCk7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwomIzQzOwomIzQzOwlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7bG9jYWxfcG9ydCk7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnAtJmd0O2xvY2FsX2lwLmluNik7CiAJZWxzZQogCQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtucC0mZ3Q7bG9jYWxfaXAuaXApOwogCW5wX2luZm8obnAsICYjMzQ7aW50ZXJmYWNlIG5hbWUgJiMzOTslcyYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9uYW1lKTsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xuJiMzNDssIG5wLSZndDtkZXZfbWFjKTsKLQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBwb3J0ICVkXG4mIzM0OywgbnAtJmd0O3JlbW90ZV9wb3J0KTsKJiM0MzsJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgcG9ydCAlZFxuJiMzNDssIG50LSZndDtyZW1vdGVfcG9ydCk7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO25wLSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtucC0mZ3Q7cmVtb3RlX2lwLmlwKTsKLQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG5wLSZndDtyZW1vdGVfbWFjKTsKJiM0MzsJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX21hYyk7CiB9CiAKIC8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCB1bmlvbi4gUmV0dXJuIDAgaWYgSVB2NCBpcwpAQCAtNTYxLDEyICYjNDM7NjM1LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiAKIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O25wLmxvY2FsX3BvcnQpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O2xvY2FsX3BvcnQpOwogfQogCiBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7bnAucmVtb3RlX3BvcnQpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWRcbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O3JlbW90ZV9wb3J0KTsKIH0KIAogc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKQEAgLTU5OSw3ICYjNDM7NjczLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBNXG4mIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLSZndDtucC5yZW1vdGVfbWFjKTsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwTVxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7cmVtb3RlX21hYyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtNzU2LDExICYjNDM7ODMwLDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAogCQkgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlCiAJCSAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuCiAJCSAqLwotCQluZXRjb25zb2xlX3ByaW50X2Jhbm5lcigmYW1wO250LSZndDtucCk7CiYjNDM7CQluZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7CiYjNDM7CiYjNDM7CQkvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sCiYjNDM7CQkgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LSZndDtucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvCiYjNDM7CQkgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkCiYjNDM7CQkgKiBvdGhlcndpc2UgY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZAomIzQzOwkJICogc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7CiAKIAkJcmV0ID0gbmV0cG9sbF9zZXR1cCgmYW1wO250LSZndDtucCk7Ci0JCWlmIChyZXQpCiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiAKIAkJbnQtJmd0O3N0YXRlID0gU1RBVEVfRU5BQkxFRDsKIAkJcHJfaW5mbygmIzM0O25ldHdvcmsgbG9nZ2luZyBzdGFydGVkXG4mIzM0Oyk7CkBAIC04ODUsNyAmIzQzOzk2OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgJmFtcDtudC0mZ3Q7bnAubG9jYWxfcG9ydCk7CiYjNDM7CXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtsb2NhbF9wb3J0KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCXJldCA9IGNvdW50OwpAQCAtOTA3LDcgJiM0Mzs5OTEsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgJmFtcDtudC0mZ3Q7bnAucmVtb3RlX3BvcnQpOwomIzQzOwlyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgJmFtcDtudC0mZ3Q7cmVtb3RlX3BvcnQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmV0ID0gY291bnQ7CkBAIC05OTQsNyAmIzQzOzEwNzgsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAmYW1wOyZhbXA7IGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAhPSAmIzM5O1xuJiMzOTspCiAJCWdvdG8gb3V0X3VubG9jazsKLQltZW1jcHkobnQtJmd0O25wLnJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTsKJiM0MzsJbWVtY3B5KG50LSZndDtyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0xNDgxLDE1ICYjNDM7MTU2NSwxNSBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCiAJbXV0ZXhfbG9jaygmYW1wO3RhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JLyogQSBTVEFURV9ERUFDVElWQVRFRCB0YXJnZXQgbWF5IGhhdmUgYmVlbiBtb3ZlZCB0bwotCSAqIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKSBidXQgbm90IHlldAotCSAqIHByb2Nlc3NlZCBieSBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSgpLiBVbmxpbmtpbmcgaXQgYmVsb3cKLQkgKiBoaWRlcyBpdCBmcm9tIHRoZSBjbGVhbnVwIHdvcmtlciwgc28gdGhpcyBwYXRoIGhhcyB0byBjbGVhbiBpdCB1cAotCSAqIGl0c2VsZi4gUmVjb3JkIHRoYXQgdGhlIHRhcmdldCBzdGlsbCBvd25zIGEgbmV0cG9sbCBiZWZvcmUgdGhlCi0JICogc3RhdGUgaXMgZG93bmdyYWRlZC4KJiM0MzsJLyogQSB0YXJnZXQgbW92ZWQgdG8gdGFyZ2V0X2NsZWFudXBfbGlzdCBieSBuZXRjb25zb2xlX25ldGRldl9ldmVudCgpCiYjNDM7CSAqIGJ1dCBub3QgeWV0IHByb2Nlc3NlZCBzdGlsbCBvd25zIGEgbmV0cG9sbDsgdW5saW5raW5nIGl0IGJlbG93IGhpZGVzCiYjNDM7CSAqIGl0IGZyb20gdGhlIGNsZWFudXAgd29ya2VyLCBzbyB0aGlzIHBhdGggbXVzdCB0ZWFyIGl0IGRvd24gaXRzZWxmLgomIzQzOwkgKiBUaGlzIGNvdmVycyBORVRERVZfVU5SRUdJU1RFUiAoU1RBVEVfREVBQ1RJVkFURUQpIGFuZAomIzQzOwkgKiBORVRERVZfUkVMRUFTRSAvIE5FVERFVl9KT0lOIChTVEFURV9ESVNBQkxFRCk7IGtleSBvZmYgbnQtJmd0O25wLmRldiwKJiM0MzsJICogd2hpY2ggc3RheXMgc2V0IHVudGlsIHRoZSBuZXRwb2xsIGlzIGNsZWFuZWQgdXAuCiAJICovCiAJbmVlZHNfY2xlYW51cCA9IG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIHx8Ci0JCQludC0mZ3Q7c3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQ7CiYjNDM7CQkJbnQtJmd0O3N0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEIHx8IG50LSZndDtucC5kZXY7CiAJLyogRGlzYWJsZSBkZWFjdGl2YXRlZCB0YXJnZXQgdG8gcHJldmVudCByYWNlcyBiZXR3ZWVuIHJlc3VtZSBhdHRlbXB0CiAJICogYW5kIHRhcmdldCByZW1vdmFsLgogCSAqLwpAQCAtMTUxNCw4ICYjNDM7MTU5OCwxMCBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCSAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtJmd0O2RldiBpcyBOVUxMKSwgc28KIAkgKiBpdCBpcyBzYWZlIGV2ZW4gaWYgdGhlIGNsZWFudXAgd29ya2VyIGFscmVhZHkgdG9yZSB0aGUgbmV0cG9sbCBkb3duLgogCSAqLwotCWlmIChuZWVkc19jbGVhbnVwKQomIzQzOwlpZiAobmVlZHNfY2xlYW51cCkgewomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiYjNDM7CX0KIAogCWNvbmZpZ19pdGVtX3B1dCgmYW1wO250LSZndDtncm91cC5jZ19pdGVtKTsKIH0KQEAgLTE3MDYsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0gewogICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkCiAgKiBmcm9tIE5NSSBjb250ZXh0OyB0aGUgbmV4dCBub24tTk1JIGNhbGxlciB3aWxsIHRvcCB0aGUgcG9vbCBiYWNrIHVwLgogICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pCiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC0xNzE4LDE5ICYjNDM7MTgwNCwyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pCiAJCWlmICghaW5fbm1pKCkpCiAJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgmIzM0O25ldGNvbnNvbGU6IGRyb3BwaW5nIG1lc3NhZ2UsIHJlcXVlc3RlZCBza2IgbGVuICVkIGV4Y2VlZHMgcG9vbCBidWZmZXIgc2l6ZSAlenUgb24gJXNcbiYjMzQ7LAogCQkJCQkgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsCi0JCQkJCSAgICAgbnAtJmd0O2Rldi0mZ3Q7bmFtZSk7CiYjNDM7CQkJCQkgICAgIG50LSZndDtucC5kZXYtJmd0O25hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlza2IgPSBza2JfZGVxdWV1ZSgmYW1wO25wLSZndDtza2JfcG9vbCk7CiYjNDM7CXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7bnQtJmd0O3NrYl9wb29sKTsKIAlpZiAoIWluX25taSgpKQotCQlzY2hlZHVsZV93b3JrKCZhbXA7bnAtJmd0O3JlZmlsbF93cSk7CiYjNDM7CQlzY2hlZHVsZV93b3JrKCZhbXA7bnQtJmd0O3JlZmlsbF93cSk7CiAKIAlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpCiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLAomIzQzOwkJCQlpbnQgcmVzZXJ2ZSkKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJaW50IGNvdW50ID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC0xNzM5LDcgJiM0MzsxODI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKQogCiAJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFza2IpCi0JCXNrYiA9IG5ldGNvbnNfc2tiX3BvcChucCwgbGVuKTsKJiM0MzsJCXNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTsKIAogCWlmICghc2tiKSB7CiAJCWlmICgmIzQzOyYjNDM7Y291bnQgJmx0OyAxMCkgewpAQCAtMTc3OSw4ICYjNDM7MTg2Nyw5IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdWRwaC0mZ3Q7Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKIH0KIAotc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQomIzQzO3N0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiB7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCXN0cnVjdCB1ZHBoZHIgKnVkcGg7CiAJaW50IHVkcF9sZW47CiAKQEAgLTE3OTAsMjEgJiM0MzsxODc5LDIyIEBAIHN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJdWRwaCA9IHVkcF9oZHIoc2tiKTsKLQl1ZHBoLSZndDtzb3VyY2UgPSBodG9ucyhucC0mZ3Q7bG9jYWxfcG9ydCk7Ci0JdWRwaC0mZ3Q7ZGVzdCA9IGh0b25zKG5wLSZndDtyZW1vdGVfcG9ydCk7CiYjNDM7CXVkcGgtJmd0O3NvdXJjZSA9IGh0b25zKG50LSZndDtsb2NhbF9wb3J0KTsKJiM0MzsJdWRwaC0mZ3Q7ZGVzdCA9IGh0b25zKG50LSZndDtyZW1vdGVfcG9ydCk7CiAJdWRwaC0mZ3Q7bGVuID0gaHRvbnModWRwX2xlbik7CiAKIAluZXRwb2xsX3VkcF9jaGVja3N1bShucCwgc2tiLCBsZW4pOwogfQogCi1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCiAJZXRoID0gc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX3NvdXJjZSwgbnAtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwotCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfZGVzdCwgbnAtJmd0O3JlbW90ZV9tYWMpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG50LSZndDtyZW1vdGVfbWFjKTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCWVsc2UKQEAgLTE4NjEsOCAmIzQzOzE5NTEsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIAlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7CiB9CiAKLXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKJiM0MztzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAomIzQzOwkJCSAgICBpbnQgbGVuKQogewomIzQzOwlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAlpbnQgdG90YWxfbGVuLCBpcF9sZW4sIHVkcF9sZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTg3Nyw3ICYjNDM7MTk2OSw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIAogCXRvdGFsX2xlbiA9IGlwX2xlbiAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShucC0mZ3Q7ZGV2KTsKIAotCXNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gJiM0MzsgbnAtJmd0O2Rldi0mZ3Q7bmVlZGVkX3RhaWxyb29tLAomIzQzOwlza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICYjNDM7IG5wLSZndDtkZXYtJmd0O25lZWRlZF90YWlscm9vbSwKIAkJICAgICAgIHRvdGFsX2xlbiAtIGxlbik7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTg4NSwxMiAmIzQzOzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbXNnLCBsZW4pOwogCXNrYl9wdXQoc2tiLCBsZW4pOwogCi0JcHVzaF91ZHAobnAsIHNrYiwgbGVuKTsKJiM0MzsJcHVzaF91ZHAobnQsIHNrYiwgbGVuKTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCXB1c2hfaXB2NihucCwgc2tiLCBsZW4pOwogCWVsc2UKIAkJcHVzaF9pcHY0KG5wLCBza2IsIGxlbik7Ci0JcHVzaF9ldGgobnAsIHNrYik7CiYjNDM7CXB1c2hfZXRoKG50LCBza2IpOwogCXNrYi0mZ3Q7ZGV2ID0gbnAtJmd0O2RldjsKIAogCXJldHVybiAoaW50KW5ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7CkBAIC0xOTA4LDcgJiM0MzsyMDAwLDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogICovCiBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiB7Ci0JaW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAoJmFtcDtudC0mZ3Q7bnAsIG1zZywgbGVuKTsKJiM0MzsJaW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7CiAJCWlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkgewpAQCAtMjIwMyw4ICYjNDM7MjI5NSw5IEBAIF9fcmVsZWFzZXMoJmFtcDt0YXJnZXRfbGlzdF9sb2NrKQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdCkKJiM0MztzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogewomIzQzOwlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAlib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTsKIAljaGFyICpjdXIgPSBvcHQ7CiAJY2hhciAqZGVsaW07CkBAIC0yMjE1LDcgJiM0MzsyMzA4LDcgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KQogCQlpZiAoIWRlbGltKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCSpkZWxpbSA9IDA7Ci0JCWlmIChrc3RydG91MTYoY3VyLCAxMCwgJmFtcDtucC0mZ3Q7bG9jYWxfcG9ydCkpCiYjNDM7CQlpZiAoa3N0cnRvdTE2KGN1ciwgMTAsICZhbXA7bnQtJmd0O2xvY2FsX3BvcnQpKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCWN1ciA9IGRlbGltOwogCX0KQEAgLTIyNjIsNyAmIzQzOzIzNTUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpCiAJCSpkZWxpbSA9IDA7CiAJCWlmICgqY3VyID09ICYjMzk7ICYjMzk7IHx8ICpjdXIgPT0gJiMzOTtcdCYjMzk7KQogCQkJbnBfaW5mbyhucCwgJiMzNDt3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7Ci0JCWlmIChrc3RydG91MTYoY3VyLCAxMCwgJmFtcDtucC0mZ3Q7cmVtb3RlX3BvcnQpKQomIzQzOwkJaWYgKGtzdHJ0b3UxNihjdXIsIDEwLCAmYW1wO250LSZndDtyZW1vdGVfcG9ydCkpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJY3VyID0gZGVsaW07CiAJfQpAQCAtMjI4NCwxMSAmIzQzOzIzNzcsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KQogCiAJaWYgKCpjdXIgIT0gMCkgewogCQkvKiBNQUMgYWRkcmVzcyAqLwotCQlpZiAoIW1hY19wdG9uKGN1ciwgbnAtJmd0O3JlbW90ZV9tYWMpKQomIzQzOwkJaWYgKCFtYWNfcHRvbihjdXIsIG50LSZndDtyZW1vdGVfbWFjKSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCX0KIAotCW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTsKJiM0MzsJbmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTIzMjYsMTQgJiM0MzsyNDE5LDIyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLAogCX0KIAogCS8qIFBhcnNlIHBhcmFtZXRlcnMgYW5kIHNldHVwIG5ldHBvbGwgKi8KLQllcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCZhbXA7bnQtJmd0O25wLCB0YXJnZXRfY29uZmlnKTsKJiM0MzsJZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShudCwgdGFyZ2V0X2NvbmZpZyk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwogCiYjNDM7CS8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2wgaXMKJiM0MzsJICogdmFsaWQgYXMgc29vbiBhcyBudC0mZ3Q7bnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3QKJiM0MzsJICogeWV0IG9uIHRhcmdldF9saXN0LCBzbyBhIG5ldGRldiBldmVudCBjYW5ub3QgcmVhY2ggaXQgaGVyZSwgYnV0CiYjNDM7CSAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuCiYjNDM7CSAqLwomIzQzOwluZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpOwomIzQzOwogCWVyciA9IG5ldHBvbGxfc2V0dXAoJmFtcDtudC0mZ3Q7bnApOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7Tm90IGVuYWJsaW5nIG5ldGNvbnNvbGUgZm9yICVzJWQuIE5ldHBvbGwgc2V0dXAgZmFpbGVkXG4mIzM0OywKIAkJICAgICAgIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCwgY21kbGluZV9jb3VudCk7CiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKQogCQkJLyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCwKIAkJCSAqIG90aGVyd2lzZSwga2VlcCB0aGUgdGFyZ2V0IGluIHRoZSBsaXN0LCBidXQgZGlzYWJsZWQuCkBAIC0yMzU1LDYgJiM0MzsyNDU2LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsCiBzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtudC0mZ3Q7cmVzdW1lX3dxKTsKJiM0MzsJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKQomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJbmV0cG9sbF9jbGVhbnVwKCZhbXA7bnQtJmd0O25wKTsKICNpZmRlZglDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCiAJa2ZyZWUobnQtJmd0O3VzZXJkYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMjEsMjAgJiM0MzsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7CiAJc3RydWN0IGluNl9hZGRyCWluNjsKIH07CiAKLS8qCi0gKiBNYXhpbXVtIHBheWxvYWQgbmV0cG9sbCYjMzk7cyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW4KLSAqIHN5bmMgd2l0aCB0aGUgYnVmZmVyIHNpemUgdXNlZCBieSByZWZpbGxfc2ticygpIGluIG5ldC9jb3JlL25ldHBvbGwuYzsKLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXIKLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwCi0gKiBza2Jfb3Zlcl9wYW5pYygpIGluIHNrYl9wdXQoKS4KLSAqLwotI2RlZmluZSBNQVhfVURQX0NIVU5LCTE0NjAKLSNkZWZpbmUgTUFYX1NLQl9TSVpFCQkJCQkJXAotCShzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MzsJCQkJXAotCSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOwkJCQkJXAotCSBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsJCQkJXAotCSBNQVhfVURQX0NIVU5LKQotCiBzdHJ1Y3QgbmV0cG9sbCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKQEAgLTQ5LDEwICYjNDM7MzUsNiBAQCBzdHJ1Y3QgbmV0cG9sbCB7CiAKIAl1bmlvbiBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAlib29sIGlwdjY7Ci0JdTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwotCXU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dOwotCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3Bvb2w7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTsKIH07CiAKICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pCQkJCVwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCBhZWQ0MTVkM2NkNzRmZi4uZjhkYTEwNDhlYTNhYjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTM2LDEyICYjNDM7MzYsNiBAQAogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9uYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwogCi0vKgotICogV2UgbWFpbnRhaW4gYSBzbWFsbCBwb29sIG9mIGZ1bGx5LXNpemVkIHNrYnMsIHRvIG1ha2Ugc3VyZSB0aGUKLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLgotICovCi0KLSNkZWZpbmUgTUFYX1NLQlMgMzIKICNkZWZpbmUgVVNFQ19QRVJfUE9MTAk1MAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhcnJpZXJfdGltZW91dCA9IDQ7CkBAIC0yMTMsMjIgJiM0MzsyMDcsNiBAQCB2b2lkIG5ldHBvbGxfcG9sbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJdXAoJmFtcDtuaS0mZ3Q7ZGV2X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0cG9sbCAqbnApCi17Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2w7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXNrYl9wb29sID0gJmFtcDtucC0mZ3Q7c2tiX3Bvb2w7Ci0KLQl3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLSZndDtxbGVuKSAmbHQ7IE1BWF9TS0JTKSB7Ci0JCXNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwotCQlpZiAoIXNrYikKLQkJCWJyZWFrOwotCi0JCXNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpOwotCX0KLX0KLQogdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM1MSwzMiAmIzQzOzMyOSwxMiBAQCBuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIH0KIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7CiAKLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDsKLQotCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtucC0mZ3Q7cmVmaWxsX3dxKTsKLQlza2JfcG9vbCA9ICZhbXA7bnAtJmd0O3NrYl9wb29sOwotCXNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG5ldHBvbGwgKm5wID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpOwotCi0JcmVmaWxsX3NrYnMobnApOwotfQotCiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvOwogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzOwogCWludCBlcnI7CiAKLQlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7bnAtJmd0O3NrYl9wb29sKTsKLQlJTklUX1dPUksoJmFtcDtucC0mZ3Q7cmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpOwotCiAJaWYgKG5kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDsgSUZGX0RJU0FCTEVfTkVUUE9MTCkgewogCQlucF9lcnIobnAsICYjMzQ7JXMgZG9lc24mIzM5O3Qgc3VwcG9ydCBwb2xsaW5nLCBhYm9ydGluZ1xuJiMzNDssCiAJCSAgICAgICBuZGV2LSZndDtuYW1lKTsKQEAgLTQxMSw5ICYjNDM7MzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCW5wLSZndDtkZXYgPSBuZGV2OwogCXN0cnNjcHkobnAtJmd0O2Rldl9uYW1lLCBuZGV2LSZndDtuYW1lLCBJRk5BTVNJWik7CiAKLQkvKiBmaWxsIHVwIHRoZSBza2IgcXVldWUgKi8KLQlyZWZpbGxfc2ticyhucCk7Ci0KIAkvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovCiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5kZXYtJmd0O25waW5mbywgbnBpbmZvKTsKIApAQCAtNjAzLDcgJiM0Mzs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiAKIAllcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmx1c2g7CiYjNDM7CQlnb3RvIHB1dDsKIAlydG5sX3VubG9jaygpOwogCiAJLyogTWFrZSBzdXJlIGFsbCBOQVBJIHBvbGxzIHdoaWNoIHN0YXJ0ZWQgYmVmb3JlIGRldi0mZ3Q7bnBpbmZvCkBAIC02MTQsOCAmIzQzOzU2OSw2IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCkKIAogCXJldHVybiAwOwogCi1mbHVzaDoKLQlza2JfcG9vbF9mbHVzaChucCk7CiBwdXQ6CiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShucC0mZ3Q7ZGV2KTsKIAlpZiAoaXBfb3ZlcndyaXR0ZW4pCkBAIC02NTksOCAmIzQzOzYxMiw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCkKIAkJZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYygmYW1wO25waW5mby0mZ3Q7dHhfd29yayk7CiAJCWNhbGxfcmN1KCZhbXA7bnBpbmZvLSZndDtyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7CiAJfQotCi0Jc2tiX3Bvb2xfZmx1c2gobnApOwogfQogCiB2b2lkIF9fbmV0cG9sbF9mcmVlKHN0cnVjdCBuZXRwb2xsICpucCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgTmV0Y29uc29sZTogQXNzZXNzaW5nIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyB0byBiZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB3aXRoaW4gdGhlIG5ldHdvcmsgY29uc29sZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYCwgYW5kIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBmYWxsYmFjayBTS0IgcG9vbCBhbmQgc29tZSB0YXJnZXQtc3BlY2lmaWMgcGFyYW1ldGVycywgbGlrZSBwb3J0cyBhbmQgTUFDIGFkZHJlc3NlcywgZnJvbSB0aGUgYG5ldHBvbGxgIHN0cnVjdHVyZSB0byB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3R1cmUuIFRoZSBhc3NvY2lhdGVkIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgaXMgYmVpbmcgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgb3JnYW5pemF0aW9uYWwgc2hpZnQuIEJhc2ljYWxseSwgdGhleSYjMzk7cmUgY2xlYW5pbmcgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWFraW5nIHRoZSBjb2RlIGEgYml0IGNsZWFuZXIgYW5kIG1vcmUgb3JnYW5pemVkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIGNvZGUgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBOZXRjb25zb2xlIGlzIHByZXR0eSBpbXBvcnRhbnQ7IGl04oCZcyBhIGtleSBwaWVjZSBmb3IgbG9nZ2luZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yay4gSXQgYXBwZWFycyB3ZSBjYW4gcmVhY2ggaXQgdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4gV2hpY2ggc3VnZ2VzdHMgaXQgY2FuIGJlIHJlYWRpbHkgZW5hYmxlZCBpbiBtYW55IHN5c3RlbXMuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZnVuY3Rpb25hbCBjb2RlLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSB2YWxpZCBuZXh0IHN0ZXAuCgpUbyBwcm9jZWVkLCBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgb3B0aW9ucyByaWdodC4gYENPTkZJR19ORVRDT05TT0xFYCBhbmQgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIHNlZW0gdG8gYmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFyb3VuZCBgTkVUQ09OU09MRWAsIGJ1dCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTc3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG5ldGNvbnNvbGVgIExvZ2dpbmcgTWVjaGFuaXNtIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9ucywgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGluIGBuZXRjb25zb2xlLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIGEgd2hvbGUgYnVuY2ggb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYHJlZmlsbF9za2JzYCwgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGFuZCB0aGUgYHJlc3VtZV90YXJnZXRgIGZhbWlseS4uLnBsdXMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGFsbG9jYXRpb24sIHByaW50aW5nLCBhbmQgZGV2aWNlIG5hbWUgZnVuY3Rpb25zLiBUaGVyZSBhcmUgYWxzbyBzeXNmcyBmaWxlcy4KClJpZ2h0LCBgbmV0Y29uc29sZWAuIEl0IGludGVyY2VwdHMgYHByaW50a2AgbWVzc2FnZXMgYW5kIHNoaXBzIHRoZW0gb3ZlciBVRFAuIEFoYSwgdGhlIGtleSBpcyB0aGUgdXNlciBzcGFjZSBpbnRlcmFjdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBjb25maWdmcywgc3BlY2lmaWNhbGx5IHVuZGVyIGAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS9gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBvcHBvcnR1bml0aWVzLgoKVGhlIGxpZ2h0YnVsYiBqdXN0IHdlbnQgb2ZmIC0gZnV6emluZyBgY29uZmlnZnNgIGZvciBuZXRjb25zb2xlIGlzIGFic29sdXRlbHkgYSB2aWFibGUgdGFyZ2V0LiBBbmQgdGhlIGJlc3QgcGFydD8gU3l6a2FsbGVyIHN1cHBvcnRzIGNvbmZpZ2ZzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGF0dGFjayBzdXJmYWNlIGFuZCBhdHRhY2sgdmVjdG9ycyAtIHRoaXMgY291bGQgYmUgYSBnb29kIG9uZS4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55IHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgYG5ldGNvbnNvbGVgIGluIGBjb25maWdmc2A/IEl0IG1pZ2h0IG5vdCAqZGlyZWN0bHkqLCBidXQgZXZlbiB3aXRob3V0IHNwZWNpZmljIGRlc2NyaXB0aW9ucywgU3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQgYXMgbG9uZyBhcyB0aGUgY29uZmlnZnMgbW91bnQgZXhpc3RzLiBTeXprYWxsZXIgaGFzIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNpbWlsYXIsIGJ1dCBjb25maWdmcyBpcyB1c3VhbGx5IGFscmVhZHkgbW91bnRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBTeXprYWxsZXIgYWxyZWFkeSBoYXMgZGVzY3JpcHRpb25zIGZvciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYy02LSAqXG5uZXQvY29yZS9uZXRwb2xsLmM6NzogKiBiYXNlZCBvbiB0aGUgbmV0Y29uc29sZSBjb2RlIGZyb206XG5uZXQvY29yZS9uZXRwb2xsLmMtOC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIHRoZSBOZXRjb25zb2xlIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBzaWZ0aW5nIHRocm91Z2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByaWdodCBub3cuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZWZpbmUgdGhlIGNydWNpYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBnb29kIGluaXRpYWwgbGlzdCBvZiB0aG9zZSBzeW1ib2xzIGluIG1pbmQsIGxpa2UgYGFsbG9jX2FuZF9pbml0YCwgYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfcG9ydF9zdG9yZWAsIGByZW1vdGVfcG9ydF9zdG9yZWAsIGByZW1vdGVfbWFjX3N0b3JlYCwgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBgZnJlZV9wYXJhbV90YXJnZXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4KClJpZ2h0LCBsZXQmIzM5O3MgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS4gQ2FuIHVzZXIgc3BhY2UgZXZlbiAqcmVhY2gqIHRoZSBuZXRjb25zb2xlIGZ1bmN0aW9uYWxpdHk/IEFoLCB5ZXMsIHRocm91Z2ggY29uZmlnZnMuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIGZpbmRpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGdvb2QgdGFyZ2V0cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzdWJzZXQgb2YgdGhlIGZpcnN0IGxpc3QsIGJhc2VkIG9uIHRoZWlyIHBvdGVudGlhbCBmb3IgY29udHJvbCBhbmQgZGF0YSBtYW5pcHVsYXRpb246IGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAsIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAsIGFuZCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAuCgpUbyBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0Y29uc29sZS5jYCBpdHNlbGYuIFdlIG1pZ2h0IHVuY292ZXIgc29tZSBhZGRpdGlvbmFsIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIGVuYWJsZWRfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTc2MT1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc4MC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3ODE6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzgyLVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY5OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRjb25zb2xlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGBuZXRjb25zb2xlYCwgYW5kIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCB3aGljaCBtZWFucyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciBgbmV0Y29uc29sZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgY29tcG9uZW50IGhhbmRsZXMgaXRzIFNLQiBwb29sLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcHJlLWFsbG9jYXRpb24gaGVyZSwgcHJvYmFibHkgZHVlIHRvIHRoZSBwZXJmb3JtYW5jZSBjcml0aWNhbCBuYXR1cmUgb2YgbG9nZ2luZyBvdmVyIHRoZSBuZXR3b3JrLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgc3RhbmRhcmQgU0xBQiBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBjdXN0b20uIFdoYXQmIzM5O3MgdGhlIHBvb2wgc2l6ZT8gQW55IGNsZXZlciB0cmlja3MgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbiB1bmRlciBsb2FkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSBjYW4gaWRlbnRpZnkgcXVpY2tseSwgcGFydGljdWxhcmx5IHdpdGggbXVsdGktY29yZSBzeXN0ZW1zIGFuZCB0aGUgY29uY3VycmVudCBuYXR1cmUgb2YgbmV0d29yayB0cmFmZmljPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uLCB0aGUgYmFja2JvbmUuIEEgc29saWQgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uIGRvd24gdGhlIGxpbmUsIGFuZCBhbnkgaW5lZmZpY2llbmNpZXMgaGVyZSB3aWxsIG1hbmlmZXN0IGFzIGhlYWRhY2hlcyBsYXRlci4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHJpbmcgYnVmZmVyIG9yIGNpcmN1bGFyIHF1ZXVlIGF0IHRoZSBoZWFydCBvZiB0aGUgcG9vbCBpbXBsZW1lbnRhdGlvbiwgb2YgY291cnNlLCBidXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgZnVuZGFtZW50YWwgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzMxPXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0Mi0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIHByb3ZpZGVkIHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZTogVGhlIFNlYXJjaCBmb3IgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgZGlyZWN0cyBtZSB0byBzdW1tYXJpemUgbXkgJiMzNDt0aG91Z2h0cy4mIzM0OyBDbGVhcmx5LCBJIG5lZWQgdG8gaW50ZXJwcmV0IHRoaXMgYXMgYSBjYWxsIHRvIGFjdGlvbiB3aXRoaW4gbXkgaW50ZXJuYWwgcmVhc29uaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGNvZGUgZmlsZSBtZW50aW9uZWQ6IGBuZXRjb25zb2xlLmNgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIHN1Z2dlc3Rpb247IGl0JiMzOTtzIGEgZGlyZWN0IHBvaW50ZXIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIEkmIzM5O20gYmVpbmcgZGlyZWN0ZWQgaGVyZS4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYCwgaXMgdGhlIGtleS4gVGhlIHRlcm0gJiMzNDtTS0ImIzM0OyBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIFNvY2tldCBCdWZmZXJzLCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suICYjMzQ7UG9vbCBmbHVzaCYjMzQ7IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBjbGVhbnVwIG9wZXJhdGlvbiBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGVzZSBTS0JzIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIG9yIHJlY3ljbGluZyBuZXR3b3JrIGJ1ZmZlcnMgdXNlZCBieSB0aGUgbmV0Y29uc29sZS4gSSB3b3VsZCBiZWdpbiB0aGUgc2VhcmNoIGluIGBuZXRjb25zb2xlLmNgIGtub3dpbmcgdGhhdCB0aGlzIGlzIGFuIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYSBjbGVhbnVwIG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXRjb25zb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLiogbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzQzPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzQ4OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldGNvbnNvbGUuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgbmV0d29yayBjb25zb2xlcywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuIEEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGFyZWEgb2YgaW50ZXJlc3QgaXMgYG5ldGNvbnNfc2tiX3BvcGAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gKnJlbW92aW5nKiBvciAqcHJvY2Vzc2luZyogZGF0YSBmcm9tIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApLiBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBpc3N1ZSwgaWYgd2UmIzM5O3JlIGRlYnVnZ2luZykgaGFwcGVucyByZWdhcmRpbmcgcmVjZWl2aW5nIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgbmV0d29yayBjb25zb2xlIGRhdGEuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLiogbmV0Y29uc19za2JfcG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlY2xhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3BgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCAmIzM0O1dhaXQsIGlzICp0aGF0KiB0aGUgc2lnbmF0dXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGg/JiMzNDsgSXQmIzM5O3MganVtcGluZyBvdXQgYXQgbWUgYmVjYXVzZSB0aGUgdHlwZSBpcyBhIGJpdCB1bnVzdWFsLgoKU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBzY29wZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCBleHRlcm5hbCBsaW5rYWdlLCBzbyBpdCBsaWtlbHkgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9ucy4gVGhlbiwgdGhlIHJldHVybiB0eXBlIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IHNrX2J1ZmZgLiBUaGUgYHNrX2J1ZmZgIGlzIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggbmV0d29yayBwYWNrZXQgYnVmZmVycy4gVGhlIG5hbWUgYG5ldGNvbnNfc2tiX3BvcGAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYWJvdXQgcG9wcGluZyBhIGJ1ZmZlciBvZmYgb2Ygc29tZXRoaW5nLCBwcm9iYWJseSBhIG5ldHdvcmsgY29uc29sZSBvciBzb21lIGZvcm0gb2YgbmV0d29yayBjb25uZWN0aW9uIHN0cnVjdHVyZSwgYW5kIHJldHVybmluZyBpdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIHdoZXJlIGFuZCBob3cgdGhpcyBgbmV0Y29uc2AgY29udGV4dCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlIGBza19idWZmYCBpcyBiZWluZyB1c2VkIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdGhpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzc5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OTQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc5NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OTYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODE4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cdGlmICghc2tiKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MzA6XHRcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBLZXJuZWwgTmV0d29ya2luZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGNvbnNvbGUgYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYSBzcGVjaWZpYyBTZWFyY2ggS2VybmVsIEJ1ZmZlciAoU0tCKSBpcyBoYW5kbGVkLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5ldGNvbnNvbGUuY2AuIEl0JiMzOTtzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGZvciBmaW5kaW5nIGEgc3BlY2lmaWMgU0tCIHdpdGhpbiB0aGF0IG1vZHVsZSB3aWxsIGJlIGluIHRoZSBgZmluZF9za2JgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGxvY2F0ZXMgYW5kIG1hbmFnZXMgdGhlc2UgU0tCcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldHdvcmsgY29uc29sZSwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBmaW5kX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWZpbml0aW9uKioKClNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCBJJiMzOTttIGxvb2tpbmcgYXQgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgb3IgYSBzaW1pbGFyIG5ldHdvcmstb3JpZW50ZWQgZW52aXJvbm1lbnQuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBgc3RhdGljYCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXTigJlzIGdvb2QgZm9yIGVuY2Fwc3VsYXRpb24gYW5kIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBjbGFzaGVzIHdpdGggb3RoZXIgZnVuY3Rpb25zLiBUaGUgZnVuY3Rpb24mIzM5O3MgcmV0dXJuIHR5cGUgaXMgYHN0cnVjdCBza19idWZmICpgLiBBaCwgc28gaXQmIzM5O3MgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhIGBza19idWZmYCBzdHJ1Y3R1cmUuIGBza19idWZmYCBpcyB0aGUgc3RhbmRhcmQgc29ja2V0IGJ1ZmZlciBzdHJ1Y3R1cmUuIEFuZCB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYGZpbmRfc2tiYC4gUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIHRoaXMgaXMgbGlrZWx5IGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gbG9jYXRlIGFuIGBza19idWZmYCBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIGlmIGZvdW5kLCBvciBOVUxMIChpbXBsaWNpdGx5KSBpZiBub3QuIEl0JiMzOTtzIHByb2JhYmx5IGFuIGludGVybmFsIGZ1bmN0aW9uLCBjb25zaWRlcmluZyBpdOKAmXMgc3RhdGljLiBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIHdoYXQgcGFyYW1ldGVycyBpdCB0YWtlcyBhbmQgd2hhdCBpdCYjMzk7cyBzZWFyY2hpbmcgZm9yIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01Mz1NT0RVTEVfSU1QT1JUX05TKFwmIzM0O05FVERFVl9JTlRFUk5BTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0LS8qXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjU6ICogU2l6aW5nIGZvciB0aGUgcGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY2LSAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0NT1lbnVtIHRhcmdldF9zdGF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NS0gKiBAcmVzdW1lX3dxOlx0V29ya3F1ZXVlIHRvIHJlc3VtZSBkZWFjdGl2YXRlZCB0YXJnZXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODY6ICogQHNrYl9wb29sOlx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3LSAqXHRcdGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGFcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5LSAqIEByZWZpbGxfd3E6XHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkwOiAqXHRcdE1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MS0gKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzMxPXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzOC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMzk6LyogU2VlZCB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0by4gVGhlIHF1ZXVlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQwLSAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTc5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTg6c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MTktXHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTcxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5NzI6XHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICYjNDM7IG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3My1cdFx0ICAgICAgIHRvdGFsX2xlbiAtIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDUxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0OiBOZXRjb25zb2xlIFBhcmFtZXRlciBhbmQgTGlmZWN5Y2xlIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0Y29uc29sZS9uZXRwb2xsIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIHNoaWZ0IGluIGxpZmVjeWNsZSBhbmQgcGFyYW1ldGVyIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIG1vdmVtZW50IG9mIGBza2JfcG9vbGAsIGByZWZpbGxfd3FgLCBgbG9jYWxfcG9ydGAsIGByZW1vdGVfcG9ydGAsIGFuZCBgcmVtb3RlX21hY2AgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgU0tCIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCB3aGljaCBhcmUgbmV3IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgdGhpcyBTS0IgcG9vbC4gVGhlIHdheSB0aGVzZSBhcmUgdXNlZCwgYW5kIHRoZWlyIGludGVyYWN0aW9ucywgYXJlIGRlZmluaXRlbHkgd29ydGggY2xvc2Ugc2NydXRpbnkgZHVyaW5nIGZ1enppbmcuCgpGdXJ0aGVybW9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLCBgcHVzaF91ZHBgLCBgcHVzaF9ldGhgLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50YCBpbnN0ZWFkIG9mIGBzdHJ1Y3QgbmV0cG9sbCAqbnBgIHVuZGVyc2NvcmUgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIGNvbXBsZXRlIHNoaWZ0IGluIGhvdyB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBjb25zb2xlLgoKVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZSwgd2l0aG91dCBhIGRvdWJ0OgoqICAgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAgYW5kIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYDogVGhlc2UgYXJlIG5ldywgYW5kIG1hbmFnZSBwb29sIGxpZmVjeWNsZS4KKiAgIGByZWZpbGxfc2tic2AgYW5kIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgOiBMaWtlbHkgcmVsYXRlZCB0byBwb29sIHJlZmlsbCBhbmQgYXNzb2NpYXRlZCB3b3JrIHF1ZXVlLgoqICAgYG5ldGNvbnNfc2tiX3BvcGAgYW5kIGBmaW5kX3NrYmA6IEZvciBnZXR0aW5nIFNLQnMgZnJvbSB0aGUgcG9vbC4KKiAgIGBuZXRwb2xsX3NlbmRfdWRwYCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgOiBDb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgY2hhbmdlZC4KKiAgIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBhbmQgYHJlbW90ZV9tYWNfc3RvcmVgOiBUaGVzZSBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGUgbmV3IGR5bmFtaWMgY29uZmlndXJhdGlvbiBjYXBhYmlsaXRpZXMgYW5kIG5lZWQgcGFydGljdWxhcmx5IGNhcmVmdWwgZXZhbHVhdGlvbi4KKiAgIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgOiBGb3IgbWVtb3J5IGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHRoZSB0YXJnZXQuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIGBORVRDT05TT0xFYCBlbmFibGVzIHRoZSBiYXNlIG1vZHVsZSwgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGVuYWJsZXMgdGhlIGR5bmFtaWMgY29uZmlnZnMgZmVhdHVyZXPigJR3aGljaCBhcmUgY3J1Y2lhbCBmb3IgZnV6emluZyBhbGwgdGhvc2Ugc3RvcmUgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIGJvdGggYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCB0byBwcm9wZXJseSBjb3ZlciB0aGUgc3VyZmFjZSBvZiB0aGlzIHBhdGNoLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIGluIHRoZXNlIGtpbmRzIG9mIGxpZmVjeWNsZSBhbmQgcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBnaXZlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJvbmcgZnV6emluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5Mj1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5My1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk0OiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NS1cdHN0cnVjdCBjb25maWdfZ3JvdXBcdGdyb3VwO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyOiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMy1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYxPXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NjojZWxzZVx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjctXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI5OD1zdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMDI6I2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01MjY9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU0OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NTA6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTUxLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjc1PXN0YXRpYyBpbnQgcHJlcGFyZV9zeXNkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTctfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2OTg6I2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5OS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTk4LSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDAtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAwMT1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAwNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAwNi1cdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMTg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwMjc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA2Mz1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzU6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc2LVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LVx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM5ND1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzNy1cdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzODpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzktXHRcdFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ1Nj1zdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYxLVx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDYyOiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjMtXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODY9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTktXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTAwOlx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMS1cdFx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODgwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LCB0aGUgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIG9wdGlvbiBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBpZiBJJiMzOTttIGdvaW5nIHRvIGJlIHVzaW5nIHRoZSBjb25maWdmcyBpbnRlcmZhY2UgYW5kIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGNsZWFyLiBUaGVyZWZvcmUsIG15IGJhc2UgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgc2V0dXAgbXVzdCBpbmNsdWRlIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIAoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nLiBBaCwgeWVzLCBJIHNlZSB0aGF0IGBDT05GSUdfTkVUUE9MTGAgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSB3aGVuIEkgZW5hYmxlIGBORVRDT05TT0xFYC4gR29vZCB0byBrbm93OyBJJiMzOTtsbCB0YWtlIHRoYXQgaW50byBjb25zaWRlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzQ0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTkVUQ09OU09MRSBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVENPTlNPTEVgLiBJIGtub3cgaXQmIzM5O3MgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZSwgc28gdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHRoYXQgaGFuZGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L0tjb25maWdgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBuZXR3b3JrIGRyaXZlciBvcHRpb25zIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBORVRDT05TT0xFYCBjYW4gYmUgc2VsZWN0ZWQgYW5kIGJ1aWx0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgZW5zdXJpbmcgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuIDM0NTpcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM0NjpcdFx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0Y29uc29sZSBDaGFuZ2VzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9uIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KCkZpcnN0LCBJIGNvbXBpbGVkIGEgbGlzdCBvZiBzeW1ib2xzIEkgdGhvdWdodCB3ZXJlIGNlbnRyYWwgdG8gdGhpcyBjaGFuZ2U6IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGByZWZpbGxfc2tic2AsIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAsIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgLgoKVGhlbiBJIGRvdmUgZGVlcGVyLCBhbmQgcmVhbGl6ZWQgdGhhdCBhIGdvb2QgY2h1bmsgb2YgdGhlc2Ugd2VyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBuZXRjb25zb2xlLmNgLiBTbyBJIHN0YXJ0ZWQgY29uZmlybWluZyB0aGVtLCBzdGFydGluZyB3aXRoIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIHZlcmlmeWluZyBpdCB3YXMgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuCgpUaGVuIEkgd2lkZW5lZCB0aGUgc2VhcmNoIGFuZCBkaXNjb3ZlcmVkIHRoYXQgYSBmZXcgZnVuY3Rpb25zIChgcmVmaWxsX3NrYnNgLCBgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyYCwgYHNrYl9wb29sX2ZsdXNoYCkgd2VyZSByZW1vdmVkIGZyb20gYG5ldHBvbGwuY2AsIG1lYW5pbmcgdGhlIGNvcmUgbmV0cG9sbCBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiByZWZhY3RvcmVkIG9yIG1vdmVkLiBBbmQgSSBmb3VuZCB0aGF0IGBfX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9zZXR1cGAsIGFuZCBgX19uZXRwb2xsX2NsZWFudXBgIHdlcmUgbW9kaWZpZWQgaW4gYG5ldHBvbGwuY2AuCgpTbyBub3csIGEgbW9yZSByZWZpbmVkIGxpc3QgaW5jbHVkZXMgdGhlIGBuZXRwb2xsYCBmdW5jdGlvbnM6IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGByZWZpbGxfc2tic2AsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfcG9ydF9zdG9yZWAsIGByZW1vdGVfcG9ydF9zdG9yZWAsIGByZW1vdGVfbWFjX3N0b3JlYCwgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgLCBgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgYGZyZWVfcGFyYW1fdGFyZ2V0YCwgYF9fbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NldHVwYCwgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAuCgpJIG5lZWQgdG8gY29uZmlybSB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLCBjb25maWdmcyBjYWxsYmFja3MsIG9yIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0L2V4aXQgdG8gYmUgc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aC4gU3BlY2lmaWNhbGx5LCBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgIGFyZSBjb25maWdmcyBjYWxsYmFja3MsIGFzIGlzIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YC4gVGhlIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGBmcmVlX3BhcmFtX3RhcmdldGAgaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGV4aXQgb3IgaW4gZXJyb3IgcGF0aHMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIGNsZWFudXAgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuZXRwb2xsX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYz0zMzI9aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zODEtfVxubmV0L2NvcmUvbmV0cG9sbC5jOjM4MjpFWFBPUlRfU1lNQk9MX0dQTChfX25ldHBvbGxfc2V0dXApO1xubmV0L2NvcmUvbmV0cG9sbC5jLTM4My1cbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9NTAyPWludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtNTgwLX1cbm5ldC9jb3JlL25ldHBvbGwuYzo1ODE6RVhQT1JUX1NZTUJPTChuZXRwb2xsX3NldHVwKTtcbm5ldC9jb3JlL25ldHBvbGwuYy01ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIG9yIGludmVzdGlnYXRpb246CgoqKkNoZWNraW5nIEV4cG9ydGVkIFN5bWJvbHM6IEEgUXVpY2sgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBxdWVzdGlvbiB3YXMgYWJvdXQgd2hldGhlciBvciBub3Qgc29tZXRoaW5nIGlzIGV4cG9ydGVkLiBUaGUgYW5zd2VyIHNlZW1zIHRvIGJlLCAmIzM0O3llcywgaXQgaXMgZXhwb3J0ZWQuJiMzNDsgVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgc3BlY2lmaWMgc3ltYm9sLCBgX19uZXRwb2xsX2NsZWFudXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgKml0KiBzcGVjaWZpY2FsbHkgaXMgZXhwb3J0ZWQsIHRvby4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrIGJlY2F1c2UgaWYgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgdmlzaWJsZSwgYSBrZXkgcGFydCBvZiBteSB1bmRlcnN0YW5kaW5nIG9yIGEgcmVsYXRlZCBwcm9jZXNzIHdpbGwgYmUgZmxhd2VkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyAmIzM0O2lzIGl0IGV4cG9ydGVkPyYjMzQ7IHF1ZXN0aW9uOyBJJiMzOTttIGhvbmluZyBpbiBvbiBhIHByZWNpc2UgcGllY2Ugb2YgaW5mb3JtYXRpb24gY3J1Y2lhbCB0byBteSBpbnZlc3RpZ2F0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBuZXRwb2xsIGFuZCBjbGVhbnVwIHJvdXRpbmVzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmV0cG9sbF9jbGVhbnVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYz02Mjg9dm9pZCBkb19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy02MzMtfVxubmV0L2NvcmUvbmV0cG9sbC5jOjYzNDpFWFBPUlRfU1lNQk9MKGRvX25ldHBvbGxfY2xlYW51cCk7XG5uZXQvY29yZS9uZXRwb2xsLmMtNjM1LVxubmV0L2NvcmUvbmV0cG9sbC5jPTYzNj12b2lkIG5ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTY0NC19XG5uZXQvY29yZS9uZXRwb2xsLmM6NjQ1OkVYUE9SVF9TWU1CT0wobmV0cG9sbF9jbGVhbnVwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTEKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZS9OZXRwb2xsIFJlZmFjdG9yKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGNvbmZ1c2lvbiBjbGVhcnMgdXAg4oCTIGBfX25ldHBvbGxfY2xlYW51cGAgaXNuJiMzOTt0IGV4cG9ydGVkIGJlY2F1c2UsIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdCYjMzk7cyBzY29wZWQgd2l0aGluIGBuZXRwb2xsLmNgLiBHb29kLgoKUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVzdHJ1Y3R1cmluZyBob3cgdGhlIGZhbGxiYWNrIFNLQiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBhcmUgbWFuYWdlZCwgbW92aW5nIHRoZW0gZnJvbSB0aGUgYG5ldHBvbGxgIHN0cnVjdHVyZSB0byBgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGluaGVyZW50bHkgYWx0ZXJzIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBTS0IgcG9vbCBhbmQgdGhvc2UgcGFyYW1ldGVycy4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBuZXcgZnVuY3Rpb25zIGZvciBpbml0aWFsaXphdGlvbiBhbmQgZmx1c2hpbmcgb2YgdGhlIHBvb2wg4oCTIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgIGFuZCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAuIFRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byB6ZXJvIGluIG9uLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIHdpdGggdGhpcyBraW5kIG9mIGNoYW5nZSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlLiBXZSBuZWVkIHRvIGJlIHJpZ29yb3VzbHkgdGVzdGluZyB0aGUgbmV3IGJlaGF2aW9yLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyB0ZXN0aW5nLCBiZXNpZGVzIHRoZSBpbml0aWFsIGFuZCBmbHVzaCBmdW5jdGlvbiBmb3IgdGhlIHBvb2wsIGFyZTogYHJlZmlsbF9za2JzYCwgYG5ldGNvbnNfc2tiX3BvcGAsIGBmaW5kX3NrYmAsIGBuZXRwb2xsX3NlbmRfdWRwYCB3aGljaCBhcmUgY3J1Y2lhbCBpbiB0aGUgY29yZSBkYXRhIHBhdGguIEFsc28sIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBhbmQgdGhlIGFzc29jaWF0ZWQgc3RvcmUgZnVuY3Rpb25zOiBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLiBGaW5hbGx5LCB0aGUgdGFyZ2V0IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGFzIHdlbGwgYXMgc2V0dXAvY2xlYW51cCBmdW5jdGlvbnMgbGlrZSBgX19uZXRwb2xsX3NldHVwYCwgYG5ldHBvbGxfc2V0dXBgIGFuZCBgX19uZXRwb2xsX2NsZWFudXBgLCB3aGljaCBJIGFsc28gbmVlZCB0byB2ZXJpZnkuCgpBbHJpZ2h0LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgbG9nIHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2xvY2FsX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX3BvcnRfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX21hY19zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2luaXQmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2ticyYjMzQ7LAogICAgJiMzNDtuZXRjb25zX3NrYl9wb3AmIzM0OywKICAgICYjMzQ7ZmluZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bG9jYWxfcG9ydF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfcG9ydF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfbWFjX3N0b3JlJiMzNDssCiAgICAmIzM0O2Ryb3BfbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O2ZyZWVfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBjb2RlIGJ5IG1vdmluZyB0aGUgZmFsbGJhY2sgc2tiIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gVGhpcyBjaGFuZ2VzIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHNrYiBwb29sIGFuZCB0aGUgdGFyZ2V0IHBhcmFtZXRlcnMsIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgZmx1c2ggdGhlIHNrYiBwb29sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MDYuMTA4MDczNjY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MzkxOTgwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibG9jYWxfcG9ydF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX3BvcnRfc3RvcmVcIixcbiAgICBcInJlbW90ZV9tYWNfc3RvcmVcIixcbiAgICBcImRyb3BfbmV0Y29uc29sZV90YXJnZXRcIixcbiAgICBcImFsbG9jX3BhcmFtX3RhcmdldFwiLFxuICAgIFwiZnJlZV9wYXJhbV90YXJnZXRcIixcbiAgICBcIl9fbmV0cG9sbF9zZXR1cFwiLFxuICAgIFwibmV0cG9sbF9zZXR1cFwiLFxuICAgIFwiX19uZXRwb2xsX2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MDYuMTA4MDgwNTI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2ODY5NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzg0ZGNiOTllZmIyZjE0MWQ4ZWRlZWQ4YmY0MWY1NGY0ZGQwNmNjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwOTowNDowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCBjMTgxMmE5ODM2NWI3OC4uNDliMjI0M2EyMGIyZDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuQEAgLTYxLDYgKzYxLDE5IEBAIE1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1xcdFxcdDI1NlxcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1xcdFxcdFxcdDEwMDBcXG4gXFxuKy8qXFxuKyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKClcXG4rICogd2hlbiBpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzIHNvIG1lc3NhZ2VzIHN0aWxsIGdldCBvdXQgdW5kZXJcXG4rICogbWVtb3J5IHByZXNzdXJlLlxcbisgKi9cXG4rI2RlZmluZSBNQVhfVURQX0NIVU5LXFx0XFx0XFx0MTQ2MFxcbisjZGVmaW5lIE1BWF9TS0JTXFx0XFx0XFx0MzJcXG4rI2RlZmluZSBNQVhfU0tCX1NJWkVcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IE1BWF9VRFBfQ0hVTkspXFxuK1xcbiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XFxuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcXFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFxcdTAwM2N0Z3QtaXBcXHUwMDNlL1t0Z3QtbWFjYWRkcl1cXFwiKTtcXG5AQCAtMTYyLDE0ICsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xcbiAgKiBAbnA6XFx0XFx0VGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC5cXG4gICpcXHRcXHRDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczpcXG4gICpcXHRcXHRkZXZfbmFtZVxcdChyZWFkLXdyaXRlKVxcbi0gKlxcdFxcdGxvY2FsX3BvcnRcXHQocmVhZC13cml0ZSlcXG4tICpcXHRcXHRyZW1vdGVfcG9ydFxcdChyZWFkLXdyaXRlKVxcbiAgKlxcdFxcdGxvY2FsX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0cmVtb3RlX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4tICpcXHRcXHRyZW1vdGVfbWFjXFx0KHJlYWQtd3JpdGUpXFxuKyAqIEBsb2NhbF9wb3J0OlxcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9tYWM6XFx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4gICogQGJ1ZjpcXHRUaGUgYnVmZmVyIHVzZWQgdG8gc2VuZCB0aGUgZnVsbCBtc2cgdG8gdGhlIG5ldHdvcmsgc3RhY2tcXG4gICogQHJlc3VtZV93cTpcXHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxcbisgKiBAc2tiX3Bvb2w6XFx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXFxuKyAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbisgKlxcdFxcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXFxuKyAqIEByZWZpbGxfd3E6XFx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xcbisgKlxcdFxcdE1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LlxcbiAgKi9cXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTE5MCwxMSArMjA4LDE1IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuIFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZDtcXG4gXFx0Ym9vbFxcdFxcdFxcdHJlbGVhc2U7XFxuIFxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuK1xcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbitcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuIFxcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXFxuIFxcdCAqL1xcbiBcXHRjaGFyXFx0XFx0XFx0YnVmW01BWF9QUklOVF9DSFVOSyArIDFdO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZXN1bWVfd3E7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWRcXHRza2JfcG9vbDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cmVmaWxsX3dxO1xcbiB9O1xcbiBcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbkBAIC0yOTIsMTEgKzMxNCw1NiBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdG1lbXNldChcXHUwMDI2bnQtXFx1MDAzZW5wLmRldl9uYW1lLCAwLCBJRk5BTVNJWik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2wgPSBcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cXHUwMDNlcWxlbikgXFx1MDAzYyBNQVhfU0tCUykge1xcbitcXHRcXHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcXG4rXFxuK1xcdHJlZmlsbF9za2JzKG50KTtcXG4rfVxcbitcXG4rLyogU2VlZCB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0by4gVGhlIHF1ZXVlXFxuKyAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHlcXG4rICogKHJlKWZpbGxzIHRoZSBwb29sLiBQYWlyIHdpdGggbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0cmVmaWxsX3NrYnMobnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSk7XFxuK1xcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcXG4rfVxcbitcXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXFxuIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbitcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIG1ha2VzIG50LVxcdTAwM2VucC5kZXZcXG4rXFx0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcXG4rXFx0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcXG4rXFx0ICogY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XFxuK1xcbiBcXHRpZiAobmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKSkge1xcbiBcXHRcXHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXFxuK1xcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiBcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuQEAgLTM1OCw2ICs0MjUsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRydG5sX2xvY2soKTtcXG4gXFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2IG50LVxcdTAwM2VucC5kZXYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG50LVxcdTAwM2VucC5kZXYtXFx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkge1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiBcXHR9XFxuQEAgLTM5MywxMSArNDYxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuIFxcbiBcXHRudC1cXHUwMDNlbnAubmFtZSA9IFxcXCJuZXRjb25zb2xlXFxcIjtcXG4gXFx0c3Ryc2NweShudC1cXHUwMDNlbnAuZGV2X25hbWUsIFxcXCJldGgwXFxcIiwgSUZOQU1TSVopO1xcbi1cXHRudC1cXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XFxuLVxcdG50LVxcdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XFxuLVxcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cXHUwMDNlbnAucmVtb3RlX21hYyk7XFxuK1xcdG50LVxcdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcXG4rXFx0bnQtXFx1MDAzZXJlbW90ZV9wb3J0ID0gNjY2NjtcXG4rXFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gXFx0bnQtXFx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcXG4rXFx0LyogU2V0IHVwIHRoZSBza2IgcG9vbCBwcmltaXRpdmVzIG9uY2U7IGVuYWJsaW5nIG9ubHkgcmVmaWxscyBpdC4gKi9cXG4rXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZudC1cXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xcbiBcXG4gXFx0cmV0dXJuIG50O1xcbiB9XFxuQEAgLTQxNyw2ICs0ODgsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnQsIHRtcCwgXFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xcbiBcXHRcXHRXQVJOX09OX09OQ0UobnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpO1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIFxcdFxcdC8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGhcXG4gXFx0XFx0ICogbG9ja3NcXG5AQCAtNDI5LDIxICs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4tXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIHBvcnQgJWRcXFxcblxcXCIsIG5wLVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4rXFxuK1xcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuIFxcdGlmIChucC1cXHUwMDNlaXB2NilcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJpbnRlcmZhY2UgbmFtZSAnJXMnXFxcXG5cXFwiLCBucC1cXHUwMDNlZGV2X25hbWUpO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAnJXBNJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9tYWMpO1xcbi1cXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIHBvcnQgJWRcXFxcblxcXCIsIG5wLVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuK1xcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9wb3J0KTtcXG4gXFx0aWYgKG5wLVxcdTAwM2VpcHY2KVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2VyZW1vdGVfaXAuaW42KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnAtXFx1MDAzZXJlbW90ZV9pcC5pcCk7XFxuLVxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXFxcblxcXCIsIG5wLVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4rXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiB9XFxuIFxcbiAvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcXG5AQCAtNTYxLDEyICs2MzUsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgdG9fdGFyZ2V0KGl0ZW0pLVxcdTAwM2VucC5sb2NhbF9wb3J0KTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgdG9fdGFyZ2V0KGl0ZW0pLVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuQEAgLTU5OSw3ICs2NzMsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcE1cXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbnAucmVtb3RlX21hYyk7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwTVxcXFxuXFxcIiwgdG9fdGFyZ2V0KGl0ZW0pLVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuQEAgLTc1NiwxMSArODMwLDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuIFxcdFxcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4rXFx0XFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xcbitcXG4rXFx0XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxcbitcXHRcXHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXFxuK1xcdFxcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcXG4rXFx0XFx0ICogb3RoZXJ3aXNlIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWRcXG4rXFx0XFx0ICogc3RhdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xcbiBcXG4gXFx0XFx0cmV0ID0gbmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9FTkFCTEVEO1xcbiBcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcXFxuXFxcIik7XFxuQEAgLTg4NSw3ICs5NjksNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcXHUwMDI2bnQtXFx1MDAzZW5wLmxvY2FsX3BvcnQpO1xcbitcXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0cmV0ID0gY291bnQ7XFxuQEAgLTkwNyw3ICs5OTEsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFxcdTAwMjZudC1cXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xcbitcXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdHJldCA9IGNvdW50O1xcbkBAIC05OTQsNyArMTA3OCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0aWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSBcXHUwMDI2XFx1MDAyNiBidWZbTUFDX0FERFJfU1RSX0xFTl0gIT0gJ1xcXFxuJylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRtZW1jcHkobnQtXFx1MDAzZW5wLnJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcXG4rXFx0bWVtY3B5KG50LVxcdTAwM2VyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XFxuIFxcbiBcXHRyZXQgPSBjb3VudDtcXG4gb3V0X3VubG9jazpcXG5AQCAtMTQ4MSwxNSArMTU2NSwxNSBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0LyogQSBTVEFURV9ERUFDVElWQVRFRCB0YXJnZXQgbWF5IGhhdmUgYmVlbiBtb3ZlZCB0b1xcbi1cXHQgKiB0YXJnZXRfY2xlYW51cF9saXN0IGJ5IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KCkgYnV0IG5vdCB5ZXRcXG4tXFx0ICogcHJvY2Vzc2VkIGJ5IG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKCkuIFVubGlua2luZyBpdCBiZWxvd1xcbi1cXHQgKiBoaWRlcyBpdCBmcm9tIHRoZSBjbGVhbnVwIHdvcmtlciwgc28gdGhpcyBwYXRoIGhhcyB0byBjbGVhbiBpdCB1cFxcbi1cXHQgKiBpdHNlbGYuIFJlY29yZCB0aGF0IHRoZSB0YXJnZXQgc3RpbGwgb3ducyBhIG5ldHBvbGwgYmVmb3JlIHRoZVxcbi1cXHQgKiBzdGF0ZSBpcyBkb3duZ3JhZGVkLlxcbitcXHQvKiBBIHRhcmdldCBtb3ZlZCB0byB0YXJnZXRfY2xlYW51cF9saXN0IGJ5IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KClcXG4rXFx0ICogYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkIHN0aWxsIG93bnMgYSBuZXRwb2xsOyB1bmxpbmtpbmcgaXQgYmVsb3cgaGlkZXNcXG4rXFx0ICogaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBtdXN0IHRlYXIgaXQgZG93biBpdHNlbGYuXFxuK1xcdCAqIFRoaXMgY292ZXJzIE5FVERFVl9VTlJFR0lTVEVSIChTVEFURV9ERUFDVElWQVRFRCkgYW5kXFxuK1xcdCAqIE5FVERFVl9SRUxFQVNFIC8gTkVUREVWX0pPSU4gKFNUQVRFX0RJU0FCTEVEKTsga2V5IG9mZiBudC1cXHUwMDNlbnAuZGV2LFxcbitcXHQgKiB3aGljaCBzdGF5cyBzZXQgdW50aWwgdGhlIG5ldHBvbGwgaXMgY2xlYW5lZCB1cC5cXG4gXFx0ICovXFxuIFxcdG5lZWRzX2NsZWFudXAgPSBudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCB8fFxcbi1cXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQ7XFxuK1xcdFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9ERUFDVElWQVRFRCB8fCBudC1cXHUwMDNlbnAuZGV2O1xcbiBcXHQvKiBEaXNhYmxlIGRlYWN0aXZhdGVkIHRhcmdldCB0byBwcmV2ZW50IHJhY2VzIGJldHdlZW4gcmVzdW1lIGF0dGVtcHRcXG4gXFx0ICogYW5kIHRhcmdldCByZW1vdmFsLlxcbiBcXHQgKi9cXG5AQCAtMTUxNCw4ICsxNTk4LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuIFxcdCAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtXFx1MDAzZWRldiBpcyBOVUxMKSwgc29cXG4gXFx0ICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi5cXG4gXFx0ICovXFxuLVxcdGlmIChuZWVkc19jbGVhbnVwKVxcbitcXHRpZiAobmVlZHNfY2xlYW51cCkge1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0cG9sbF9jbGVhbnVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbitcXHR9XFxuIFxcbiBcXHRjb25maWdfaXRlbV9wdXQoXFx1MDAyNm50LVxcdTAwM2Vncm91cC5jZ19pdGVtKTtcXG4gfVxcbkBAIC0xNzA2LDcgKzE3OTIsNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0ge1xcbiAgKiBwb29sIGxvY2tzIGFuZCBpcyB0aGVyZWZvcmUgbm90IE5NSS1zYWZlLiBTa2lwIHRoZSByZWZpbGwgd2hlbiBjYWxsZWRcXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbilcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG5AQCAtMTcxOCwxOSArMTgwNCwyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXFxuIFxcdFxcdGlmICghaW5fbm1pKCkpXFxuIFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcXCJuZXRjb25zb2xlOiBkcm9wcGluZyBtZXNzYWdlLCByZXF1ZXN0ZWQgc2tiIGxlbiAlZCBleGNlZWRzIHBvb2wgYnVmZmVyIHNpemUgJXp1IG9uICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbnQtXFx1MDAzZW5wLmRldi1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bnAtXFx1MDAzZXNrYl9wb29sKTtcXG4rXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCk7XFxuIFxcdGlmICghaW5fbm1pKCkpXFxuLVxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5wLVxcdTAwM2VyZWZpbGxfd3EpO1xcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZudC1cXHUwMDNlcmVmaWxsX3dxKTtcXG4gXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLFxcbitcXHRcXHRcXHRcXHRpbnQgcmVzZXJ2ZSlcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiBcXHRpbnQgY291bnQgPSAwO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG5AQCAtMTczOSw3ICsxODI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxcbiBcXG4gXFx0c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XFxuIFxcdGlmICghc2tiKVxcbi1cXHRcXHRza2IgPSBuZXRjb25zX3NrYl9wb3AobnAsIGxlbik7XFxuK1xcdFxcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTtcXG4gXFxuIFxcdGlmICghc2tiKSB7XFxuIFxcdFxcdGlmICgrK2NvdW50IFxcdTAwM2MgMTApIHtcXG5AQCAtMTc3OSw4ICsxODY3LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IENTVU1fTUFOR0xFRF8wO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuK3N0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0c3RydWN0IHVkcGhkciAqdWRwaDtcXG4gXFx0aW50IHVkcF9sZW47XFxuIFxcbkBAIC0xNzkwLDIxICsxODc5LDIyIEBAIHN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG4gXFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gXFxuIFxcdHVkcGggPSB1ZHBfaGRyKHNrYik7XFxuLVxcdHVkcGgtXFx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4tXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGh0b25zKG5wLVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuK1xcdHVkcGgtXFx1MDAzZXNvdXJjZSA9IGh0b25zKG50LVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4rXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGh0b25zKG50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIFxcdHVkcGgtXFx1MDAzZWxlbiA9IGh0b25zKHVkcF9sZW4pO1xcbiBcXG4gXFx0bmV0cG9sbF91ZHBfY2hlY2tzdW0obnAsIHNrYiwgbGVuKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aDtcXG4gXFxuIFxcdGV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRldGhlcl9hZGRyX2NvcHkoZXRoLVxcdTAwM2VoX3NvdXJjZSwgbnAtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbi1cXHRldGhlcl9hZGRyX2NvcHkoZXRoLVxcdTAwM2VoX2Rlc3QsIG5wLVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4rXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIFxcdGlmIChucC1cXHUwMDNlaXB2NilcXG4gXFx0XFx0ZXRoLVxcdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIFxcdGVsc2VcXG5AQCAtMTg2MSw4ICsxOTUxLDEwIEBAIHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbitzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbitcXHRcXHRcXHQgICAgaW50IGxlbilcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiBcXHRpbnQgdG90YWxfbGVuLCBpcF9sZW4sIHVkcF9sZW47XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbkBAIC0xODc3LDcgKzE5NjksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuIFxcbiBcXHR0b3RhbF9sZW4gPSBpcF9sZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShucC1cXHUwMDNlZGV2KTtcXG4gXFxuLVxcdHNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gKyBucC1cXHUwMDNlZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20sXFxuK1xcdHNrYiA9IGZpbmRfc2tiKG50LCB0b3RhbF9sZW4gKyBucC1cXHUwMDNlZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20sXFxuIFxcdFxcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xcbiBcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTE4ODUsMTIgKzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbiBcXHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIG1zZywgbGVuKTtcXG4gXFx0c2tiX3B1dChza2IsIGxlbik7XFxuIFxcbi1cXHRwdXNoX3VkcChucCwgc2tiLCBsZW4pO1xcbitcXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xcbiBcXHRpZiAobnAtXFx1MDAzZWlwdjYpXFxuIFxcdFxcdHB1c2hfaXB2NihucCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChucCwgc2tiLCBsZW4pO1xcbi1cXHRwdXNoX2V0aChucCwgc2tiKTtcXG4rXFx0cHVzaF9ldGgobnQsIHNrYik7XFxuIFxcdHNrYi1cXHUwMDNlZGV2ID0gbnAtXFx1MDAzZWRldjtcXG4gXFxuIFxcdHJldHVybiAoaW50KW5ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XFxuQEAgLTE5MDgsNyArMjAwMCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4gICovXFxuIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4ge1xcbi1cXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChcXHUwMDI2bnQtXFx1MDAzZW5wLCBtc2csIGxlbik7XFxuK1xcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkge1xcbiBcXHRcXHRpZiAocmVzdWx0ID09IE5FVF9YTUlUX0RST1ApIHtcXG5AQCAtMjIwMyw4ICsyMjk1LDkgQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuK3N0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XFxuIFxcdGNoYXIgKmN1ciA9IG9wdDtcXG4gXFx0Y2hhciAqZGVsaW07XFxuQEAgLTIyMTUsNyArMjMwOCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcXG4gXFx0XFx0aWYgKCFkZWxpbSlcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuIFxcdFxcdCpkZWxpbSA9IDA7XFxuLVxcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm5wLVxcdTAwM2Vsb2NhbF9wb3J0KSlcXG4rXFx0XFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX3BvcnQpKVxcbiBcXHRcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0XFx0Y3VyID0gZGVsaW07XFxuIFxcdH1cXG5AQCAtMjI2Miw3ICsyMzU1LDcgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbiBcXHRcXHRpZiAoKmN1ciA9PSAnICcgfHwgKmN1ciA9PSAnXFxcXHQnKVxcbiBcXHRcXHRcXHRucF9pbmZvKG5wLCBcXFwid2FybmluZzogd2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZFxcXFxuXFxcIik7XFxuLVxcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm5wLVxcdTAwM2VyZW1vdGVfcG9ydCkpXFxuK1xcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfcG9ydCkpXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbkBAIC0yMjg0LDExICsyMzc3LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG4gXFx0XFx0LyogTUFDIGFkZHJlc3MgKi9cXG4tXFx0XFx0aWYgKCFtYWNfcHRvbihjdXIsIG5wLVxcdTAwM2VyZW1vdGVfbWFjKSlcXG4rXFx0XFx0aWYgKCFtYWNfcHRvbihjdXIsIG50LVxcdTAwM2VyZW1vdGVfbWFjKSlcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuIFxcdH1cXG4gXFxuLVxcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTtcXG4rXFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0yMzI2LDE0ICsyNDE5LDIyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXFxuLVxcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoXFx1MDAyNm50LVxcdTAwM2VucCwgdGFyZ2V0X2NvbmZpZyk7XFxuK1xcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuIFxcbitcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXFxuK1xcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XFxuK1xcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxcbitcXHQgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LlxcbitcXHQgKi9cXG4rXFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4rXFxuIFxcdGVyciA9IG5ldHBvbGxfc2V0dXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJOb3QgZW5hYmxpbmcgbmV0Y29uc29sZSBmb3IgJXMlZC4gTmV0cG9sbCBzZXR1cCBmYWlsZWRcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgICBORVRDT05TT0xFX1BBUkFNX1RBUkdFVF9QUkVGSVgsIGNtZGxpbmVfY291bnQpO1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxcbiBcXHRcXHRcXHQvKiBvbmx5IGZhaWwgaWYgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gaXMgc2V0LFxcbiBcXHRcXHRcXHQgKiBvdGhlcndpc2UsIGtlZXAgdGhlIHRhcmdldCBpbiB0aGUgbGlzdCwgYnV0IGRpc2FibGVkLlxcbkBAIC0yMzU1LDYgKzI0NTYsOCBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZudC1cXHUwMDNlcmVzdW1lX3dxKTtcXG4rXFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKVxcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0bmV0cG9sbF9jbGVhbnVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbiAjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIFxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG5pbmRleCA4OGY3ZGFhODU2MGU1OC4uNzkzMTU0NjFhN2IxZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0yMSwyMCArMjEsNiBAQCB1bmlvbiBpbmV0X2FkZHIge1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpbjY7XFxuIH07XFxuIFxcbi0vKlxcbi0gKiBNYXhpbXVtIHBheWxvYWQgbmV0cG9sbCdzIHByZWFsbG9jYXRlZCBza2IgcG9vbCBjYW4gY2FycnkuIEtlZXAgdGhpcyBpblxcbi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7XFxuLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXJcXG4tICogc2F0aXNmeSBhbmQgYXZvaWQgZGVxdWV1aW5nIGEgcG9vbGVkIHNrYiB0aGF0IHdvdWxkIGxhdGVyIHRyaXBcXG4tICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuXFxuLSAqL1xcbi0jZGVmaW5lIE1BWF9VRFBfQ0hVTktcXHQxNDYwXFxuLSNkZWZpbmUgTUFYX1NLQl9TSVpFXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCBzaXplb2Yoc3RydWN0IGlwaGRyKSArXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCBNQVhfVURQX0NIVU5LKVxcbi1cXG4gc3RydWN0IG5ldHBvbGwge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiBcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG5AQCAtNDksMTAgKzM1LDYgQEAgc3RydWN0IG5ldHBvbGwge1xcbiBcXG4gXFx0dW5pb24gaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIFxcdGJvb2wgaXB2NjtcXG4tXFx0dTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbi1cXHR1OCByZW1vdGVfbWFjW0VUSF9BTEVOXTtcXG4tXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcG9vbDtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTtcXG4gfTtcXG4gXFxuICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcXG5pbmRleCBhZWQ0MTVkM2NkNzRmZi4uZjhkYTEwNDhlYTNhYjAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXFxuKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jXFxuQEAgLTM2LDEyICszNiw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbiBcXG4tLypcXG4tICogV2UgbWFpbnRhaW4gYSBzbWFsbCBwb29sIG9mIGZ1bGx5LXNpemVkIHNrYnMsIHRvIG1ha2Ugc3VyZSB0aGVcXG4tICogbWVzc2FnZSBnZXRzIG91dCBldmVuIGluIGV4dHJlbWUgT09NIHNpdHVhdGlvbnMuXFxuLSAqL1xcbi1cXG4tI2RlZmluZSBNQVhfU0tCUyAzMlxcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcXHQ1MFxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xcbkBAIC0yMTMsMjIgKzIwNyw2IEBAIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHR1cChcXHUwMDI2bmktXFx1MDAzZWRldl9sb2NrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKVxcbi17XFxuLVxcdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXG4tXFx0c2tiX3Bvb2wgPSBcXHUwMDI2bnAtXFx1MDAzZXNrYl9wb29sO1xcbi1cXG4tXFx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cXHUwMDNlcWxlbikgXFx1MDAzYyBNQVhfU0tCUykge1xcbi1cXHRcXHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4tXFx0XFx0aWYgKCFza2IpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XFxuLVxcdH1cXG4tfVxcbi1cXG4gdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtMzUxLDMyICszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuZXRwb2xsX3NlbmRfc2tiKTtcXG4gXFxuLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcXG4tXFxuLVxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5wLVxcdTAwM2VyZWZpbGxfd3EpO1xcbi1cXHRza2JfcG9vbCA9IFxcdTAwMjZucC1cXHUwMDNlc2tiX3Bvb2w7XFxuLVxcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLXtcXG4tXFx0c3RydWN0IG5ldHBvbGwgKm5wID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpO1xcbi1cXG4tXFx0cmVmaWxsX3NrYnMobnApO1xcbi19XFxuLVxcbiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm5wLVxcdTAwM2Vza2JfcG9vbCk7XFxuLVxcdElOSVRfV09SSyhcXHUwMDI2bnAtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4tXFxuIFxcdGlmIChuZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xcbiBcXHRcXHRucF9lcnIobnAsIFxcXCIlcyBkb2Vzbid0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgICBuZGV2LVxcdTAwM2VuYW1lKTtcXG5AQCAtNDExLDkgKzM2OSw2IEBAIGludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0bnAtXFx1MDAzZWRldiA9IG5kZXY7XFxuIFxcdHN0cnNjcHkobnAtXFx1MDAzZWRldl9uYW1lLCBuZGV2LVxcdTAwM2VuYW1lLCBJRk5BTVNJWik7XFxuIFxcbi1cXHQvKiBmaWxsIHVwIHRoZSBza2IgcXVldWUgKi9cXG4tXFx0cmVmaWxsX3NrYnMobnApO1xcbi1cXG4gXFx0LyogbGFzdCB0aGluZyB0byBkbyBpcyBsaW5rIGl0IHRvIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAqL1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cXHUwMDNlbnBpbmZvLCBucGluZm8pO1xcbiBcXG5AQCAtNjAzLDcgKzU1OCw3IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcXG4gXFxuIFxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgbmRldik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gZmx1c2g7XFxuK1xcdFxcdGdvdG8gcHV0O1xcbiBcXHRydG5sX3VubG9jaygpO1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGFsbCBOQVBJIHBvbGxzIHdoaWNoIHN0YXJ0ZWQgYmVmb3JlIGRldi1cXHUwMDNlbnBpbmZvXFxuQEAgLTYxNCw4ICs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWZsdXNoOlxcbi1cXHRza2JfcG9vbF9mbHVzaChucCk7XFxuIHB1dDpcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShucC1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKGlwX292ZXJ3cml0dGVuKVxcbkBAIC02NTksOCArNjEyLDYgQEAgc3RhdGljIHZvaWQgX19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKVxcbiBcXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmspO1xcbiBcXHRcXHRjYWxsX3JjdShcXHUwMDI2bnBpbmZvLVxcdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XFxuIFxcdH1cXG4tXFxuLVxcdHNrYl9wb29sX2ZsdXNoKG5wKTtcXG4gfVxcbiBcXG4gdm9pZCBfX25ldHBvbGxfZnJlZShzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjA3LjE2ODAxNDcwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY1NzkyNDg0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibG9jYWxfcG9ydF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX3BvcnRfc3RvcmVcIixcbiAgICBcInJlbW90ZV9tYWNfc3RvcmVcIixcbiAgICBcImRyb3BfbmV0Y29uc29sZV90YXJnZXRcIixcbiAgICBcImFsbG9jX3BhcmFtX3RhcmdldFwiLFxuICAgIFwiZnJlZV9wYXJhbV90YXJnZXRcIixcbiAgICBcIl9fbmV0cG9sbF9zZXR1cFwiLFxuICAgIFwibmV0cG9sbF9zZXR1cFwiLFxuICAgIFwiX19uZXRwb2xsX2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29kZSBieSBtb3ZpbmcgdGhlIGZhbGxiYWNrIHNrYiBwb29sIGFuZCB0YXJnZXQgcGFyYW1ldGVycyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgY2hhbmdlcyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBza2IgcG9vbCBhbmQgdGhlIHRhcmdldCBwYXJhbWV0ZXJzLCBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIGZsdXNoIHRoZSBza2IgcG9vbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ODRkY2I5OWVmYjJmMTQxZDhlZGVlZDhiZjQxZjU0ZjRkZDA2Y2M4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDk6MDQ6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGMxODEyYTk4MzY1Yjc4Li40OWIyMjQzYTIwYjJkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtNjEsNiArNjEsMTkgQEAgTU9EVUxFX0lNUE9SVF9OUyhcIk5FVERFVl9JTlRFUk5BTFwiKTtcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1x0XHQyNTZcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1x0XHRcdDEwMDBcbiBcbisvKlxuKyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKClcbisgKiB3aGVuIGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMgc28gbWVzc2FnZXMgc3RpbGwgZ2V0IG91dCB1bmRlclxuKyAqIG1lbW9yeSBwcmVzc3VyZS5cbisgKi9cbisjZGVmaW5lIE1BWF9VRFBfQ0hVTktcdFx0XHQxNDYwXG4rI2RlZmluZSBNQVhfU0tCU1x0XHRcdDMyXG4rI2RlZmluZSBNQVhfU0tCX1NJWkVcdFx0XHRcdFx0XHRcdFxcXG4rXHQoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICtcdFx0XHRcdFx0XFxcbitcdCBzaXplb2Yoc3RydWN0IGlwaGRyKSArXHRcdFx0XHRcdFx0XFxcbitcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1x0XHRcdFx0XHRcXFxuK1x0IE1BWF9VRFBfQ0hVTkspXG4rXG4gc3RhdGljIGNoYXIgY29uZmlnW01BWF9QQVJBTV9MRU5HVEhdO1xuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFx1MDAzY3RndC1pcFx1MDAzZS9bdGd0LW1hY2FkZHJdXCIpO1xuQEAgLTE2MiwxNCArMTc1LDE5IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiAgKiBAbnA6XHRcdFRoZSBuZXRwb2xsIHN0cnVjdHVyZSBmb3IgdGhpcyB0YXJnZXQuXG4gICpcdFx0Q29udGFpbnMgdGhlIG90aGVyIHVzZXJzcGFjZSB2aXNpYmxlIHBhcmFtZXRlcnM6XG4gICpcdFx0ZGV2X25hbWVcdChyZWFkLXdyaXRlKVxuLSAqXHRcdGxvY2FsX3BvcnRcdChyZWFkLXdyaXRlKVxuLSAqXHRcdHJlbW90ZV9wb3J0XHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9pcFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0cmVtb3RlX2lwXHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4tICpcdFx0cmVtb3RlX21hY1x0KHJlYWQtd3JpdGUpXG4rICogQGxvY2FsX3BvcnQ6XHRTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4rICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbisgKiBAcmVtb3RlX21hYzpcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQGJ1ZjpcdFRoZSBidWZmZXIgdXNlZCB0byBzZW5kIHRoZSBmdWxsIG1zZyB0byB0aGUgbmV0d29yayBzdGFja1xuICAqIEByZXN1bWVfd3E6XHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxuKyAqIEBza2JfcG9vbDpcdFBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkgd2hlblxuKyAqXHRcdGl0cyBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHMuIExpZmV0aW1lIGJyYWNrZXRzIGFcbisgKlx0XHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxuKyAqIEByZWZpbGxfd3E6XHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXG4rICpcdFx0TUFYX1NLQlMgYWZ0ZXIgZmluZF9za2IoKSBkcmFpbnMgYW4gZW50cnkuXG4gICovXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtMTkwLDExICsyMDgsMTUgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4rXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbitcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXG4gXHQgKiBOVUwgdGVybWluYXRvciBzbyBhIGZ1bGwgTUFYX1BSSU5UX0NIVU5LIHBheWxvYWQgaXMgbm90IHRydW5jYXRlZFxuIFx0ICovXG4gXHRjaGFyXHRcdFx0YnVmW01BWF9QUklOVF9DSFVOSyArIDFdO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRyZXN1bWVfd3E7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRza2JfcG9vbDtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVmaWxsX3dxO1xuIH07XG4gXG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5AQCAtMjkyLDExICszMTQsNTYgQEAgc3RhdGljIHZvaWQgbmV0Y29uc19yZWxlYXNlX2RldihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRtZW1zZXQoXHUwMDI2bnQtXHUwMDNlbnAuZGV2X25hbWUsIDAsIElGTkFNU0laKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbCA9IFx1MDAyNm50LVx1MDAzZXNrYl9wb29sO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHdoaWxlIChSRUFEX09OQ0Uoc2tiX3Bvb2wtXHUwMDNlcWxlbikgXHUwMDNjIE1BWF9TS0JTKSB7XG4rXHRcdHNrYiA9IGFsbG9jX3NrYihNQVhfU0tCX1NJWkUsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRicmVhaztcbitcbitcdFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9XG4rXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIHJlZmlsbF93cSk7XG4rXG4rXHRyZWZpbGxfc2ticyhudCk7XG4rfVxuK1xuKy8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZVxuKyAqIGhlYWQgYW5kIHJlZmlsbCB3b3JrIGFyZSBzZXQgdXAgb25jZSBpbiBhbGxvY19hbmRfaW5pdCgpOyB0aGlzIG9ubHlcbisgKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuXG4rICovXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmVmaWxsX3NrYnMobnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EpO1xuK1x0c2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcbit9XG4rXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG4gc3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXHUwMDNlbnAuZGV2XG4rXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuK1x0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcbitcdCAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuXG4rXHQgKi9cbitcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4rXG4gXHRpZiAobmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCkpIHtcbiBcdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTM1OCw2ICs0MjUsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlbnAuZGV2IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0fVxuQEAgLTM5MywxMSArNDYxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXG4gXG4gXHRudC1cdTAwM2VucC5uYW1lID0gXCJuZXRjb25zb2xlXCI7XG4gXHRzdHJzY3B5KG50LVx1MDAzZW5wLmRldl9uYW1lLCBcImV0aDBcIiwgSUZOQU1TSVopO1xuLVx0bnQtXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XG4tXHRudC1cdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlbnAucmVtb3RlX21hYyk7XG4rXHRudC1cdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcbitcdG50LVx1MDAzZXJlbW90ZV9wb3J0ID0gNjY2NjtcbitcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xuK1x0LyogU2V0IHVwIHRoZSBza2IgcG9vbCBwcmltaXRpdmVzIG9uY2U7IGVuYWJsaW5nIG9ubHkgcmVmaWxscyBpdC4gKi9cbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2wpO1xuK1x0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbiBcbiBcdHJldHVybiBudDtcbiB9XG5AQCAtNDE3LDYgKzQ4OCw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnQsIHRtcCwgXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdCwgbGlzdCkge1xuIFx0XHQvKiBhbGwgZW50cmllcyBpbiB0aGUgY2xlYW51cF9saXN0IG5lZWRzIHRvIGJlIGRpc2FibGVkICovXG4gXHRcdFdBUk5fT05fT05DRShudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKTtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXG4gXHRcdCAqIGxvY2tzXG5AQCAtNDI5LDIxICs1MDEsMjMgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4tXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnAtXHUwMDNlbG9jYWxfcG9ydCk7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbitcbitcdG5wX2luZm8obnAsIFwibG9jYWwgcG9ydCAlZFxcblwiLCBudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4tXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG5wLVx1MDAzZXJlbW90ZV9wb3J0KTtcbitcdG5wX2luZm8obnAsIFwicmVtb3RlIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnAtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbi1cdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG5wLVx1MDAzZXJlbW90ZV9tYWMpO1xuK1x0bnBfaW5mbyhucCwgXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cIiwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gfVxuIFxuIC8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCB1bmlvbi4gUmV0dXJuIDAgaWYgSVB2NCBpc1xuQEAgLTU2MSwxMiArNjM1LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlZFxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAubG9jYWxfcG9ydCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWRcXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZWxvY2FsX3BvcnQpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlZFxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtNTk5LDcgKzY3Myw3IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4tXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBNXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5yZW1vdGVfbWFjKTtcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcE1cXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC03NTYsMTEgKzgzMCwyMSBAQCBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxuIFx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuIFx0XHQgKi9cbi1cdFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIoXHUwMDI2bnQtXHUwMDNlbnApO1xuK1x0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7XG4rXG4rXHRcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcbitcdFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXG4rXHRcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcbitcdFx0ICogb3RoZXJ3aXNlIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWRcbitcdFx0ICogc3RhdGUuXG4rXHRcdCAqL1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xuIFxuIFx0XHRyZXQgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuIFxuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XG4gXHRcdHByX2luZm8oXCJuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcblwiKTtcbkBAIC04ODUsNyArOTY5LDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZW5wLmxvY2FsX3BvcnQpO1xuK1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0cmV0ID0gY291bnQ7XG5AQCAtOTA3LDcgKzk5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcbitcdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRyZXQgPSBjb3VudDtcbkBAIC05OTQsNyArMTA3OCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdGlmIChidWZbTUFDX0FERFJfU1RSX0xFTl0gXHUwMDI2XHUwMDI2IGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAhPSAnXFxuJylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bWVtY3B5KG50LVx1MDAzZW5wLnJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcbitcdG1lbWNweShudC1cdTAwM2VyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTE0ODEsMTUgKzE1NjUsMTUgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdC8qIEEgU1RBVEVfREVBQ1RJVkFURUQgdGFyZ2V0IG1heSBoYXZlIGJlZW4gbW92ZWQgdG9cbi1cdCAqIHRhcmdldF9jbGVhbnVwX2xpc3QgYnkgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoKSBidXQgbm90IHlldFxuLVx0ICogcHJvY2Vzc2VkIGJ5IG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKCkuIFVubGlua2luZyBpdCBiZWxvd1xuLVx0ICogaGlkZXMgaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBoYXMgdG8gY2xlYW4gaXQgdXBcbi1cdCAqIGl0c2VsZi4gUmVjb3JkIHRoYXQgdGhlIHRhcmdldCBzdGlsbCBvd25zIGEgbmV0cG9sbCBiZWZvcmUgdGhlXG4tXHQgKiBzdGF0ZSBpcyBkb3duZ3JhZGVkLlxuK1x0LyogQSB0YXJnZXQgbW92ZWQgdG8gdGFyZ2V0X2NsZWFudXBfbGlzdCBieSBuZXRjb25zb2xlX25ldGRldl9ldmVudCgpXG4rXHQgKiBidXQgbm90IHlldCBwcm9jZXNzZWQgc3RpbGwgb3ducyBhIG5ldHBvbGw7IHVubGlua2luZyBpdCBiZWxvdyBoaWRlc1xuK1x0ICogaXQgZnJvbSB0aGUgY2xlYW51cCB3b3JrZXIsIHNvIHRoaXMgcGF0aCBtdXN0IHRlYXIgaXQgZG93biBpdHNlbGYuXG4rXHQgKiBUaGlzIGNvdmVycyBORVRERVZfVU5SRUdJU1RFUiAoU1RBVEVfREVBQ1RJVkFURUQpIGFuZFxuK1x0ICogTkVUREVWX1JFTEVBU0UgLyBORVRERVZfSk9JTiAoU1RBVEVfRElTQUJMRUQpOyBrZXkgb2ZmIG50LVx1MDAzZW5wLmRldixcbitcdCAqIHdoaWNoIHN0YXlzIHNldCB1bnRpbCB0aGUgbmV0cG9sbCBpcyBjbGVhbmVkIHVwLlxuIFx0ICovXG4gXHRuZWVkc19jbGVhbnVwID0gbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCB8fFxuLVx0XHRcdG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEO1xuK1x0XHRcdG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFQUNUSVZBVEVEIHx8IG50LVx1MDAzZW5wLmRldjtcbiBcdC8qIERpc2FibGUgZGVhY3RpdmF0ZWQgdGFyZ2V0IHRvIHByZXZlbnQgcmFjZXMgYmV0d2VlbiByZXN1bWUgYXR0ZW1wdFxuIFx0ICogYW5kIHRhcmdldCByZW1vdmFsLlxuIFx0ICovXG5AQCAtMTUxNCw4ICsxNTk4LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4gXHQgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLVx1MDAzZWRldiBpcyBOVUxMKSwgc29cbiBcdCAqIGl0IGlzIHNhZmUgZXZlbiBpZiB0aGUgY2xlYW51cCB3b3JrZXIgYWxyZWFkeSB0b3JlIHRoZSBuZXRwb2xsIGRvd24uXG4gXHQgKi9cbi1cdGlmIChuZWVkc19jbGVhbnVwKVxuK1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4rXHR9XG4gXG4gXHRjb25maWdfaXRlbV9wdXQoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSk7XG4gfVxuQEAgLTE3MDYsNyArMTc5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MTgsMTkgKzE4MDQsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxuIFx0XHRpZiAoIWluX25taSgpKVxuIFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwibmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwiLFxuIFx0XHRcdFx0XHQgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsXG4tXHRcdFx0XHRcdCAgICAgbnAtXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuK1x0XHRcdFx0XHQgICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4rXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxKTtcbiBcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXG4rXHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCBjb3VudCA9IDA7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MzksNyArMTgyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbiBcbiBcdHNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChucCwgbGVuKTtcbitcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCsrY291bnQgXHUwMDNjIDEwKSB7XG5AQCAtMTc3OSw4ICsxODY3LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbitzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0c3RydWN0IHVkcGhkciAqdWRwaDtcbiBcdGludCB1ZHBfbGVuO1xuIFxuQEAgLTE3OTAsMjEgKzE4NzksMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuK1x0dWRwaC1cdTAwM2Vzb3VyY2UgPSBodG9ucyhudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbitcdHVkcGgtXHUwMDNlZGVzdCA9IGh0b25zKG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdHVkcGgtXHUwMDNlbGVuID0gaHRvbnModWRwX2xlbik7XG4gXG4gXHRuZXRwb2xsX3VkcF9jaGVja3N1bShucCwgc2tiLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aDtcbiBcbiBcdGV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIG5wLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4tXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4rXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbkBAIC0xODYxLDggKzE5NTEsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4rc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbitcdFx0XHQgICAgaW50IGxlbilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICsxOTY5LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFxuIFx0dG90YWxfbGVuID0gaXBfbGVuICsgTExfUkVTRVJWRURfU1BBQ0UobnAtXHUwMDNlZGV2KTtcbiBcbi1cdHNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gKyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuK1x0c2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiArIG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG4gXHRcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xuIFx0aWYgKCFza2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE4ODUsMTIgKzE5NzcsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4rXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdHB1c2hfaXB2NihucCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnAsIHNrYiwgbGVuKTtcbi1cdHB1c2hfZXRoKG5wLCBza2IpO1xuK1x0cHVzaF9ldGgobnQsIHNrYik7XG4gXHRza2ItXHUwMDNlZGV2ID0gbnAtXHUwMDNlZGV2O1xuIFxuIFx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbkBAIC0xOTA4LDcgKzIwMDAsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4rXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcbiBcdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG5AQCAtMjIwMyw4ICsyMjk1LDkgQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbitzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbkBAIC0yMjE1LDcgKzIzMDgsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnAtXHUwMDNlbG9jYWxfcG9ydCkpXG4rXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyArMjM1NSw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0KmRlbGltID0gMDtcbiBcdFx0aWYgKCpjdXIgPT0gJyAnIHx8ICpjdXIgPT0gJ1xcdCcpXG4gXHRcdFx0bnBfaW5mbyhucCwgXCJ3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuLVx0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm5wLVx1MDAzZXJlbW90ZV9wb3J0KSlcbitcdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyODQsMTEgKzIzNzcsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4rXHRcdGlmICghbWFjX3B0b24oY3VyLCBudC1cdTAwM2VyZW1vdGVfbWFjKSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdH1cbiBcbi1cdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTtcbitcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTIzMjYsMTQgKzI0MTksMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbitcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBmYWlsO1xuIFxuK1x0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xuK1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuK1x0ICogeWV0IG9uIHRhcmdldF9saXN0LCBzbyBhIG5ldGRldiBldmVudCBjYW5ub3QgcmVhY2ggaXQgaGVyZSwgYnV0XG4rXHQgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LlxuK1x0ICovXG4rXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xuK1xuIFx0ZXJyID0gbmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwiLFxuIFx0XHQgICAgICAgTkVUQ09OU09MRV9QQVJBTV9UQVJHRVRfUFJFRklYLCBjbWRsaW5lX2NvdW50KTtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcbiBcdFx0XHQvKiBvbmx5IGZhaWwgaWYgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gaXMgc2V0LFxuIFx0XHRcdCAqIG90aGVyd2lzZSwga2VlcCB0aGUgdGFyZ2V0IGluIHRoZSBsaXN0LCBidXQgZGlzYWJsZWQuXG5AQCAtMjM1NSw2ICsyNDU2LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4rXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRClcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDg4ZjdkYWE4NTYwZTU4Li43OTMxNTQ2MWE3YjFlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTIxLDIwICsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwncyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW5cbi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7XG4tICogY2FsbGVycyAoZS5nLiBuZXRjb25zb2xlKSB1c2UgaXQgdG8gZGV0ZWN0IHJlcXVlc3RzIHRoZSBwb29sIGNhbiBuZXZlclxuLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwXG4tICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuXG4tICovXG4tI2RlZmluZSBNQVhfVURQX0NIVU5LXHQxNDYwXG4tI2RlZmluZSBNQVhfU0tCX1NJWkVcdFx0XHRcdFx0XHRcXFxuLVx0KHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArXHRcdFx0XHRcXFxuLVx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1x0XHRcdFx0XFxcbi1cdCBNQVhfVURQX0NIVU5LKVxuLVxuIHN0cnVjdCBuZXRwb2xsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbkBAIC00OSwxMCArMzUsNiBAQCBzdHJ1Y3QgbmV0cG9sbCB7XG4gXG4gXHR1bmlvbiBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDtcbiBcdGJvb2wgaXB2Njtcbi1cdHUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbi1cdHU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuLVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcG9vbDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7XG4gfTtcbiBcbiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcbmluZGV4IGFlZDQxNWQzY2Q3NGZmLi5mOGRhMTA0OGVhM2FiMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldHBvbGwuY1xuKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5AQCAtMzYsMTIgKzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiArMjA3LDYgQEAgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHVwKFx1MDAyNm5pLVx1MDAzZWRldl9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLVx1MDAzZXFsZW4pIFx1MDAzYyBNQVhfU0tCUykge1xuLVx0XHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbi1cdFx0aWYgKCFza2IpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xuLVx0fVxuLX1cbi1cbiB2b2lkIG5ldHBvbGxfemFwX2NvbXBsZXRpb25fcXVldWUodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTM1MSwzMiArMzI5LDEyIEBAIG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xuIFxuLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxKTtcbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXHRza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBuZXRwb2xsICpucCA9XG4tXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTtcbi1cbi1cdHJlZmlsbF9za2JzKG5wKTtcbi19XG4tXG4gaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzO1xuIFx0aW50IGVycjtcbiBcbi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2wpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbi1cbiBcdGlmIChuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9ESVNBQkxFX05FVFBPTEwpIHtcbiBcdFx0bnBfZXJyKG5wLCBcIiVzIGRvZXNuJ3Qgc3VwcG9ydCBwb2xsaW5nLCBhYm9ydGluZ1xcblwiLFxuIFx0XHQgICAgICAgbmRldi1cdTAwM2VuYW1lKTtcbkBAIC00MTEsOSArMzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgKzU1OCw3IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcbiBcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgbmRldik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGZsdXNoO1xuK1x0XHRnb3RvIHB1dDtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYWxsIE5BUEkgcG9sbHMgd2hpY2ggc3RhcnRlZCBiZWZvcmUgZGV2LVx1MDAzZW5waW5mb1xuQEAgLTYxNCw4ICs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjU5LDggKzYxMiw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yayk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNm5waW5mby1cdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XG4gXHR9XG4tXG4tXHRza2JfcG9vbF9mbHVzaChucCk7XG4gfVxuIFxuIHZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MDcuMTY4MDE3MTc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyMjAxMDIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBOZXRjb25zb2xlOiBBc3Nlc3NpbmcgUmVhY2hhYmlsaXR5IGFuZCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyB0byBiZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB3aXRoaW4gdGhlIG5ldHdvcmsgY29uc29sZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYCwgYW5kIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBmYWxsYmFjayBTS0IgcG9vbCBhbmQgc29tZSB0YXJnZXQtc3BlY2lmaWMgcGFyYW1ldGVycywgbGlrZSBwb3J0cyBhbmQgTUFDIGFkZHJlc3NlcywgZnJvbSB0aGUgYG5ldHBvbGxgIHN0cnVjdHVyZSB0byB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3R1cmUuIFRoZSBhc3NvY2lhdGVkIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgaXMgYmVpbmcgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgb3JnYW5pemF0aW9uYWwgc2hpZnQuIEJhc2ljYWxseSwgdGhleSdyZSBjbGVhbmluZyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYWtpbmcgdGhlIGNvZGUgYSBiaXQgY2xlYW5lciBhbmQgbW9yZSBvcmdhbml6ZWQuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGNvbmZpcm1pbmcgdGhlIGNvZGUgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBOZXRjb25zb2xlIGlzIHByZXR0eSBpbXBvcnRhbnQ7IGl04oCZcyBhIGtleSBwaWVjZSBmb3IgbG9nZ2luZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yay4gSXQgYXBwZWFycyB3ZSBjYW4gcmVhY2ggaXQgdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4gV2hpY2ggc3VnZ2VzdHMgaXQgY2FuIGJlIHJlYWRpbHkgZW5hYmxlZCBpbiBtYW55IHN5c3RlbXMuIEdpdmVuIHRoYXQgaXQncyBmdW5jdGlvbmFsIGNvZGUsIGZ1enppbmcgc2VlbXMgbGlrZSBhIHZhbGlkIG5leHQgc3RlcC5cblxuVG8gcHJvY2VlZCwgSSBuZWVkIHRvIGdldCB0aGUgY29uZmlnIG9wdGlvbnMgcmlnaHQuIGBDT05GSUdfTkVUQ09OU09MRWAgYW5kIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBzZWVtIHRvIGJlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFyb3VuZCBgTkVUQ09OU09MRWAsIGJ1dCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MTIuNjkwMDI5Njc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzQ0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRDT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDoxMi43NzAzNzkyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTk3ODg3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmV0Y29uc29sZWAgTG9nZ2luZyBNZWNoYW5pc20gZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9ucywgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZCBpbiBgbmV0Y29uc29sZS5jYC4gTGV0J3Mgc2VlLi4uIGEgd2hvbGUgYnVuY2ggb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYHJlZmlsbF9za2JzYCwgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGFuZCB0aGUgYHJlc3VtZV90YXJnZXRgIGZhbWlseS4uLnBsdXMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGFsbG9jYXRpb24sIHByaW50aW5nLCBhbmQgZGV2aWNlIG5hbWUgZnVuY3Rpb25zLiBUaGVyZSBhcmUgYWxzbyBzeXNmcyBmaWxlcy5cblxuUmlnaHQsIGBuZXRjb25zb2xlYC4gSXQgaW50ZXJjZXB0cyBgcHJpbnRrYCBtZXNzYWdlcyBhbmQgc2hpcHMgdGhlbSBvdmVyIFVEUC4gQWhhLCB0aGUga2V5IGlzIHRoZSB1c2VyIHNwYWNlIGludGVyYWN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMsIHNwZWNpZmljYWxseSB1bmRlciBgL3N5cy9rZXJuZWwvY29uZmlnL25ldGNvbnNvbGUvYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBvcHBvcnR1bml0aWVzLlxuXG5UaGUgbGlnaHRidWxiIGp1c3Qgd2VudCBvZmYgLSBmdXp6aW5nIGBjb25maWdmc2AgZm9yIG5ldGNvbnNvbGUgaXMgYWJzb2x1dGVseSBhIHZpYWJsZSB0YXJnZXQuIEFuZCB0aGUgYmVzdCBwYXJ0PyBTeXprYWxsZXIgc3VwcG9ydHMgY29uZmlnZnMuIEknbSB0aGlua2luZyBhYm91dCBhdHRhY2sgc3VyZmFjZSBhbmQgYXR0YWNrIHZlY3RvcnMgLSB0aGlzIGNvdWxkIGJlIGEgZ29vZCBvbmUuXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55IHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgYG5ldGNvbnNvbGVgIGluIGBjb25maWdmc2A/IEl0IG1pZ2h0IG5vdCAqZGlyZWN0bHkqLCBidXQgZXZlbiB3aXRob3V0IHNwZWNpZmljIGRlc2NyaXB0aW9ucywgU3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQgYXMgbG9uZyBhcyB0aGUgY29uZmlnZnMgbW91bnQgZXhpc3RzLiBTeXprYWxsZXIgaGFzIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNpbWlsYXIsIGJ1dCBjb25maWdmcyBpcyB1c3VhbGx5IGFscmVhZHkgbW91bnRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDoyMC4wMzAxNzAwODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3Nzg5MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuYy02LSAqXFxubmV0L2NvcmUvbmV0cG9sbC5jOjc6ICogYmFzZWQgb24gdGhlIG5ldGNvbnNvbGUgY29kZSBmcm9tOlxcbm5ldC9jb3JlL25ldHBvbGwuYy04LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjIwLjE0Nzk2Nzk2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTIzNzc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIE5ldGNvbnNvbGUgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCwgSSBkb24ndCBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBzaWZ0aW5nIHRocm91Z2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByaWdodCBub3cuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZWZpbmUgdGhlIGNydWNpYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gSSd2ZSBhbHJlYWR5IGdvdCBhIGdvb2QgaW5pdGlhbCBsaXN0IG9mIHRob3NlIHN5bWJvbHMgaW4gbWluZCwgbGlrZSBgYWxsb2NfYW5kX2luaXRgLCBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgLCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgLlxuXG5SaWdodCwgbGV0J3MgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS4gQ2FuIHVzZXIgc3BhY2UgZXZlbiAqcmVhY2gqIHRoZSBuZXRjb25zb2xlIGZ1bmN0aW9uYWxpdHk/IEFoLCB5ZXMsIHRocm91Z2ggY29uZmlnZnMuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gZmluZGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgZ29vZCB0YXJnZXRzLiBMZXQncyBzdGFydCB3aXRoIGEgc3Vic2V0IG9mIHRoZSBmaXJzdCBsaXN0LCBiYXNlZCBvbiB0aGVpciBwb3RlbnRpYWwgZm9yIGNvbnRyb2wgYW5kIGRhdGEgbWFuaXB1bGF0aW9uOiBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLlxuXG5UbyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG5ldGNvbnNvbGUuY2AgaXRzZWxmLiBXZSBtaWdodCB1bmNvdmVyIHNvbWUgYWRkaXRpb25hbCByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjI2LjgwMDM0ODg5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1NDk2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIGVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03NjE9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc4MC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzgxOnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03ODItXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjI2LjkwMjkwNTQ0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njg3NjY5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRjb25zb2xlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBgbmV0Y29uc29sZWAsIGFuZCB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgd2hpY2ggbWVhbnMgSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciBgbmV0Y29uc29sZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgY29tcG9uZW50IGhhbmRsZXMgaXRzIFNLQiBwb29sLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHByZS1hbGxvY2F0aW9uIGhlcmUsIHByb2JhYmx5IGR1ZSB0byB0aGUgcGVyZm9ybWFuY2UgY3JpdGljYWwgbmF0dXJlIG9mIGxvZ2dpbmcgb3ZlciB0aGUgbmV0d29yay4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGEgc3RhbmRhcmQgU0xBQiBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBjdXN0b20uIFdoYXQncyB0aGUgcG9vbCBzaXplPyBBbnkgY2xldmVyIHRyaWNrcyB0byBhdm9pZCBmcmFnbWVudGF0aW9uIHVuZGVyIGxvYWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgcG90ZW50aWFsIGNvbnRlbnRpb24gb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIGNhbiBpZGVudGlmeSBxdWlja2x5LCBwYXJ0aWN1bGFybHkgd2l0aCBtdWx0aS1jb3JlIHN5c3RlbXMgYW5kIHRoZSBjb25jdXJyZW50IG5hdHVyZSBvZiBuZXR3b3JrIHRyYWZmaWM/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24sIHRoZSBiYWNrYm9uZS4gQSBzb2xpZCBpbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsIGZvciByZWxpYWJsZSBvcGVyYXRpb24gZG93biB0aGUgbGluZSwgYW5kIGFueSBpbmVmZmljaWVuY2llcyBoZXJlIHdpbGwgbWFuaWZlc3QgYXMgaGVhZGFjaGVzIGxhdGVyLiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiByaW5nIGJ1ZmZlciBvciBjaXJjdWxhciBxdWV1ZSBhdCB0aGUgaGVhcnQgb2YgdGhlIHBvb2wgaW1wbGVtZW50YXRpb24sIG9mIGNvdXJzZSwgYnV0IEknbSBsb29raW5nIGZvciB0aGUgZGV0YWlscy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIGZ1bmRhbWVudGFsIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjk5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6MzEuNjcxNjc1MjI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzI1ODEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogbmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzMxPXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQyLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjMxLjc2ODk0MDE4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTk1MzE4NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHRoZSBwcm92aWRlZCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZTogVGhlIFNlYXJjaCBmb3IgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgKipcblxuT2theSwgc28gdGhlIHByb21wdCBkaXJlY3RzIG1lIHRvIHN1bW1hcml6ZSBteSBcInRob3VnaHRzLlwiIENsZWFybHksIEkgbmVlZCB0byBpbnRlcnByZXQgdGhpcyBhcyBhIGNhbGwgdG8gYWN0aW9uIHdpdGhpbiBteSBpbnRlcm5hbCByZWFzb25pbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgY29kZSBmaWxlIG1lbnRpb25lZDogYG5ldGNvbnNvbGUuY2AuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBzdWdnZXN0aW9uOyBpdCdzIGEgZGlyZWN0IHBvaW50ZXIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogSSdtIGJlaW5nIGRpcmVjdGVkIGhlcmUuIFRoZSBmdW5jdGlvbiBuYW1lLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGlzIHRoZSBrZXkuIFRoZSB0ZXJtIFwiU0tCXCIgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBTb2NrZXQgQnVmZmVycywgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyB1c2VkIGluIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBcIlBvb2wgZmx1c2hcIiBzdWdnZXN0cyBzb21lIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgY2xlYW51cCBvcGVyYXRpb24gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlc2UgU0tCcyB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgY29udGV4dC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIG9yIHJlY3ljbGluZyBuZXR3b3JrIGJ1ZmZlcnMgdXNlZCBieSB0aGUgbmV0Y29uc29sZS4gSSB3b3VsZCBiZWdpbiB0aGUgc2VhcmNoIGluIGBuZXRjb25zb2xlLmNgIGtub3dpbmcgdGhhdCB0aGlzIGlzIGFuIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYSBjbGVhbnVwIG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXRjb25zb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEzNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjM5LjM2NDI2MTM3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY4MjUwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zNDM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDg6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDozOS40NTEwOTExNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE4NzkzODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRjb25zb2xlLmNgKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBuZXR3b3JrIGNvbnNvbGVzLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4gQSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgYXJlYSBvZiBpbnRlcmVzdCBpcyBgbmV0Y29uc19za2JfcG9wYC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBzb21ldGhpbmcgcmVsYXRlZCB0byAqcmVtb3ZpbmcqIG9yICpwcm9jZXNzaW5nKiBkYXRhIGZyb20gYSBzb2NrZXQgYnVmZmVyIChgc2tiYCkuIEknbSBiZXR0aW5nIHRoYXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgaXNzdWUsIGlmIHdlJ3JlIGRlYnVnZ2luZykgaGFwcGVucyByZWdhcmRpbmcgcmVjZWl2aW5nIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgbmV0d29yayBjb25zb2xlIGRhdGEuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjQzLjQ2OTg4NzQ1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3MjE5NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKiBuZXRjb25zX3NrYl9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDo0My41NTk2MjAwNTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczOTg5MzQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gZGVjbGFyYXRpb246IGBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcGAuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIFwiV2FpdCwgaXMgKnRoYXQqIHRoZSBzaWduYXR1cmUgd2UncmUgZGVhbGluZyB3aXRoP1wiIEl0J3MganVtcGluZyBvdXQgYXQgbWUgYmVjYXVzZSB0aGUgdHlwZSBpcyBhIGJpdCB1bnVzdWFsLlxuXG5TcGVjaWZpY2FsbHksIGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBzY29wZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCBleHRlcm5hbCBsaW5rYWdlLCBzbyBpdCBsaWtlbHkgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9ucy4gVGhlbiwgdGhlIHJldHVybiB0eXBlIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IHNrX2J1ZmZgLiBUaGUgYHNrX2J1ZmZgIGlzIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggbmV0d29yayBwYWNrZXQgYnVmZmVycy4gVGhlIG5hbWUgYG5ldGNvbnNfc2tiX3BvcGAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYWJvdXQgcG9wcGluZyBhIGJ1ZmZlciBvZmYgb2Ygc29tZXRoaW5nLCBwcm9iYWJseSBhIG5ldHdvcmsgY29uc29sZSBvciBzb21lIGZvcm0gb2YgbmV0d29yayBjb25uZWN0aW9uIHN0cnVjdHVyZSwgYW5kIHJldHVybmluZyBpdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIHdoZXJlIGFuZCBob3cgdGhpcyBgbmV0Y29uc2AgY29udGV4dCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlIGBza19idWZmYCBpcyBiZWluZyB1c2VkIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdGhpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDo0Ny4yOTk1MTU1NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDA1MjY0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzc5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc5NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc5NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODE4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODI5LVxcdGlmICghc2tiKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODMwOlxcdFxcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChudCwgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6NDcuNDQ5NTcyNzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgxMTc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgTmV0d29ya2luZyBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBjb25zb2xlIGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGEgc3BlY2lmaWMgU2VhcmNoIEtlcm5lbCBCdWZmZXIgKFNLQikgaXMgaGFuZGxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZXRjb25zb2xlLmNgLiBJdCdzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGZvciBmaW5kaW5nIGEgc3BlY2lmaWMgU0tCIHdpdGhpbiB0aGF0IG1vZHVsZSB3aWxsIGJlIGluIHRoZSBgZmluZF9za2JgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGxvY2F0ZXMgYW5kIG1hbmFnZXMgdGhlc2UgU0tCcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldHdvcmsgY29uc29sZSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6NTAuOTM3NjkyNjc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU1NTEzMDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKiBmaW5kX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA0OjUxLjEzMzI1MDUwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk2NDEzNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlZmluaXRpb24qKlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHRoYXQgSSdtIGxvb2tpbmcgYXQgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgb3IgYSBzaW1pbGFyIG5ldHdvcmstb3JpZW50ZWQgZW52aXJvbm1lbnQuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIGBzdGF0aWNgLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF04oCZcyBnb29kIGZvciBlbmNhcHN1bGF0aW9uIGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgY2xhc2hlcyB3aXRoIG90aGVyIGZ1bmN0aW9ucy4gVGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgaXMgYHN0cnVjdCBza19idWZmICpgLiBBaCwgc28gaXQncyByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGEgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gYHNrX2J1ZmZgIGlzIHRoZSBzdGFuZGFyZCBzb2NrZXQgYnVmZmVyIHN0cnVjdHVyZS4gQW5kIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBgZmluZF9za2JgLiBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgdGhpcyBpcyBsaWtlbHkgYSBmdW5jdGlvbiBkZXNpZ25lZCB0byBsb2NhdGUgYW4gYHNrX2J1ZmZgIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaWYgZm91bmQsIG9yIE5VTEwgKGltcGxpY2l0bHkpIGlmIG5vdC4gSXQncyBwcm9iYWJseSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgY29uc2lkZXJpbmcgaXTigJlzIHN0YXRpYy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQgdGFrZXMgYW5kIHdoYXQgaXQncyBzZWFyY2hpbmcgZm9yIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDQ6NTQuNTI5NjY2NDA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDMxNjU3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01Mz1NT0RVTEVfSU1QT1JUX05TKFxcXCJORVRERVZfSU5URVJOQUxcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NC0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NTogKiBTaXppbmcgZm9yIHRoZSBwZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY2LSAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQ1PWVudW0gdGFyZ2V0X3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUtICogQHJlc3VtZV93cTpcXHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODY6ICogQHNrYl9wb29sOlxcdFBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkgd2hlblxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODctICpcXHRcXHRpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzLiBMaWZldGltZSBicmFja2V0cyBhXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5LSAqIEByZWZpbGxfd3E6XFx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTA6ICpcXHRcXHRNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkxLSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTMzMT1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzM5Oi8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNDAtICogaGVhZCBhbmQgcmVmaWxsIHdvcmsgYXJlIHNldCB1cCBvbmNlIGluIGFsbG9jX2FuZF9pbml0KCk7IHRoaXMgb25seVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3OTU9c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODE4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxOS1cXHRcXHRcXHRcXHRpbnQgcmVzZXJ2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTU0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3MjpcXHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICsgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTczLVxcdFxcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNDo1NC44MzI4Mzg0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzA3MDkxNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBOZXRjb25zb2xlIFBhcmFtZXRlciBhbmQgTGlmZWN5Y2xlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBuZXRjb25zb2xlL25ldHBvbGwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGUgc2hpZnQgaW4gbGlmZWN5Y2xlIGFuZCBwYXJhbWV0ZXIgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgbW92ZW1lbnQgb2YgYHNrYl9wb29sYCwgYHJlZmlsbF93cWAsIGBsb2NhbF9wb3J0YCwgYHJlbW90ZV9wb3J0YCwgYW5kIGByZW1vdGVfbWFjYCBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IHBhcmFtZXRlcnMgYXJlIGhhbmRsZWQuXG5cblRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAgYW5kIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYCwgd2hpY2ggYXJlIG5ldyBsaWZlY3ljbGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIHRoaXMgU0tCIHBvb2wuIFRoZSB3YXkgdGhlc2UgYXJlIHVzZWQsIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMsIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGNsb3NlIHNjcnV0aW55IGR1cmluZyBmdXp6aW5nLlxuXG5GdXJ0aGVybW9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLCBgcHVzaF91ZHBgLCBgcHVzaF9ldGhgLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50YCBpbnN0ZWFkIG9mIGBzdHJ1Y3QgbmV0cG9sbCAqbnBgIHVuZGVyc2NvcmUgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCdzIGEgY29tcGxldGUgc2hpZnQgaW4gaG93IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGNvbnNvbGUuXG5cblRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZyBhcmUsIHdpdGhvdXQgYSBkb3VidDpcbiogICBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgOiBUaGVzZSBhcmUgbmV3LCBhbmQgbWFuYWdlIHBvb2wgbGlmZWN5Y2xlLlxuKiAgIGByZWZpbGxfc2tic2AgYW5kIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgOiBMaWtlbHkgcmVsYXRlZCB0byBwb29sIHJlZmlsbCBhbmQgYXNzb2NpYXRlZCB3b3JrIHF1ZXVlLlxuKiAgIGBuZXRjb25zX3NrYl9wb3BgIGFuZCBgZmluZF9za2JgOiBGb3IgZ2V0dGluZyBTS0JzIGZyb20gdGhlIHBvb2wuXG4qICAgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWA6IENvcmUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBjaGFuZ2VkLlxuKiAgIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBhbmQgYHJlbW90ZV9tYWNfc3RvcmVgOiBUaGVzZSBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGUgbmV3IGR5bmFtaWMgY29uZmlndXJhdGlvbiBjYXBhYmlsaXRpZXMgYW5kIG5lZWQgcGFydGljdWxhcmx5IGNhcmVmdWwgZXZhbHVhdGlvbi5cbiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YDogRm9yIG1lbW9yeSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgdGFyZ2V0LlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gYE5FVENPTlNPTEVgIGVuYWJsZXMgdGhlIGJhc2UgbW9kdWxlLCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgZW5hYmxlcyB0aGUgZHluYW1pYyBjb25maWdmcyBmZWF0dXJlc+KAlHdoaWNoIGFyZSBjcnVjaWFsIGZvciBmdXp6aW5nIGFsbCB0aG9zZSBzdG9yZSBmdW5jdGlvbnMuIEknbGwgbmVlZCBib3RoIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgdG8gcHJvcGVybHkgY292ZXIgdGhlIHN1cmZhY2Ugb2YgdGhpcyBwYXRjaC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGVycm9ycyBpbiB0aGVzZSBraW5kcyBvZiBsaWZlY3ljbGUgYW5kIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhpcyBsb29rcyBsaWtlIGEgc3Ryb25nIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNTowMi41Mzk5MzE0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDA2NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTI9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkzLVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTQ6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTUtXFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdGdyb3VwO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyOiNpZmRlZlxcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIzLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MT1zdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjY6I2Vsc2VcXHQvKiAhQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjctXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjk4PXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwMjojZW5kaWZcXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01MjY9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQ5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NTA6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTEtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY3NT1zdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTctfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjk4OiNlbmRpZlxcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTU0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5OC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDAwLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMDAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDA0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDA1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDYtXFx0XFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAxOD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAyNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAyNzojaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LVxcdHVzZXJkYXRhID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwNjM9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDc1OiNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNzYtXFx0dXNlcmRhdGFfcHRyID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC1cXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTQ9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzNy1cXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzODpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzktXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU2PXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2MS1cXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NjI6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYzLVxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ4Nj1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk5LVxcdFxcdFxcdGlmIChJU19FUlIobnQpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDA6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDEtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA1OjAyLjc0MTM0NTk3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxMDY3NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVGhvdWdodCBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQsIHRoZSBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2Agb3B0aW9uIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGlmIEknbSBnb2luZyB0byBiZSB1c2luZyB0aGUgY29uZmlnZnMgaW50ZXJmYWNlIGFuZCBkeW5hbWljIHJlY29uZmlndXJhdGlvbi4gVGhhdCdzIGNsZWFyLiBUaGVyZWZvcmUsIG15IGJhc2UgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgc2V0dXAgbXVzdCBpbmNsdWRlIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIFxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcuIEFoLCB5ZXMsIEkgc2VlIHRoYXQgYENPTkZJR19ORVRQT0xMYCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IHdoZW4gSSBlbmFibGUgYE5FVENPTlNPTEVgLiBHb29kIHRvIGtub3c7IEknbGwgdGFrZSB0aGF0IGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4ODAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNTowNi4yMDI0MTYxMjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NzA1ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRDT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNTowNi4yOTIxMjgyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM4NTEzOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBORVRDT05TT0xFIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORVRDT05TT0xFYC4gSSBrbm93IGl0J3MgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZSwgc28gdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHRoYXQgaGFuZGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBuZXR3b3JrIGRyaXZlciBvcHRpb25zIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYE5FVENPTlNPTEVgIGNhbiBiZSBzZWxlY3RlZCBhbmQgYnVpbHQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgYnVpbGRpbmcgYmxvY2tzIGFyZSBpbiBwbGFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA5OjA1OjEwLjAzMDY0NTk5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjc6XFx0Y29uZmlnIE5FVENPTlNPTEVcXG4gMzI4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG4gMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNToxMC4wMzA3NjY3MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMTU1MDM1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGNvbnNvbGUgQ2hhbmdlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGNvbmZpZ3VyYXRpb24gc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5GaXJzdCwgSSBjb21waWxlZCBhIGxpc3Qgb2Ygc3ltYm9scyBJIHRob3VnaHQgd2VyZSBjZW50cmFsIHRvIHRoaXMgY2hhbmdlOiBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgcmVmaWxsX3NrYnNgLCBgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyYCwgYG5ldGNvbnNfc2tiX3BvcGAsIGBmaW5kX3NrYmAsIGBuZXRwb2xsX3NlbmRfdWRwYCwgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBsb2NhbF9wb3J0X3N0b3JlYCwgYHJlbW90ZV9wb3J0X3N0b3JlYCwgYHJlbW90ZV9tYWNfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YC5cblxuVGhlbiBJIGRvdmUgZGVlcGVyLCBhbmQgcmVhbGl6ZWQgdGhhdCBhIGdvb2QgY2h1bmsgb2YgdGhlc2Ugd2VyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBuZXRjb25zb2xlLmNgLiBTbyBJIHN0YXJ0ZWQgY29uZmlybWluZyB0aGVtLCBzdGFydGluZyB3aXRoIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIHZlcmlmeWluZyBpdCB3YXMgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuXG5cblRoZW4gSSB3aWRlbmVkIHRoZSBzZWFyY2ggYW5kIGRpc2NvdmVyZWQgdGhhdCBhIGZldyBmdW5jdGlvbnMgKGByZWZpbGxfc2tic2AsIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgLCBgc2tiX3Bvb2xfZmx1c2hgKSB3ZXJlIHJlbW92ZWQgZnJvbSBgbmV0cG9sbC5jYCwgbWVhbmluZyB0aGUgY29yZSBuZXRwb2xsIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHJlZmFjdG9yZWQgb3IgbW92ZWQuIEFuZCBJIGZvdW5kIHRoYXQgYF9fbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NldHVwYCwgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAgd2VyZSBtb2RpZmllZCBpbiBgbmV0cG9sbC5jYC5cblxuU28gbm93LCBhIG1vcmUgcmVmaW5lZCBsaXN0IGluY2x1ZGVzIHRoZSBgbmV0cG9sbGAgZnVuY3Rpb25zOiBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgcmVmaWxsX3NrYnNgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAsIGBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGBfX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9zZXR1cGAsIGFuZCBgX19uZXRwb2xsX2NsZWFudXBgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLCBjb25maWdmcyBjYWxsYmFja3MsIG9yIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0L2V4aXQgdG8gYmUgc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoLiBTcGVjaWZpY2FsbHksIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX3BvcnRfc3RvcmVgLCBgcmVtb3RlX3BvcnRfc3RvcmVgLCBgcmVtb3RlX21hY19zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrcywgYXMgaXMgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgLiBUaGUgYGFsbG9jX3BhcmFtX3RhcmdldGAgaXMgY2FsbGVkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgYGZyZWVfcGFyYW1fdGFyZ2V0YCBpcyB1c2VkIGR1cmluZyBtb2R1bGUgZXhpdCBvciBpbiBlcnJvciBwYXRocy4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgbmV0cG9sbCBzZXR1cCBhbmQgY2xlYW51cCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDU6MjEuMDQ2MjcyNzc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY0NzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZXRwb2xsX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRwb2xsLmM9MzMyPWludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zODEtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgzLVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTUwMj1pbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtNTgwLX1cXG5uZXQvY29yZS9uZXRwb2xsLmM6NTgxOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZXR1cCk7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTU4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDU6MjEuMTMyOTI0NzcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTk3MzY4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGRlYnVnZ2luZyBvciBpbnZlc3RpZ2F0aW9uOlxuXG4qKkNoZWNraW5nIEV4cG9ydGVkIFN5bWJvbHM6IEEgUXVpY2sgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIHdhcyBhYm91dCB3aGV0aGVyIG9yIG5vdCBzb21ldGhpbmcgaXMgZXhwb3J0ZWQuIFRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUsIFwieWVzLCBpdCBpcyBleHBvcnRlZC5cIiBUaGF0J3MgZ29vZCB0byBrbm93LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgc3BlY2lmaWMgc3ltYm9sLCBgX19uZXRwb2xsX2NsZWFudXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgKml0KiBzcGVjaWZpY2FsbHkgaXMgZXhwb3J0ZWQsIHRvby4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrIGJlY2F1c2UgaWYgdGhpcyBmdW5jdGlvbiBpc24ndCB2aXNpYmxlLCBhIGtleSBwYXJ0IG9mIG15IHVuZGVyc3RhbmRpbmcgb3IgYSByZWxhdGVkIHByb2Nlc3Mgd2lsbCBiZSBmbGF3ZWQuIFRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgXCJpcyBpdCBleHBvcnRlZD9cIiBxdWVzdGlvbjsgSSdtIGhvbmluZyBpbiBvbiBhIHByZWNpc2UgcGllY2Ugb2YgaW5mb3JtYXRpb24gY3J1Y2lhbCB0byBteSBpbnZlc3RpZ2F0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBuZXRwb2xsIGFuZCBjbGVhbnVwIHJvdXRpbmVzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNToyNC42MzI2NjM2ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYxMDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZXRwb2xsX2NsZWFudXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuYz02Mjg9dm9pZCBkb19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTYzMy19XFxubmV0L2NvcmUvbmV0cG9sbC5jOjYzNDpFWFBPUlRfU1lNQk9MKGRvX25ldHBvbGxfY2xlYW51cCk7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTYzNS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9NjM2PXZvaWQgbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy02NDQtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzo2NDU6RVhQT1JUX1NZTUJPTChuZXRwb2xsX2NsZWFudXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwOTowNToyNC43MzYyNzkxMDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg2Mzk3MTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUvTmV0cG9sbCBSZWZhY3RvcioqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNvbmZ1c2lvbiBjbGVhcnMgdXAg4oCTIGBfX25ldHBvbGxfY2xlYW51cGAgaXNuJ3QgZXhwb3J0ZWQgYmVjYXVzZSwgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIGl0J3Mgc2NvcGVkIHdpdGhpbiBgbmV0cG9sbC5jYC4gR29vZC5cblxuUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXN0cnVjdHVyaW5nIGhvdyB0aGUgZmFsbGJhY2sgU0tCIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGFyZSBtYW5hZ2VkLCBtb3ZpbmcgdGhlbSBmcm9tIHRoZSBgbmV0cG9sbGAgc3RydWN0dXJlIHRvIGBuZXRjb25zb2xlX3RhcmdldGAuIFRoaXMgaW5oZXJlbnRseSBhbHRlcnMgdGhlIGxpZmVjeWNsZSBvZiB0aGF0IFNLQiBwb29sIGFuZCB0aG9zZSBwYXJhbWV0ZXJzLiBUaGV5J3ZlIGludHJvZHVjZWQgbmV3IGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6YXRpb24gYW5kIGZsdXNoaW5nIG9mIHRoZSBwb29sIOKAkyBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCBhbmQgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLiBUaGF0J3MgYSBrZXkgYXJlYSB0byB6ZXJvIGluIG9uLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgd2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLCBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGhlcmUuIFdlIG5lZWQgdG8gYmUgcmlnb3JvdXNseSB0ZXN0aW5nIHRoZSBuZXcgYmVoYXZpb3IuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gVGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgdGVzdGluZywgYmVzaWRlcyB0aGUgaW5pdGlhbCBhbmQgZmx1c2ggZnVuY3Rpb24gZm9yIHRoZSBwb29sLCBhcmU6IGByZWZpbGxfc2tic2AsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgLCBgbmV0cG9sbF9zZW5kX3VkcGAgd2hpY2ggYXJlIGNydWNpYWwgaW4gdGhlIGNvcmUgZGF0YSBwYXRoLiBBbHNvLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYW5kIHRoZSBhc3NvY2lhdGVkIHN0b3JlIGZ1bmN0aW9uczogYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfcG9ydF9zdG9yZWAsIGByZW1vdGVfcG9ydF9zdG9yZWAsIGByZW1vdGVfbWFjX3N0b3JlYC4gRmluYWxseSwgdGhlIHRhcmdldCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAsIGBhbGxvY19wYXJhbV90YXJnZXRgLCBgZnJlZV9wYXJhbV90YXJnZXRgLCBhcyB3ZWxsIGFzIHNldHVwL2NsZWFudXAgZnVuY3Rpb25zIGxpa2UgYF9fbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NldHVwYCBhbmQgYF9fbmV0cG9sbF9jbGVhbnVwYCwgd2hpY2ggSSBhbHNvIG5lZWQgdG8gdmVyaWZ5LlxuXG5BbHJpZ2h0LCBJJ2xsIGdvIGFoZWFkIGFuZCBsb2cgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1MSwiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDk6MDU6MzMuNjAwMjUzMzIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDA2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2luaXRcIixcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgICBcInJlZmlsbF9za2JzXCIsXG4gICAgXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgICBcImZpbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJsb2NhbF9wb3J0X3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfcG9ydF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX21hY19zdG9yZVwiLFxuICAgIFwiZHJvcF9uZXRjb25zb2xlX3RhcmdldFwiLFxuICAgIFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJmcmVlX3BhcmFtX3RhcmdldFwiLFxuICAgIFwiX19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NldHVwXCIsXG4gICAgXCJfX25ldHBvbGxfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBjb2RlIGJ5IG1vdmluZyB0aGUgZmFsbGJhY2sgc2tiIHBvb2wgYW5kIHRhcmdldCBwYXJhbWV0ZXJzIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gVGhpcyBjaGFuZ2VzIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHNrYiBwb29sIGFuZCB0aGUgdGFyZ2V0IHBhcmFtZXRlcnMsIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgZmx1c2ggdGhlIHNrYiBwb29sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdFwiLFxuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaFwiLFxuICAgIFwicmVmaWxsX3NrYnNcIixcbiAgICBcIm5ldGNvbnNfc2tiX3BvcFwiLFxuICAgIFwiZmluZF9za2JcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcImVuYWJsZWRfc3RvcmVcIixcbiAgICBcImxvY2FsX3BvcnRfc3RvcmVcIixcbiAgICBcInJlbW90ZV9wb3J0X3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfbWFjX3N0b3JlXCIsXG4gICAgXCJkcm9wX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gICAgXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgICBcImZyZWVfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJfX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2V0dXBcIixcbiAgICBcIl9fbmV0cG9sbF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBuZXRjb25zb2xlIGFuZCBuZXRwb2xsIGNvZGUgYnkgbW92aW5nIHRoZSBmYWxsYmFjayBza2IgcG9vbCBhbmQgdGFyZ2V0IHBhcmFtZXRlcnMgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBUaGlzIGNoYW5nZXMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgc2tiIHBvb2wgYW5kIHRoZSB0YXJnZXQgcGFyYW1ldGVycywgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCBmbHVzaCB0aGUgc2tiIHBvb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[1] Phase: Succeeded StartedAt: 2026-07-11 09:07:49 +0000 UTC FinishedAt: 2026-07-11 09:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 09:07:49 +0000 UTC FinishedAt: 2026-07-11 09:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2] Phase: Succeeded StartedAt: 2026-07-11 09:07:49 +0000 UTC FinishedAt: 2026-07-11 13:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:07:49 +0000 UTC FinishedAt: 2026-07-11 13:37:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:07:49 +0000 UTC FinishedAt: 2026-07-11 09:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:07:49 +0000 UTC FinishedAt: 2026-07-11 09:07:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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-workflowjskxq/series-workflowjskxq-convert-artifact-3606290936/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:08:11 +0000 UTC FinishedAt: 2026-07-11 09:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:08:11 +0000 UTC FinishedAt: 2026-07-11 09:49:30 +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:*514ec8e8-436d-464f-881c-5c283f23a50a,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-workflowjskxq/series-workflowjskxq-convert-artifact-3606290936/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": "9800148a-cbd7-444a-bb64-e7935e599f48", "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-workflowjskxq/series-workflowjskxq-build-action-2942920366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:08:11 +0000 UTC FinishedAt: 2026-07-11 09:49:04 +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:*514ec8e8-436d-464f-881c-5c283f23a50a,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-workflowjskxq/series-workflowjskxq-convert-artifact-3606290936/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": "9800148a-cbd7-444a-bb64-e7935e599f48", "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-workflowjskxq/series-workflowjskxq-build-action-2942920366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:49:30 +0000 UTC FinishedAt: 2026-07-11 09:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:49:30 +0000 UTC FinishedAt: 2026-07-11 09:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:49:30 +0000 UTC FinishedAt: 2026-07-11 09:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:49:30 +0000 UTC FinishedAt: 2026-07-11 09:49:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-workflowjskxq/series-workflowjskxq-convert-artifact-2412567647/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:49:50 +0000 UTC FinishedAt: 2026-07-11 09:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:49:50 +0000 UTC FinishedAt: 2026-07-11 09:52:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9800148a-cbd7-444a-bb64-e7935e599f48,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-workflowjskxq/series-workflowjskxq-build-action-2942920366/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-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:52:42 +0000 UTC FinishedAt: 2026-07-11 09:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:52:42 +0000 UTC FinishedAt: 2026-07-11 09:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:52:42 +0000 UTC FinishedAt: 2026-07-11 10:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:52:42 +0000 UTC FinishedAt: 2026-07-11 10:32:44 +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:*514ec8e8-436d-464f-881c-5c283f23a50a,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-workflowjskxq/series-workflowjskxq-convert-artifact-2412567647/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": "4117a757-56fe-40bd-ace3-1bb5ad54012d", "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-workflowjskxq/series-workflowjskxq-build-action-3751635443/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 09:52:42 +0000 UTC FinishedAt: 2026-07-11 10:32:34 +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:*514ec8e8-436d-464f-881c-5c283f23a50a,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-workflowjskxq/series-workflowjskxq-convert-artifact-2412567647/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": "4117a757-56fe-40bd-ace3-1bb5ad54012d", "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-workflowjskxq/series-workflowjskxq-build-action-3751635443/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:32:44 +0000 UTC FinishedAt: 2026-07-11 10:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:32:44 +0000 UTC FinishedAt: 2026-07-11 10:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:32:44 +0000 UTC FinishedAt: 2026-07-11 10:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:32:44 +0000 UTC FinishedAt: 2026-07-11 10:34:48 +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:*4117a757-56fe-40bd-ace3-1bb5ad54012d,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-workflowjskxq/series-workflowjskxq-build-action-3751635443/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-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 13:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 13:37:53 +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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"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:*9800148a-cbd7-444a-bb64-e7935e599f48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4117a757-56fe-40bd-ace3-1bb5ad54012d,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-workflowjskxq/series-workflowjskxq-build-action-2942920366/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-workflowjskxq/series-workflowjskxq-build-action-3751635443/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 10:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 10:35:14 +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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"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-workflowjskxq/series-workflowjskxq-convert-artifact-2184829048/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 10:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 10:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:34:57 +0000 UTC FinishedAt: 2026-07-11 10:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:35:32 +0000 UTC FinishedAt: 2026-07-11 13:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjskxq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","netconsole_parser_cmdline","enabled_store","local_port_store","remote_port_store","remote_mac_store","drop_netconsole_target","alloc_param_target","free_param_target","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"0fafe5ef-0225-40d4-a24c-199fc2e4a2df","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-07-11 10:35:32 +0000 UTC FinishedAt: 2026-07-11 13:37:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9800148a-cbd7-444a-bb64-e7935e599f48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4117a757-56fe-40bd-ace3-1bb5ad54012d,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-workflowjskxq/series-workflowjskxq-build-action-2942920366/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-workflowjskxq/series-workflowjskxq-build-action-3751635443/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-workflowjskxq/series-workflowjskxq-convert-artifact-2184829048/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,}