Name: series-workflowdcjxl Phase: Succeeded StartedAt: 2026-06-26 17:59:19 +0000 UTC FinishedAt: 2026-06-26 18:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[0] Phase: Succeeded StartedAt: 2026-06-26 17:59:19 +0000 UTC FinishedAt: 2026-06-26 18:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 17:59:19 +0000 UTC FinishedAt: 2026-06-26 18:13:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK_QUEUE", "NETFILTER_NETLINK_GLUE_CT", "NETFILTER_ADVANCED", "NF_CT_NETLINK_HELPER", "NF_CONNTRACK_AMANDA", "NF_CONNTRACK_FTP", "NF_CONNTRACK_H323", "NF_CONNTRACK_IRC", "NF_CONNTRACK_NETBIOS_NS", "NF_CONNTRACK_PPTP", "NF_CONNTRACK_SANE", "NF_CONNTRACK_SIP", "NF_CONNTRACK_TFTP", "NF_CONNTRACK_SNMP", "NF_NAT", "NF_NAT_SNMP_BASIC", "OPENVSWITCH", "NET_ACT_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK_QUEUE", "NETFILTER_NETLINK_GLUE_CT", "NETFILTER_ADVANCED", "NF_CT_NETLINK_HELPER", "NF_CONNTRACK_AMANDA", "NF_CONNTRACK_FTP", "NF_CONNTRACK_H323", "NF_CONNTRACK_IRC", "NF_CONNTRACK_NETBIOS_NS", "NF_CONNTRACK_PPTP", "NF_CONNTRACK_SANE", "NF_CONNTRACK_SIP", "NF_CONNTRACK_TFTP", "NF_CONNTRACK_SNMP", "NF_NAT", "NF_NAT_SNMP_BASIC", "OPENVSWITCH", "NET_ACT_CT" ], "series_id": "f65c315d-b9f9-4dc6-8d2c-387298720db0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_conntrack_helper_register", "__nf_conntrack_helper_find", "nf_ct_helper_init", "nfnl_cthelper_new", "nfnl_cthelper_get", "nfnl_cthelper_del", "nfnl_cthelper_create", "nf_ct_helper", "nf_conntrack_broadcast_help" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OWRjZDZjMzFjN2QzMmI3OGZkOTQwYTBhYjAwODAxMTdlNDI0MDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6MDk6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbmluZGV4IDgxMjg2YzQ5OTMyNTIxLi5iMTVmMzc2MDRjZGU0ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbkBAIC05LDggJiM0Mzs5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaFx1MDAzZVxuIFxuLSNkZWZpbmUgUkFTX1BPUlQgMTcxOVxuLSNkZWZpbmUgUTkzMV9QT1JUIDE3MjBcbiAjZGVmaW5lIEgzMjNfUlRQX0NIQU5ORUxfTUFYIDRcdC8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqL1xuIFxuIC8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG5pbmRleCBjM2JkYjQzNzA5Mzg0ZC4uYzBiMzA1Y2U3YzNjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG5AQCAtNTAsOCAmIzQzOzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcbiBcdF9fYmUxNiBwYWNfY2FsbF9pZDtcdFx0XHQvKiBOQVQmIzM5O2VkIFBBQyBjYWxsIGlkICovXG4gfTtcbiBcbi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUXHQxNzIzXG4tXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MXHQxXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9NR01UXHQyXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbkBAIC0zLDggJiM0MzszLDYgQEBcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfU0FORV9IXG4gLyogU0FORSB0cmFja2luZy4gKi9cbiBcbi0jZGVmaW5lIFNBTkVfUE9SVFx0NjU2NlxuLVxuIGVudW0gc2FuZV9zdGF0ZSB7XG4gXHRTQU5FX1NUQVRFX05PUk1BTCxcbiBcdFNBTkVfU1RBVEVfU1RBUlRfUkVRVUVTVEVELFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG5pbmRleCA5MGIzMzRiYmNlM2NlNi4uZTNkMTczOWM1NTdkMTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG5AQCAtMiw4ICYjNDM7Miw2IEBAXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxuICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0hcbiBcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC00MywxMSAmIzQzOzQzLDEwIEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHtcbiBcbiBcdHJlZmNvdW50X3QgY3RfcmVmY250O1xuIFxuLVx0LyogVHVwbGUgb2YgdGhpbmdzIHdlIHdpbGwgaGVscCAoY29tcGFyZWQgYWdhaW5zdCBzZXJ2ZXIgcmVzcG9uc2UpICovXG4tXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlO1xuJiM0MztcdHU4IG5mcHJvdG87XHQvKiBORlBST1RPXyosIGNhbiBiZSBORlBST1RPX1VOU1BFQyAqL1xuJiM0MztcdHU4IGw0cHJvdG87XHQvKiBJUFBST1RPX1VEUC9UQ1AgKi9cbiBcbi1cdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xuJiM0MztcdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QgKi9cbiBcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdCAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjb25udHJhY2tpbmZvKTtcbkBAIC05NCw4ICYjNDM7OTMsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4mIzQzO1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX25hdF9zbm1wX2Jhc2ljX2luaXQodm9pZClcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfbmF0X3NubXBfaG9vaywgaGVscCk7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzbm1wX3RyYXBfaGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O3NubXBfdHJhcFwmIzM0OywgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtzbm1wX3RyYXBcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXHUwMDI2c25tcF90cmFwX2hlbHBlcl9wdHIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbmluZGV4IGRkYWZiZGZjOTZkYzM1Li5lZGNlZDAzOTk3MGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuQEAgLTE5OSwxMCAmIzQzOzE5OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4gXHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIEhFTFBFUl9OQU1FLCAxMDA4MCwgMTAwODAsIDEwMDgwLFxuJiM0MztcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTY2LDggJiM0Mzs2Niw2IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGV4cC1cdTAwM2V0dXBsZSAgICAgICAgICAgICAgICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xuIFxuIFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbi1cdGlmIChoZWxwZXIpXG4tXHRcdGV4cC1cdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci1cdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydDtcbiBcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51My5pcCAgICAgICA9IG1hc2s7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudS51ZHAucG9ydCAgPSBodG9ucygweEZGRkYpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcbmluZGV4IDA4NDdmODQ1NjEzZDZhLi5mMzk0NDU5OGMxNzI2ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xuQEAgLTM1LDExICYjNDM7MzUsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2Z0cFwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mX2Z0cF9sb2NrKTtcbiBcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XG4tc3RhdGljIHVfaW50MTZfdCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tXG4gc3RhdGljIGJvb2wgbG9vc2U7XG4gbW9kdWxlX3BhcmFtKGxvb3NlLCBib29sLCAwNjAwKTtcbiBcbkBAIC01NjAsOCAmIzQzOzU1NSw4IEBAIHN0YXRpYyBpbnQgbmZfY3RfZnRwX2Zyb21fbmxhdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC01NzAsMzIgJiM0Mzs1NjUsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2Z0cF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihmdHBfcHRyLCBwb3J0c19jICogMik7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7XG4gXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBGVFBfUE9SVDtcbi1cbiBcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xuIFx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgRlRQX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2ZnRwX2V4cF9wb2xpY3ksIDAsIGhlbHAsXG4tXHRcdFx0XHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbiYjNDM7XHRcdFx0ICBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcbiYjNDM7XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGZ0cCwgcG9ydHNfYyAqIDIsIGZ0cF9wdHIpO1xuJiM0MztcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2ZnRwLCBcdTAwMjZmdHBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXG5pbmRleCAyNDkzMWUzNzk5ODViYi4uOThiOTc1M2Q1ZTY1ZTEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcbkBAIC0xNzEzLDE5ICYjNDM7MTcxMywxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBoMzIzX2hlbHBlcl9pbml0KHZvaWQpXG4gXHRpbnQgcmV0O1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O1JBU1wmIzM0OyxcbiBcdFx0XHQgIFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O1JBU1wmIzM0OywgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LCAwLCAwLCAwLFxuJiM0MztcdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OyxcbiBcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2VkLi41MDZjNTgwMzQ3NjE1NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQwLDEyICYjNDM7NDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKG5mX2N0X25hdF9oZWxwZXJzX211dGV4KTtcbiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xuIFxuLS8qIFN0dXBpZCBoYXNoLCBidXQgY29sbGlzaW9uIGZyZWUgZm9yIHRoZSBkZWZhdWx0IHJlZ2lzdHJhdGlvbnMgb2YgdGhlXG4tICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxuIHtcbi1cdHJldHVybiAoKCh0dXBsZS1cdTAwM2VzcmMubDNudW0gXHUwMDNjXHUwMDNjIDgpIHwgdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKSBeXG4tXHRcdChfX2ZvcmNlIF9fdTE2KXR1cGxlLVx1MDAzZXNyYy51LmFsbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4mIzQzO1x0c3RhdGljIHUzMiBzZWVkO1xuJiM0MztcdHUzMiBpbml0dmFsO1xuJiM0MztcbiYjNDM7XHRnZXRfcmFuZG9tX29uY2UoXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcbiYjNDM7XG4mIzQzO1x0aW5pdHZhbCA9IHNlZWQgXiBwcm90b251bTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgaW5pdHZhbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4gfVxuIFxuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcbkBAIC01NCwxOCAmIzQzOzU4LDE4IEBAIF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4tXHRcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaC1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gbDNudW0pXG4tXHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBwcm90b251bSlcbi1cdFx0XHRcdHJldHVybiBoO1xuLVx0XHR9XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xuJiM0MztcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChoLVx1MDAzZW5mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmZwcm90byAhPSBsM251bSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaC1cdTAwM2VsNHByb3RvID09IHByb3RvbnVtKVxuJiM0MztcdFx0XHRyZXR1cm4gaDtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0zNjMsOSAmIzQzOzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xuIFxuIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9O1xuLVx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcdTAwMjZtZS1cdTAwM2V0dXBsZSk7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3VyO1xuJiM0MztcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IHJldCA9IDAsIGk7XG4gXG4gXHRCVUdfT04obWUtXHUwMDNlZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7XG5AQCAtMzgyLDI5ICYjNDM7Mzg1LDE4IEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGggPSBoZWxwZXJfaGFzaChtZS1cdTAwM2VuYW1lLCBtZS1cdTAwM2VsNHByb3RvKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbi1cdFx0XHRpZiAoIXN0cmNtcChjdXItXHUwMDNlbmFtZSwgbWUtXHUwMDNlbmFtZSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IE5GUFJPVE9fVU5TUEVDIHx8XG4tXHRcdFx0ICAgICBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IG1lLVx1MDAzZXR1cGxlLnNyYy5sM251bSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPT0gbWUtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcbiYjNDM7XHRcdGlmICghc3RyY21wKGN1ci1cdTAwM2VuYW1lLCBtZS1cdTAwM2VuYW1lKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY3VyLVx1MDAzZW5mcHJvdG8gPT0gTkZQUk9UT19VTlNQRUMgfHxcbiYjNDM7XHRcdCAgICAgY3VyLVx1MDAzZW5mcHJvdG8gPT0gbWUtXHUwMDNlbmZwcm90bykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY3VyLVx1MDAzZWw0cHJvdG8gPT0gbWUtXHUwMDNlbDRwcm90bykge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBmb3IgYXV0b19hc3NpZ25faGVscGVyICovXG4tXHRpZiAoIShtZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xuLVx0XHRcdGlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoXHUwMDI2Y3VyLVx1MDAzZXR1cGxlLCBcdTAwMjZtZS1cdTAwM2V0dXBsZSxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1hc2spKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZtZS1cdTAwM2VjdF9yZWZjbnQsIDEpO1xuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XG4gXHRuZl9jdF9oZWxwZXJfY291bnQmIzQzOyYjNDM7O1xuQEAgLTQ3OSw4ICYjNDM7NDcxLDcgQEAgdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4mIzQzO1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5AQCAtNDkyLDkgJiM0Mzs0ODMsOCBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4ge1xuIFx0bWVtc2V0KGhlbHBlciwgMCwgc2l6ZW9mKCpoZWxwZXIpKTtcbiBcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gPSBsM251bTtcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPSBwcm90b251bTtcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5zcmMudS5hbGwgPSBodG9ucyhzcGVjX3BvcnQpO1xuJiM0MztcdGhlbHBlci1cdTAwM2VuZnByb3RvID0gbDNudW07XG4mIzQzO1x0aGVscGVyLVx1MDAzZWw0cHJvdG8gPSBwcm90b251bTtcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItXHUwMDNlaGVscCwgaGVscCk7XG4gXHRoZWxwZXItXHUwMDNlZnJvbV9ubGF0dHIgPSBmcm9tX25sYXR0cjtcbkBAIC01MDIsMTAgJiM0Mzs0OTIsNyBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4gXHRzbnByaW50ZihoZWxwZXItXHUwMDNlbmF0X21vZF9uYW1lLCBzaXplb2YoaGVscGVyLVx1MDAzZW5hdF9tb2RfbmFtZSksXG4gXHRcdCBORl9OQVRfSEVMUEVSX1BSRUZJWCBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG4gXG4tXHRpZiAoc3BlY19wb3J0ID09IGRlZmF1bHRfcG9ydClcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbi1cdGVsc2Vcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzLSV1XCYjMzQ7LCBuYW1lLCBpZCk7XG4mIzQzO1x0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUykpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG5pbmRleCAxOTNhYjM0ZGI3OTVmOS4uNGU2YmFmZTQxNDM3NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbkBAIC0yMSw5ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaFx1MDAzZVxuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4gc3RhdGljIHVuc2lnbmVkIGludCBtYXhfZGNjX2NoYW5uZWxzID0gODtcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XG4gLyogVGhpcyBpcyBzbG93LCBidXQgaXQmIzM5O3Mgc2ltcGxlLiAtLVJSICovXG5AQCAtNDIsOCAmIzQzOzM5LDYgQEAgTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2lyY1wmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCYjMzQ7cG9ydCBudW1iZXJzIG9mIElSQyBzZXJ2ZXJzXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X2RjY19jaGFubmVscywgdWludCwgMDQwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfZGNjX2NoYW5uZWxzLCBcJiMzNDttYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXCYjMzQ7XG4gXHRcdFx0XHQgICBcJiMzNDtJUkMgc2Vzc2lvblwmIzM0Oyk7XG5AQCAtMjU0LDEzICYjNDM7MjQ5LDEzIEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmNbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaXJjX3B0cltNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmMgX19yZWFkX21vc3RseTtcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0O1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xuIFxuQEAgLTI4MiwxNyAmIzQzOzI3NywxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiBcdGlmICghaXJjX2J1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBJUkNfUE9SVDtcbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbiYjNDM7XHRcdFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHRcdCAgSVJDX1BPUlQsIHBvcnRzW2ldLCBpLCBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbi1cdFx0XHRcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0fVxuLVxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoXHUwMDI2aXJjWzBdLCBwb3J0c19jLCBpcmNfcHRyKTtcbiYjNDM7XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmlyYywgXHUwMDI2aXJjX3B0cik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdGtmcmVlKGlyY19idWZmZXIpO1xuQEAgLTMwNCw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19pcmNfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoaXJjX3B0ciwgcG9ydHNfYyk7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGlyY19wdHIpO1xuIFx0a2ZyZWUoaXJjX2J1ZmZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xuaW5kZXggODlkMWNmN2Q2NTEyZTcuLmNhYTJiMTAxZmE5ZTVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBIRUxQRVJfTkFNRVx0XCYjMzQ7bmV0Ymlvcy1uc1wmIzM0O1xuLSNkZWZpbmUgTk1CRF9QT1JUXHQxMzdcbiBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BhdHJpY2sgTWNIYXJkeSBcdTAwM2NrYWJlckB0cmFzaC5uZXRcdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcJiMzNDspO1xuQEAgLTU0LDcgJiM0Mzs1Myw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHQgIE5NQkRfUE9SVCwgTk1CRF9QT1JULCBOTUJEX1BPUlQsXG4gXHRcdFx0ICBcdTAwMjZleHBfcG9saWN5LCAwLCBuZXRiaW9zX25zX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmhlbHBlciwgXHUwMDI2aGVscGVyX3B0cik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuaW5kZXggNDlkMTUxMWU5OTIxODUuLmI0MDg1YWYzYWQxY2UwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXG5AQCAtMzEsOCAmIzQzOzMxLDggQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdGlmIChoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gcHJvdG8pXG4mIzQzO1x0aWYgKGhlbHBlci1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoZWxwZXItXHUwMDNlbmZwcm90byAhPSBwcm90bylcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbkBAIC02MCw3ICYjNDM7NjAsNyBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHR9XG4gXG4tXHRpZiAoaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBwcm90bylcbiYjNDM7XHRpZiAoaGVscGVyLVx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVx1MDAzZWhlbHApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDAsNyAmIzQzOzU0MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9wcHRwX21hc3RlcikpO1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcJiMzNDtwcHRwXCYjMzQ7LCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O3BwdHBcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXG5pbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xuQEAgLTM0LDExICYjNDM7MzQsNiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O01pY2hhbCBTY2htaWR0IFx1MDAzY21zY2htaWR0QHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTQU5FIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1cbiBzdHJ1Y3Qgc2FuZV9yZXF1ZXN0IHtcbiBcdF9fYmUzMiBSUENfY29kZTtcbiAjZGVmaW5lIFNBTkVfTkVUX1NUQVJUICAgICAgNyAgIC8qIFJQQyBjb2RlICovXG5AQCAtMTY5LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzYW5lX2V4cF9wb2xpY3kgPSB7XG4gXHQubWF4X2V4cGVjdGVkXHQ9IDEsXG5AQCAtMTc5LDMyICYjNDM7MTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzYW5lX3B0cik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zYW5lX21hc3RlcikpO1xuIFxuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gU0FORV9QT1JUO1xuLVxuLVx0LyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnNcbi1cdFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmVbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxuLVx0XHRcdFx0ICBcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4mIzQzO1x0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuJiM0MztcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNhbmUsIHBvcnRzX2MgKiAyLCBzYW5lX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZzYW5lLCBcdTAwMjZzYW5lX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5AQCAtMzUsMTIgJiM0MzszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcJiMzNDspO1xuIE1PRFVMRV9BTElBUyhcJiMzNDtpcF9jb25udHJhY2tfc2lwXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTXHQ4XG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcJiMzNDtwb3J0IG51bWJlcnMgb2YgU0lQIHNlcnZlcnNcJiMzNDspO1xuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUO1xuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzaXBfdGltZW91dCwgXCYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvblwmIzM0Oyk7XG5AQCAtMTc2NCw4ICYjNDM7MTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCBcdTAwMjZkcHRyLCBcdTAwMjZkYXRhbGVuKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwWzJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggJiM0MzsgMV0gPSB7XG4gXHRbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHtcbkBAIC0xNzkyLDM4ICYjNDM7MTc4NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICYjNDM7IDFcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCBwb3J0c19jICogNCk7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NpcF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFNJUF9QT1JUO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzQgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSAmIzQzOyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSAmIzQzOyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgJiM0MzsgM10sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4tXHRcdFx0XHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMF0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcbiYjNDM7XHRcdFx0ICBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbiYjNDM7XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4mIzQzO1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4mIzQzO1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4mIzQzO1x0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCAyLCBzaXBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcbmluZGV4IGI2ZmNlNTcwM2ZjZTc3Li4xMDk5ODZkNWQ1NWU2OSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXG5AQCAtMTQsOCAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5oXHUwMDNlXG4gXG4tI2RlZmluZSBTTk1QX1BPUlRcdDE2MVxuLVxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7SmlyaSBPbHNhIFx1MDAzY2pvbHNhQHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTk1QIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuQEAgLTU1LDcgJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCYjMzQ7c25tcFwmIzM0OywgU05NUF9QT1JULCBTTk1QX1BPUlQsIFNOTVBfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtzbm1wXCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2ZXhwX3BvbGljeSwgMCwgc25tcF9jb25udHJhY2tfaGVscCwgTlVMTCxcbiBcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcbmluZGV4IDQzOTNjNDM1YWEzNTQ5Li5hNjk1NTllZGY5YjM2MyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXG5AQCAtMjYsMTIgJiM0MzsyNiw2IEBAIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTKFwmIzM0O2lwX2Nvbm50cmFja190ZnRwXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwmIzM0O1BvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnNcJiMzNDspO1xuLVxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfdGZ0cF9ob29rKTtcbiBcbkBAIC05NSw4ICYjNDM7ODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHBbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC0xMDUsMzAgJiM0Mzs5OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTtcbiYjNDM7XHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIodGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTigwKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFRGVFBfUE9SVDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHR9XG4mIzQzO1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxuJiM0MztcdFx0XHQgIEhFTFBFUl9OQU1FLFxuJiM0MztcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuJiM0MztcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHRmdHAsIHBvcnRzX2MgKiAyLCB0ZnRwX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZ0ZnRwLCBcdTAwMjZ0ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCYjNDM7MV0gPSB7XG4tXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1UxNiwgfSxcbiYjNDM7XHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbiBcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4gfTtcbiBcbkBAIC0yNTQsNyAmIzQzOzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0aGVscGVyLVx1MDAzZWRhdGFfbGVuID0gc2l6ZTtcbiBcbiBcdGhlbHBlci1cdTAwM2VmbGFncyB8PSBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0U7XG4tXHRtZW1jcHkoXHUwMDI2aGVscGVyLVx1MDAzZXR1cGxlLCB0dXBsZSwgc2l6ZW9mKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUpKTtcbiYjNDM7XHRoZWxwZXItXHUwMDNlbmZwcm90byA9IHR1cGxlLVx1MDAzZXNyYy5sM251bTtcbiYjNDM7XHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bTtcbiBcbiBcdGhlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xuIFx0aGVscGVyLVx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcbkBAIC00NDksOCAmIzQzOzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdFx0aWYgKHN0cm5jbXAoY3VyLVx1MDAzZW5hbWUsIGhlbHBlcl9uYW1lLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XG4tXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdFx0aWYgKCh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZW5mcHJvdG8gfHxcbiYjNDM7XHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9FWENMKVxuQEAgLTQ3OSwxMCAmIzQzOzQ4MCwxMCBAQCBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZDVEhfVFVQTEVfTDNQUk9UT05VTSxcbi1cdFx0XHQgaHRvbnMoaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSkpKVxuJiM0MztcdFx0XHQgaHRvbnMoaGVscGVyLVx1MDAzZW5mcHJvdG8pKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAobmxhX3B1dF91OChza2IsIE5GQ1RIX1RVUExFX0w0UFJPVE9OVU0sIGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVx1MDAzZWw0cHJvdG8pKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdG5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpO1xuQEAgLTY2MSw4ICYjNDM7NjYyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAodHVwbGVfc2V0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XG4tXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZW5mcHJvdG8gfHxcbiYjNDM7XHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuQEAgLTcyMSw4ICYjNDM7NzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAodHVwbGVfc2V0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XG4tXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZW5mcHJvdG8gfHxcbiYjNDM7XHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Zm91bmQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk5ZGNkNmMzMWM3ZDMyYjc4ZmQ5NDBhMGFiMDA4MDExN2U0MjQwOGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAxODowOToyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oCmluZGV4IDgxMjg2YzQ5OTMyNTIxLi5iMTVmMzc2MDRjZGU0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oCkBAIC05LDggJiM0Mzs5LDYgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmgmZ3Q7CiAKLSNkZWZpbmUgUkFTX1BPUlQgMTcxOQotI2RlZmluZSBROTMxX1BPUlQgMTcyMAogI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0CS8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqLwogCiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oCmluZGV4IGMzYmRiNDM3MDkzODRkLi5jMGIzMDVjZTdjM2M2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oCkBAIC01MCw4ICYjNDM7NTAsNiBAQCBzdHJ1Y3QgbmZfbmF0X3BwdHAgewogCV9fYmUxNiBwYWNfY2FsbF9pZDsJCQkvKiBOQVQmIzM5O2VkIFBBQyBjYWxsIGlkICovCiB9OwogCi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUCTE3MjMKLQogI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MCTEKICNkZWZpbmUgUFBUUF9QQUNLRVRfTUdNVAkyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oCmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oCkBAIC0zLDggJiM0MzszLDYgQEAKICNkZWZpbmUgX05GX0NPTk5UUkFDS19TQU5FX0gKIC8qIFNBTkUgdHJhY2tpbmcuICovCiAKLSNkZWZpbmUgU0FORV9QT1JUCTY1NjYKLQogZW51bSBzYW5lX3N0YXRlIHsKIAlTQU5FX1NUQVRFX05PUk1BTCwKIAlTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oCmluZGV4IDkwYjMzNGJiY2UzY2U2Li5lM2QxNzM5YzU1N2QxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oCkBAIC0yLDggJiM0MzsyLDYgQEAKICNpZm5kZWYgX05GX0NPTk5UUkFDS19URlRQX0gKICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0gKIAotI2RlZmluZSBURlRQX1BPUlQgNjkKLQogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCBjNzYxY2Q4MTU4YjI1My4uYmM1NDI3ZDIzOWY0YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaApAQCAtNDMsMTEgJiM0Mzs0MywxMCBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB7CiAKIAlyZWZjb3VudF90IGN0X3JlZmNudDsKIAotCS8qIFR1cGxlIG9mIHRoaW5ncyB3ZSB3aWxsIGhlbHAgKGNvbXBhcmVkIGFnYWluc3Qgc2VydmVyIHJlc3BvbnNlKSAqLwotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiYjNDM7CXU4IG5mcHJvdG87CS8qIE5GUFJPVE9fKiwgY2FuIGJlIE5GUFJPVE9fVU5TUEVDICovCiYjNDM7CXU4IGw0cHJvdG87CS8qIElQUFJPVE9fVURQL1RDUCAqLwogCi0JLyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCwgb3IgLTEgdG8KLSAgICAgICAgICAgaW52YWxpZGF0ZS4gKi8KJiM0MzsJLyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCAqLwogCWludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY29ubnRyYWNraW5mbyk7CkBAIC05NCw4ICYjNDM7OTMsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLAogdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKTsKIAogdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLAotCQkgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsCiYjNDM7CQkgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCwKIAkJICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LAogCQkgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYwppbmRleCAwZWRlMTM4ZGZkMjllNy4uZTU0MGI4NmJkMTViNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYwpAQCAtMjEzLDcgJiM0MzsyMTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfc25tcF9iYXNpY19pbml0KHZvaWQpCiAJUkNVX0lOSVRfUE9JTlRFUihuZl9uYXRfc25tcF9ob29rLCBoZWxwKTsKIAogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c25tcF90cmFwX2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7c25tcF90cmFwJiMzNDssIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCwgU05NUF9UUkFQX1BPUlQsCiYjNDM7CQkJICAmIzM0O3NubXBfdHJhcCYjMzQ7LAogCQkJICAmYW1wO3NubXBfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJZXJyID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3NubXBfdHJhcF9oZWxwZXIsICZhbXA7c25tcF90cmFwX2hlbHBlcl9wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCBkZGFmYmRmYzk2ZGMzNS4uZWRjZWQwMzk5NzBkNDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCkBAIC0xOTksMTAgJiM0MzsxOTksMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpCiAJfQogCiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDthbWFuZGFfaGVscGVyWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCwKLQkJCSAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKIAkJCSAgJmFtcDthbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2FtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCwKLQkJCSAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKIAkJCSAgJmFtcDthbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAogCXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGFtYW5kYV9oZWxwZXIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jCmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKQEAgLTY2LDggJiM0Mzs2Niw2IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlleHAtJmd0O3R1cGxlICAgICAgICAgICAgICAgID0gY3QtJmd0O3R1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlOwogCiAJaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtJmd0O2hlbHBlcik7Ci0JaWYgKGhlbHBlcikKLQkJZXhwLSZndDt0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci0mZ3Q7dHVwbGUuc3JjLnUudWRwLnBvcnQ7CiAKIAlleHAtJmd0O21hc2suc3JjLnUzLmlwICAgICAgID0gbWFzazsKIAlleHAtJmd0O21hc2suc3JjLnUudWRwLnBvcnQgID0gaHRvbnMoMHhGRkZGKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtMzUsMTEgJiM0MzszNSw2IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwX2Nvbm50cmFja19mdHAmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhuZl9mdHBfbG9jayk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotCiBzdGF0aWMgYm9vbCBsb29zZTsKIG1vZHVsZV9wYXJhbShsb29zZSwgYm9vbCwgMDYwMCk7CiAKQEAgLTU2MCw4ICYjNDM7NTU1LDggQEAgc3RhdGljIGludCBuZl9jdF9mdHBfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7CiAJLm1heF9leHBlY3RlZAk9IDEsCkBAIC01NzAsMzIgJiM0Mzs1NjUsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHsKIAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKQogewotCW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoZnRwX3B0cik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19mdHBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBGVFBfUE9SVDsKLQogCS8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9ucwogCQkgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBGVFBfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtmdHBfZXhwX3BvbGljeSwgMCwgaGVscCwKLQkJCQkgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2Z0cFsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sCi0JCQkJICAmYW1wO2Z0cF9leHBfcG9saWN5LCAwLCBoZWxwLAotCQkJCSAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2Z0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLAomIzQzOwkJCSAgSEVMUEVSX05BTUUsCiYjNDM7CQkJICAmYW1wO2Z0cF9leHBfcG9saWN5LCAwLCBoZWxwLAomIzQzOwkJCSAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihmdHAsIHBvcnRzX2MgKiAyLCBmdHBfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO2Z0cCwgJmFtcDtmdHBfcHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCAyNDkzMWUzNzk5ODViYi4uOThiOTc1M2Q1ZTY1ZTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC0xNzEzLDE5ICYjNDM7MTcxMywxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBoMzIzX2hlbHBlcl9pbml0KHZvaWQpCiAJaW50IHJldDsKIAogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLAotCQkJICAmIzM0O1JBUyYjMzQ7LCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULAomIzQzOwkJCSAgJiMzNDtSQVMmIzM0OywKIAkJCSAgJmFtcDtyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfcmFzWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7UkFTJiMzNDssIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsCiYjNDM7CQkJICAmIzM0O1JBUyYjMzQ7LAogCQkJICAmYW1wO3Jhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLAotCQkJICAmIzM0O0guMjQ1JiMzNDssIDAsIDAsIDAsCiYjNDM7CQkJICAmIzM0O0guMjQ1JiMzNDssCiAJCQkgICZhbXA7aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsCi0JCQkgICYjMzQ7US45MzEmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCwKJiM0MzsJCQkgICYjMzQ7US45MzEmIzM0OywKIAkJCSAgJmFtcDtxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsCi0JCQkgICYjMzQ7US45MzEmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCwKJiM0MzsJCQkgICYjMzQ7US45MzEmIzM0OywKIAkJCSAgJmFtcDtxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNTAwNTA5YjE3NjYzZWQuLjUwNmM1ODAzNDc2MTU1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtNDAsMTIgJiM0Mzs0MCwxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X2hlbHBlcl9jb3VudCBfX3JlYWRfbW9zdGx5Owogc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9uYXRfaGVscGVyc19tdXRleCk7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5OwogCi0vKiBTdHVwaWQgaGFzaCwgYnV0IGNvbGxpc2lvbiBmcmVlIGZvciB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb25zIG9mIHRoZQotICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBoZWxwZXJfaGFzaChjb25zdCBjaGFyICpuYW1lLCB1OCBwcm90b251bSkKIHsKLQlyZXR1cm4gKCgodHVwbGUtJmd0O3NyYy5sM251bSAmbHQ7Jmx0OyA4KSB8IHR1cGxlLSZndDtkc3QucHJvdG9udW0pIF4KLQkJKF9fZm9yY2UgX191MTYpdHVwbGUtJmd0O3NyYy51LmFsbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7CiYjNDM7CXN0YXRpYyB1MzIgc2VlZDsKJiM0MzsJdTMyIGluaXR2YWw7CiYjNDM7CiYjNDM7CWdldF9yYW5kb21fb25jZSgmYW1wO3NlZWQsIHNpemVvZihzZWVkKSk7CiYjNDM7CiYjNDM7CWluaXR2YWwgPSBzZWVkIF4gcHJvdG9udW07CiYjNDM7CiYjNDM7CXJldHVybiBqaGFzaChuYW1lLCBzdHJsZW4obmFtZSksIGluaXR2YWwpICUgbmZfY3RfaGVscGVyX2hzaXplOwogfQogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCkBAIC01NCwxOCAmIzQzOzU4LDE4IEBAIF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pCiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHsKLQkJCWlmIChzdHJjbXAoaC0mZ3Q7bmFtZSwgbmFtZSkpCi0JCQkJY29udGludWU7CiYjNDM7CWlmICghbmZfY3RfaGVscGVyX2hhc2gpCiYjNDM7CQlyZXR1cm4gTlVMTDsKIAotCQkJaWYgKGgtJmd0O3R1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyAmYW1wOyZhbXA7Ci0JCQkgICAgaC0mZ3Q7dHVwbGUuc3JjLmwzbnVtICE9IGwzbnVtKQotCQkJCWNvbnRpbnVlOwomIzQzOwlpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pOwogCi0JCQlpZiAoaC0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtID09IHByb3RvbnVtKQotCQkJCXJldHVybiBoOwotCQl9CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkgewomIzQzOwkJaWYgKHN0cmNtcChoLSZndDtuYW1lLCBuYW1lKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChoLSZndDtuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDICZhbXA7JmFtcDsgaC0mZ3Q7bmZwcm90byAhPSBsM251bSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChoLSZndDtsNHByb3RvID09IHByb3RvbnVtKQomIzQzOwkJCXJldHVybiBoOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTM2Myw5ICYjNDM7MzY3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7CiAKIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQogewotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9OwotCXVuc2lnbmVkIGludCBoID0gaGVscGVyX2hhc2goJmFtcDttZS0mZ3Q7dHVwbGUpOwogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdXI7CiYjNDM7CXVuc2lnbmVkIGludCBoOwogCWludCByZXQgPSAwLCBpOwogCiAJQlVHX09OKG1lLSZndDtleHBlY3RfY2xhc3NfbWF4ICZndDs9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7CkBAIC0zODIsMjkgJiM0MzszODUsMTggQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaCA9IGhlbHBlcl9oYXNoKG1lLSZndDtuYW1lLCBtZS0mZ3Q7bDRwcm90byk7CiAJbXV0ZXhfbG9jaygmYW1wO25mX2N0X2hlbHBlcl9tdXRleCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSYjNDM7JiM0MzspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkgewotCQkJaWYgKCFzdHJjbXAoY3VyLSZndDtuYW1lLCBtZS0mZ3Q7bmFtZSkgJmFtcDsmYW1wOwotCQkJICAgIChjdXItJmd0O3R1cGxlLnNyYy5sM251bSA9PSBORlBST1RPX1VOU1BFQyB8fAotCQkJICAgICBjdXItJmd0O3R1cGxlLnNyYy5sM251bSA9PSBtZS0mZ3Q7dHVwbGUuc3JjLmwzbnVtKSAmYW1wOyZhbXA7Ci0JCQkgICAgY3VyLSZndDt0dXBsZS5kc3QucHJvdG9udW0gPT0gbWUtJmd0O3R1cGxlLmRzdC5wcm90b251bSkgewotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkgewomIzQzOwkJaWYgKCFzdHJjbXAoY3VyLSZndDtuYW1lLCBtZS0mZ3Q7bmFtZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChjdXItJmd0O25mcHJvdG8gPT0gTkZQUk9UT19VTlNQRUMgfHwKJiM0MzsJCSAgICAgY3VyLSZndDtuZnByb3RvID09IG1lLSZndDtuZnByb3RvKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY3VyLSZndDtsNHByb3RvID09IG1lLSZndDtsNHByb3RvKSB7CiYjNDM7CQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JLyogYXZvaWQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgZm9yIGF1dG9fYXNzaWduX2hlbHBlciAqLwotCWlmICghKG1lLSZndDtmbGFncyAmYW1wOyBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0UpKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHsKLQkJCWlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoJmFtcDtjdXItJmd0O3R1cGxlLCAmYW1wO21lLSZndDt0dXBsZSwKLQkJCQkJCSAgICAgJmFtcDttYXNrKSkgewotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCX0KIAlyZWZjb3VudF9zZXQoJmFtcDttZS0mZ3Q7Y3RfcmVmY250LCAxKTsKIAlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDttZS0mZ3Q7aG5vZGUsICZhbXA7bmZfY3RfaGVscGVyX2hhc2hbaF0pOwogCW5mX2N0X2hlbHBlcl9jb3VudCYjNDM7JiM0Mzs7CkBAIC00NzksOCAmIzQzOzQ3MSw3IEBAIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7CiAKIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciwKLQkJICAgICAgIHUxNiBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICAgdTE2IGRlZmF1bHRfcG9ydCwgdTE2IHNwZWNfcG9ydCwgdTMyIGlkLAomIzQzOwkJICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsCiAJCSAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCwKIAkJICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtNDkyLDkgJiM0Mzs0ODMsOCBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsCiB7CiAJbWVtc2V0KGhlbHBlciwgMCwgc2l6ZW9mKCpoZWxwZXIpKTsKIAotCWhlbHBlci0mZ3Q7dHVwbGUuc3JjLmwzbnVtID0gbDNudW07Ci0JaGVscGVyLSZndDt0dXBsZS5kc3QucHJvdG9udW0gPSBwcm90b251bTsKLQloZWxwZXItJmd0O3R1cGxlLnNyYy51LmFsbCA9IGh0b25zKHNwZWNfcG9ydCk7CiYjNDM7CWhlbHBlci0mZ3Q7bmZwcm90byA9IGwzbnVtOwomIzQzOwloZWxwZXItJmd0O2w0cHJvdG8gPSBwcm90b251bTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItJmd0O2hlbHAsIGhlbHApOwogCWhlbHBlci0mZ3Q7ZnJvbV9ubGF0dHIgPSBmcm9tX25sYXR0cjsKQEAgLTUwMiwxMCAmIzQzOzQ5Miw3IEBAIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciwKIAlzbnByaW50ZihoZWxwZXItJmd0O25hdF9tb2RfbmFtZSwgc2l6ZW9mKGhlbHBlci0mZ3Q7bmF0X21vZF9uYW1lKSwKIAkJIE5GX05BVF9IRUxQRVJfUFJFRklYICYjMzQ7JXMmIzM0OywgbmFtZSk7CiAKLQlpZiAoc3BlY19wb3J0ID09IGRlZmF1bHRfcG9ydCkKLQkJc25wcmludGYoaGVscGVyLSZndDtuYW1lLCBzaXplb2YoaGVscGVyLSZndDtuYW1lKSwgJiMzNDslcyYjMzQ7LCBuYW1lKTsKLQllbHNlCi0JCXNucHJpbnRmKGhlbHBlci0mZ3Q7bmFtZSwgc2l6ZW9mKGhlbHBlci0mZ3Q7bmFtZSksICYjMzQ7JXMtJXUmIzM0OywgbmFtZSwgaWQpOwomIzQzOwlzbnByaW50ZihoZWxwZXItJmd0O25hbWUsIHNpemVvZihoZWxwZXItJmd0O25hbWUpLCAmIzM0OyVzJiMzNDssIG5hbWUpOwogCiAJaWYgKFdBUk5fT05fT05DRShleHBlY3RfY2xhc3NfbWF4ICZndDs9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMKaW5kZXggMTkzYWIzNGRiNzk1ZjkuLjRlNmJhZmU0MTQzNzUyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtMjEsOSAmIzQzOzIxLDYgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5oJmd0OwogCi0jZGVmaW5lIE1BWF9QT1JUUyA4Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2RjY19jaGFubmVscyA9IDg7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7CiAvKiBUaGlzIGlzIHNsb3csIGJ1dCBpdCYjMzk7cyBzaW1wbGUuIC0tUlIgKi8KQEAgLTQyLDggJiM0MzszOSw2IEBAIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogTU9EVUxFX0FMSUFTKCYjMzQ7aXBfY29ubnRyYWNrX2lyYyYjMzQ7KTsKIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7CiAKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgJiMzNDtwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnMmIzM0Oyk7CiBtb2R1bGVfcGFyYW0obWF4X2RjY19jaGFubmVscywgdWludCwgMDQwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9kY2NfY2hhbm5lbHMsICYjMzQ7bWF4IG51bWJlciBvZiBleHBlY3RlZCBEQ0MgY2hhbm5lbHMgcGVyICYjMzQ7CiAJCQkJICAgJiMzNDtJUkMgc2Vzc2lvbiYjMzQ7KTsKQEAgLTI1NCwxMyAmIzQzOzI0OSwxMyBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmlyY19wdHJbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmMgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmlyY19wdHIgX19yZWFkX21vc3RseTsKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaXJjX2V4cF9wb2xpY3k7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQ7CiYjNDM7CWludCByZXQ7CiAKIAluZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpOwogCkBAIC0yODIsMTcgJiM0MzsyNzcsMTEgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpCiAJaWYgKCFpcmNfYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIElmIG5vIHBvcnQgZ2l2ZW4sIGRlZmF1bHQgdG8gc3RhbmRhcmQgaXJjIHBvcnQgKi8KLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBJUkNfUE9SVDsKJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSwKJiM0MzsJCQkgICZhbXA7aXJjX2V4cF9wb2xpY3ksCiYjNDM7CQkJICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSwKLQkJCQkgIElSQ19QT1JULCBwb3J0c1tpXSwgaSwgJmFtcDtpcmNfZXhwX3BvbGljeSwKLQkJCQkgIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKLQl9Ci0KLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcigmYW1wO2lyY1swXSwgcG9ydHNfYywgaXJjX3B0cik7CiYjNDM7CXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmFtcDtpcmMsICZhbXA7aXJjX3B0cik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlrZnJlZShpcmNfYnVmZmVyKTsKQEAgLTMwNCw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaXJjX2Zpbmkodm9pZCkKIHsKLQluZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKGlyY19wdHIsIHBvcnRzX2MpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoaXJjX3B0cik7CiAJa2ZyZWUoaXJjX2J1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCA4OWQxY2Y3ZDY1MTJlNy4uY2FhMmIxMDFmYTllNWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgmZ3Q7CiAKICNkZWZpbmUgSEVMUEVSX05BTUUJJiMzNDtuZXRiaW9zLW5zJiMzNDsKLSNkZWZpbmUgTk1CRF9QT1JUCTEzNwogCiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGF0cmljayBNY0hhcmR5ICZsdDtrYWJlckB0cmFzaC5uZXQmZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyJiMzNDspOwpAQCAtNTQsNyAmIzQzOzUzLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKQogCWV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsIEhFTFBFUl9OQU1FLAotCQkJICBOTUJEX1BPUlQsIE5NQkRfUE9SVCwgTk1CRF9QT1JULAogCQkJICAmYW1wO2V4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJcmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmFtcDtoZWxwZXIsICZhbXA7aGVscGVyX3B0cik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jCmluZGV4IDQ5ZDE1MTFlOTkyMTg1Li5iNDA4NWFmM2FkMWNlMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMKQEAgLTMxLDggJiM0MzszMSw4IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCWlmICghaGVscGVyKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JaWYgKGhlbHBlci0mZ3Q7dHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDICZhbXA7JmFtcDsKLQkgICAgaGVscGVyLSZndDt0dXBsZS5zcmMubDNudW0gIT0gcHJvdG8pCiYjNDM7CWlmIChoZWxwZXItJmd0O25mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkgICAgaGVscGVyLSZndDtuZnByb3RvICE9IHByb3RvKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJc3dpdGNoIChwcm90bykgewpAQCAtNjAsNyAmIzQzOzYwLDcgQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCXJldHVybiBORl9EUk9QOwogCX0KIAotCWlmIChoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSAhPSBwcm90bykKJiM0MzsJaWYgKGhlbHBlci0mZ3Q7bDRwcm90byAhPSBwcm90bykKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCWhlbHBlcl9jYiA9IHJjdV9kZXJlZmVyZW5jZShoZWxwZXItJmd0O2hlbHApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCmluZGV4IDgwZmMxNGM4N2RkYzRiLi5jYmYzMmEzY2IxZjYxMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNTQwLDcgJiM0Mzs1NDAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpCiAJTkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyKSk7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3BwdHAsIEFGX0lORVQsIElQUFJPVE9fVENQLAotCQkJICAmIzM0O3BwdHAmIzM0OywgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULCBQUFRQX0NPTlRST0xfUE9SVCwKJiM0MzsJCQkgICYjMzQ7cHB0cCYjMzQ7LAogCQkJICAmYW1wO3BwdHBfZXhwX3BvbGljeSwgMCwgY29ubnRyYWNrX3BwdHBfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJcHB0cC5kZXN0cm95ID0gZ3JlX3BwdHBfZGVzdHJveV9zaWJsaW5nczsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYwppbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKQEAgLTM0LDExICYjNDM7MzQsNiBAQCBNT0RVTEVfQVVUSE9SKCYjMzQ7TWljaGFsIFNjaG1pZHQgJmx0O21zY2htaWR0QHJlZGhhdC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U0FORSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotCiBzdHJ1Y3Qgc2FuZV9yZXF1ZXN0IHsKIAlfX2JlMzIgUlBDX2NvZGU7CiAjZGVmaW5lIFNBTkVfTkVUX1NUQVJUICAgICAgNyAgIC8qIFJQQyBjb2RlICovCkBAIC0xNjksOCAmIzQzOzE2NCw4IEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNhbmUgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0gewogCS5tYXhfZXhwZWN0ZWQJPSAxLApAQCAtMTc5LDMyICYjNDM7MTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0gewogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NhbmVfZmluaSh2b2lkKQogewotCW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2FuZV9wdHIsIHBvcnRzX2MgKiAyKTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHNhbmVfcHRyKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zYW5lX21hc3RlcikpOwogCi0JaWYgKHBvcnRzX2MgPT0gMCkKLQkJcG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gU0FORV9QT1JUOwotCi0JLyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnMKLQkJIGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2FuZVsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2FuZVsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCwKJiM0MzsJCQkgIEhFTFBFUl9OQU1FLAomIzQzOwkJCSAgJmFtcDtzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsCiYjNDM7CQkJICBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzYW5lLCBwb3J0c19jICogMiwgc2FuZV9wdHIpOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbXA7c2FuZSwgJmFtcDtzYW5lX3B0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMzUsMTIgJiM0MzszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1NJUCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKIE1PRFVMRV9BTElBUygmIzM0O2lwX2Nvbm50cmFja19zaXAmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogCi0jZGVmaW5lIE1BWF9QT1JUUwk4Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgJiMzNDtwb3J0IG51bWJlcnMgb2YgU0lQIHNlcnZlcnMmIzM0Oyk7Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUOwogbW9kdWxlX3BhcmFtKHNpcF90aW1lb3V0LCB1aW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2lwX3RpbWVvdXQsICYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvbiYjMzQ7KTsKQEAgLTE3NjQsOCAmIzQzOzE3NTgsOCBAQCBzdGF0aWMgaW50IHNpcF9oZWxwX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIAlyZXR1cm4gcHJvY2Vzc19zaXBfbXNnKHNrYiwgY3QsIHByb3RvZmYsIGRhdGFvZmYsICZhbXA7ZHB0ciwgJmFtcDtkYXRhbGVuKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyW01BWF9QT1JUUyAqIDRdIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFsyXSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0clsyXSBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICYjNDM7IDFdID0gewogCVtTSVBfRVhQRUNUX1NJR05BTExJTkddID0gewpAQCAtMTc5MiwzOCAmIzQzOzE3ODYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzaXBfZXhwX3BvbGljeVtTSVBfRVhQRUNUX01BWCAmIzQzOyAxCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2lwX2Zpbmkodm9pZCkKIHsKLQluZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHNpcF9wdHIsIHBvcnRzX2MgKiA0KTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldDsKJiM0MzsJaW50IHJldDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zaXBfbWFzdGVyKSk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBTSVBfUE9SVDsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBwb3J0c19jOyBpJiM0MzsmIzQzOykgewotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFs0ICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLAotCQkJCSAgTlVMTCwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFs0ICogaSAmIzQzOyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsCi0JCQkJICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsCi0JCQkJICBOVUxMLCBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2lwWzQgKiBpICYjNDM7IDJdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsCi0JCQkJICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsCi0JCQkJICBOVUxMLCBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2lwWzQgKiBpICYjNDM7IDNdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsCi0JCQkJICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsCi0JCQkJICBOVUxMLCBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFswXSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLAomIzQzOwkJCSAgSEVMUEVSX05BTUUsCiYjNDM7CQkJICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCwKJiM0MzsJCQkgIE5VTEwsIFRISVNfTU9EVUxFKTsKJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtzaXBbMV0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCwKJiM0MzsJCQkgIEhFTFBFUl9OQU1FLAomIzQzOwkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsCiYjNDM7CQkJICBOVUxMLCBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzaXAsIHBvcnRzX2MgKiA0LCBzaXBfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCAyLCBzaXBfcHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jCmluZGV4IGI2ZmNlNTcwM2ZjZTc3Li4xMDk5ODZkNWQ1NWU2OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYwpAQCAtMTQsOCAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuaCZndDsKIAotI2RlZmluZSBTTk1QX1BPUlQJMTYxCi0KIE1PRFVMRV9BVVRIT1IoJiMzNDtKaXJpIE9sc2EgJmx0O2pvbHNhQHJlZGhhdC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U05NUCBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpAQCAtNTUsNyAmIzQzOzUzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NubXBfaW5pdCh2b2lkKQogCWV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7c25tcCYjMzQ7LCBTTk1QX1BPUlQsIFNOTVBfUE9SVCwgU05NUF9QT1JULAomIzQzOwkJCSAgJiMzNDtzbm1wJiMzNDssCiAJCQkgICZhbXA7ZXhwX3BvbGljeSwgMCwgc25tcF9jb25udHJhY2tfaGVscCwgTlVMTCwKIAkJCSAgVEhJU19NT0RVTEUpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMKaW5kZXggNDM5M2M0MzVhYTM1NDkuLmE2OTU1OWVkZjliMzYzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jCkBAIC0yNiwxMiAmIzQzOzI2LDYgQEAgTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfQUxJQVMoJiMzNDtpcF9jb25udHJhY2tfdGZ0cCYjMzQ7KTsKIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdOwotc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jOwotbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsICZhbXA7cG9ydHNfYywgMDQwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCAmIzM0O1BvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnMmIzM0Oyk7Ci0KIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF90ZnRwX2hvb2spOwogCkBAIC05NSw4ICYjNDM7ODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHAgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0gewogCS5tYXhfZXhwZWN0ZWQJPSAxLApAQCAtMTA1LDMwICYjNDM7OTksMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfdGZ0cF9maW5pKHZvaWQpCiB7Ci0JbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3Rlcih0ZnRwX3B0ciwgcG9ydHNfYyAqIDIpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIodGZ0cF9wdHIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldDsKJiM0MzsJaW50IHJldDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oMCk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBURlRQX1BPUlQ7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDt0ZnRwWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkJICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgICZhbXA7dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7dGZ0cFsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLAotCQkJCSAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksCi0JCQkJICAmYW1wO3RmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLAotCQkJCSAgVEhJU19NT0RVTEUpOwotCX0KJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDt0ZnRwLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKJiM0MzsJCQkgICZhbXA7dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsCiYjNDM7CQkJICBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3Rlcih0ZnRwLCBwb3J0c19jICogMiwgdGZ0cF9wdHIpOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbXA7dGZ0cCwgJmFtcDt0ZnRwX3B0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCYjNDM7MV0gPSB7Ci0JW05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sCiYjNDM7CVtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLAogCVtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCiB9OwogCkBAIC0yNTQsNyAmIzQzOzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLAogCWhlbHBlci0mZ3Q7ZGF0YV9sZW4gPSBzaXplOwogCiAJaGVscGVyLSZndDtmbGFncyB8PSBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0U7Ci0JbWVtY3B5KCZhbXA7aGVscGVyLSZndDt0dXBsZSwgdHVwbGUsIHNpemVvZihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlKSk7CiYjNDM7CWhlbHBlci0mZ3Q7bmZwcm90byA9IHR1cGxlLSZndDtzcmMubDNudW07CiYjNDM7CWhlbHBlci0mZ3Q7bDRwcm90byA9IHR1cGxlLSZndDtkc3QucHJvdG9udW07CiAKIAloZWxwZXItJmd0O21lID0gVEhJU19NT0RVTEU7CiAJaGVscGVyLSZndDtoZWxwID0gbmZubF91c2Vyc3BhY2VfY3RoZWxwZXI7CkBAIC00NDksOCAmIzQzOzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAkJaWYgKHN0cm5jbXAoY3VyLSZndDtuYW1lLCBoZWxwZXJfbmFtZSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7dHVwbGUuc3JjLmwzbnVtIHx8Ci0JCSAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJCWlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7bmZwcm90byB8fAomIzQzOwkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDtsNHByb3RvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpbmZvLSZndDtubGgtJmd0O25sbXNnX2ZsYWdzICZhbXA7IE5MTV9GX0VYQ0wpCkBAIC00NzksMTAgJiM0Mzs0ODAsMTAgQEAgbmZubF9jdGhlbHBlcl9kdW1wX3R1cGxlKHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJaWYgKG5sYV9wdXRfYmUxNihza2IsIE5GQ1RIX1RVUExFX0wzUFJPVE9OVU0sCi0JCQkgaHRvbnMoaGVscGVyLSZndDt0dXBsZS5zcmMubDNudW0pKSkKJiM0MzsJCQkgaHRvbnMoaGVscGVyLSZndDtuZnByb3RvKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JaWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSkpCiYjNDM7CWlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLSZndDtsNHByb3RvKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlubGFfbmVzdF9lbmQoc2tiLCBuZXN0X3Bhcm1zKTsKQEAgLTY2MSw4ICYjNDM7NjYyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQkJY29udGludWU7CiAKIAkJaWYgKHR1cGxlX3NldCAmYW1wOyZhbXA7Ci0JCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7dHVwbGUuc3JjLmwzbnVtIHx8Ci0JCSAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7bmZwcm90byB8fAomIzQzOwkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDtsNHByb3RvKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNrYjIgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKQEAgLTcyMSw4ICYjNDM7NzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQkJY29udGludWU7CiAKIAkJaWYgKHR1cGxlX3NldCAmYW1wOyZhbXA7Ci0JCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7dHVwbGUuc3JjLmwzbnVtIHx8Ci0JCSAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7bmZwcm90byB8fAomIzQzOwkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDtsNHByb3RvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWZvdW5kID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIENvbm50cmFjayBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBtZXNzaW5nIHdpdGggbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkmIzM5O3JlIGRlZmluZWQgYW5kIHJlZ2lzdGVyZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGVsaW1pbmF0aW5nIHRoZSBgdHVwbGVgIGZpZWxkIGluIGBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcmAgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGluZGl2aWR1YWwgcHJvdG9jb2wgaWRlbnRpZmllcnMgKGBuZnByb3RvYCBhbmQgYGw0cHJvdG9gKS4gIFRoZXkmIzM5O3ZlIGFsc28gY2hhbmdlZCBgbmZfY3RfaGVscGVyX2luaXRgIHRvIHRha2UgYW4gYHU4IGwzbnVtYCBpbnN0ZWFkIG9mIGB1MTYgbDNudW1gLCBhbmQgcmVtb3ZlZCBzb21lIG9mIHRoZSBub3cgb2Jzb2xldGUgaW5pdGlhbGlzZXJzLiBJdCBmZWVscyBsaWtlIHRoZXkmIzM5O3JlIHN0cmVhbWxpbmluZyB0aGUgaGVscGVyIHN0cnVjdHVyZS4KCk15IGluaXRpYWwgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHJlZmFjdG9yIHRvIGFsaWduIHdpdGggYSBtb3JlIHJ1bGUtYmFzZWQgaGVscGVyIGFzc2lnbm1lbnQsIGxpa2Ugd2hhdCB5b3UmIzM5O2Qgc2VlIHdpdGggbmZ0YWJsZXMgb3IgdGhlIGNvbm50cmFjayB0YXJnZXQgaW4gaXB0YWJsZXMuIFRoZSByZW1vdmFsIG9mIHBvcnQtYmFzZWQgbWF0Y2hpbmcgZnVydGhlciByZWluZm9yY2VzIHRoaXM7IGl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBzeXN0ZW0gaXMgbm8gbG9uZ2VyIHJlbHlpbmcgb24gYXV0b21hdGljIGhlbHBlciBzZWxlY3Rpb24gYnkgcG9ydCwgd2hpY2ggSSBzZWVtIHRvIHJlY2FsbCB3YXMgZGVwcmVjYXRlZCBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbnl3YXkuIFRoZSByZW1vdmFsIG9mIHRoZSB0dXBsZXMgYW5kIHBvcnQgYXJyYXlzIGZyb20gdGhlIGhlbHBlcnMgdGhlbXNlbHZlcyBjbGluY2hlcyB0aGF0IHBvaW50LgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBoZWxwZXIgbW9kdWxlcywgSSYjMzk7bSB0aGlua2luZyBhIHRob3JvdWdoIHJldmlldyBpcyBpbiBvcmRlci4gVGhlIGZpbGVzIG1vZGlmaWVkIGluY2x1ZGUgYm90aCBoZWFkZXIgZmlsZXMgYW5kIHRoZSBjb3JlIGhlbHBlciBsb2dpYywgcGx1cyBzcGVjaWZpYyBoZWxwZXIgaW1wbGVtZW50YXRpb25zIGxpa2UgRlRQLCBJUkMsIFNJUCwgYW5kIFRGVFAuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3RpbmcgZXZlcnl0aGluZywgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhbmQgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGhlbHBlciBvcHRpb25zLCBhcyB3ZWxsIGFzIGBDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGVgLCBhbmQgYG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyYC4gIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBOb3cgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2hlbHBlcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTg1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwMTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAyLVx0XHRcdCAgSEVMUEVSX05BTUUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDMtXHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwNDpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNS1cdFx0XHQgIEhFTFBFUl9OQU1FLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jPTU3MT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYy01NzgtXHRcdCBhcmUgdHJhY2tlZCBvciBub3QgLSBZSyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM6NTc5Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2ZnRwLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYy01ODAtXHRcdFx0ICBIRUxQRVJfTkFNRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcxNTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTYtXHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE3LVx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzE4Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTktXHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzIwLVx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzIxOlx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyMi1cdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyMy1cdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI0Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjUtXHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjYtXHRcdFx0ICBcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcyNzpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyOC1cdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTQ3MT1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDcyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDczOnZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ3NC1cdFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTAzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUwNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MDUtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM9MjU2PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jLTI3OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jOjI4MDpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmlyYywgQUZfSU5FVCwgSVBQUk9UT19UQ1AsIEhFTFBFUl9OQU1FLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjgxLVx0XHRcdCAgXHUwMDI2aXJjX2V4cF9wb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMtNTQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmM6NTU6XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01Ni1cdFx0XHQgIFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYz01Mzg9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy01NDEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM6NTQyOlx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTQzLVx0XHRcdCAgXCYjMzQ7cHB0cFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9MTgwPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTg1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jOjE4NjpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYy0xODctXHRcdFx0ICBIRUxQRVJfTkFNRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz0xNzkyPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE3OTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzoxNzk4Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzBdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNzk5LVx0XHRcdCAgSEVMUEVSX05BTUUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTgwMS1cdFx0XHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjE4MDI6XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMV0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE4MDMtXHRcdFx0ICBIRUxQRVJfTkFNRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM9NTE9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NubXBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYzo1NTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMtNTYtXHRcdFx0ICBcJiMzNDtzbm1wXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYz0xMDU9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM6MTExOlx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTExMi1cdFx0XHQgIEhFTFBFUl9OQU1FLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgSGVscGVyIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCB0aGUgYG5mX2N0X2hlbHBlcl9pbml0YCBmdW5jdGlvbiBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgbG93LWxldmVsIGNoYW5nZXMgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgYXJlYSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogaXQmIzM5O3MgYmVlbiBhbHRlcmVkIGFuZCB3aGF0IHRoYXQgc2lnbmlmaWVzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHpvb20gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5LiBJdOKAmXMgcHJldHR5IGNsZWFyIHRoYXQgaXTigJlzIGFsdGVyaW5nIHdoYXQgaGFwcGVucyB3aGVuIHdlIHJlZ2lzdGVyIHRob3NlIGhlbHBlcnMsIGFuZCBsb29raW5nIGF0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyB3aWxsIG1ha2UgaXQgY2xlYXIgZXhhY3RseSBob3cgdGhleSYjMzk7cmUgYmVpbmcgY2hhbmdlZC4gSSB3aWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBkZXRhaWwsIHNvIGl0JiMzOTtzIGJlc3QgdG8gaGF2ZSBib3RoIGluIG1pbmQgYXQgdGhlIHNhbWUgdGltZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQmIzM5O3MgZGlmZmVyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYz01NzE9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2Z0cF9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTgzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM6NTg0Olx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZmdHAsIFx1MDAyNmZ0cF9wdHIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzMxOlx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMyLVx0XHRcdFx0XHQgICBcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zNjY9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNjg6aW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwNi19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQwOTppbnQgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTAtXHRcdFx0XHQgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKipoZWxwZXJfcHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQyMjpcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMy1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDMzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz01MDY9aW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTIyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTIzOlx0XHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MjQtXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYz0yNTY9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjgzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM6Mjg0Olx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZpcmMsIFx1MDAyNmlyY19wdHIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjg1LVx0aWYgKHJldCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYz00OT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbmV0Ymlvc19uc19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jLTU3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jOjU4Olx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2aGVscGVyLCBcdTAwMjZoZWxwZXJfcHRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01OS19XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jPTUzOD1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTU0OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzo1NTA6XHRyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZwcHRwLCBcdTAwMjZwcHRwX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTUxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9MTgwPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTkwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jOjE5MTpcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c2FuZSwgXHUwMDI2c2FuZV9wdHIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE5Mi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM9NTE9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NubXBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYzo2MDpcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmhlbHBlciwgXHUwMDI2aGVscGVyX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMtNjEtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYz0xMDU9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM6MTE2Olx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZ0ZnRwLCBcdTAwMjZ0ZnRwX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMtMTE3LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MjIwPW5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgxLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyODI6XHRyZXQgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgzLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNoYW5nZXMuCgoqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmZfY3RfaGVscGVyX2luaXRgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYW5kIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBzbyB1bmRlcnN0YW5kaW5nIGFueSBtb2RpZmljYXRpb25zIHRoZXJlIGlzIGtleSB0byBncmFzcGluZyB0aGUgY29yZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gY2hhbmdlZCBpbiB0aGF0IGZ1bmN0aW9uOyBpdCB3aWxsIGxpa2VseSBnaXZlIHRoZSBiZXN0IG92ZXJ2aWV3IG9mIGhvdyBjb25udHJhY2sgaGVscGVyIGJlaGF2aW9yIGhhcyBiZWVuIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTU9c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTY6X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy03NS19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo3NjpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy03Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz03OT1uZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtODQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo4NTpcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtODYtI2lmZGVmIENPTkZJR19NT0RVTEVTXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtOTAtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6OTE6XHRcdFx0aCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKG5hbWUsIGwzbnVtLCBwcm90b251bSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy05Mi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xMzQ9bmZfbmF0X2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE0MS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE0MjpcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTQzLVx0aWYgKCFoKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE5MjY9c3RhdGljIGludCBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5NTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTk1NjpcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTk1Ny1cdFx0XHRcdFx0ICAgIG5mX2N0X3Byb3RvbnVtKGN0KSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTIyMjI9Y3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjUwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjIyNTE6XHRcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI1Mi1cdFx0XHRcdFx0XHQgICAgbmZfY3RfcHJvdG9udW0oY3QpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI2MS1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjI2MjpcdFx0XHRoZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChoZWxwbmFtZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjYzLVx0XHRcdFx0XHRcdFx0ICAgIG5mX2N0X2wzbnVtKGN0KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4MC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODgxOlx0XHRhc3NpZ25faGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Mi1cdFx0XHRcdFx0XHRcdCAgIG5mX2N0X2wzbnVtKGN0KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29ubnRyYWNrIEhlbHBlciBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgdG91Y2hpbmcgb24gdGhlIGZ1bmN0aW9uYWwgYXNwZWN0cyBhbmQgc2hvdWxkIGJlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB3aXRoIHRob3NlIGBuZm5ldGxpbmtfY3RoZWxwZXJgIGFuZCBgY3RuZXRsaW5rYCBpbnRlcmZhY2VzLiBBbmQgb2YgY291cnNlLCB0aGUgbG9hZGluZyBvZiB0aGUgY29ubnRyYWNrIGhlbHBlciBtb2R1bGVzIHdpbGwgYmUga2V5LgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRob3NlIGNvcmUgZnVuY3Rpb25zOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGFzIHdlbGwgYXMgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIG9wZXJhdGlvbnM6IGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGFuZCBgbmZubF9jdGhlbHBlcl9kZWxgLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGlzIGhlbHBlciBzeXN0ZW0uCgpBbmQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zOiBgTkZfQ09OTlRSQUNLYCwgbmF0dXJhbGx5LCBhbmQgYE5GX0NUX05FVExJTktfSEVMUEVSYCB3aGljaCBJIHN1c3BlY3QgaXMgdGhlIGNvbmZpZyByZXF1aXJlZCBmb3IgbmV0bGluaywgYW5kIHRoZW4gYWxsIHRob3NlIGhlbHBlci1zcGVjaWZpYyBvcHRpb25zIGZvciBwcm90b2NvbHMgc3VjaCBhcyBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBhbmQgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLgoKV2FpdCBhIG1pbnV0ZSwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGlzIHZlcnkgbGlrZWx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVkIHRvIGBuZm5ldGxpbmtfY3RoZWxwZXIuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZyBvcHRpb24gdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5ldGxpbmtfY3RoZWxwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBqdW1wIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZmlsZSBmb3IgdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0sIGFuZCB0aGUgcGxhY2Ugd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBJIG5lZWQgdG8gZXhhbWluZS4gSSYjMzk7bGwgc3RhcnQgaGVyZSwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIG9mdGVuIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgdG8gbG9vayBmb3IgZGVlcGVyIGNvZGUgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19jdGhlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM5Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIE5ldGZpbHRlciBjb25maWd1cmF0aW9ucy4gWWVzLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLgoKTm93LCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGNvbmNlcm5pbmcgY29ubmVjdGlvbiB0cmFja2luZywgYXMgdGhlc2UgYXJlIG9mdGVuIGludGVyY29ubmVjdGVkLiBSaWdodCwgaGVyZSB3ZSBnbzogYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1RGVFBgLCBgTkZfQ09OTlRSQUNLX1NOTVBgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBhbmQgZmluYWxseSwgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2Ugc2V0dGluZ3MsIGFuZCB0aGVpciByZXNwZWN0aXZlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGlzIHdpbGwgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2Z0cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgJiM0Mzs9IG5mX2Nvbm50cmFja19hbWFuZGEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19mdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICYjNDM7PSBuZl9jb25udHJhY2tfaDMyMy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhlIGBORl9DT05OVFJBQ0tgIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgbGlzdDogYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19URlRQYCwgYE5GX0NPTk5UUkFDS19TTk1QYCwgYW5kIGZpbmFsbHksIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYC4gUmlnaHQsIGdvdCBpdC4KCkhtbSwgd2FpdCBhIHNlY29uZC4gVGhhdCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgZW50cnkgZmVlbHMgb3V0IG9mIHBsYWNlIGluIHRoYXQgbGlzdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0JiMzOTtzIG9mdGVuIGltcGxpY2l0bHkgYWN0aXZhdGVkIHdoZW4gZWl0aGVyIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2Agb3IgYE5GX0NPTk5UUkFDS19TTk1QYCBpcyBlbmFibGVkLCBhbmQgdHlwaWNhbGx5IHNob3VsZG4mIzM5O3QgYmUgbGlzdGVkIGluZGVwZW5kZW50bHkuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19CUk9BRENBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTI1OD1jb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mjc3PWNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzk6XHRzZWxlY3QgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI4MC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mjk2PWNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTgtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5OTpcdHNlbGVjdCBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzAwLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlN0cmVhbWxpbmluZyB0aGUgTmV0ZmlsdGVyIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIGl0IHNlZW1zIHVubmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkgZW51bWVyYXRlIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYC4gSSBjYW4gaW5mZXIgdGhhdCBiYXNlZCBvbiB0aGUgY29udGV4dCwgc28gdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgdGhhdCBvdmVyaGVhZC4gTGV0JiMzOTtzIG1vdmUgb24gYW5kIGVuc3VyZSB3ZSYjMzk7cmUgdGhvcm91Z2guIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGUgdXNhZ2UgYW5kIGNvbnRleHQgb2YgYE5GX0NPTk5UUkFDS19TTk1QYCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGVgIGZpbGUuIENoZWNraW5nIHRoYXQgTWFrZWZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfbmF0X3NubXBfYmFzaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19ORl9OQVRfUFBUUCkgJiM0Mzs9IG5mX25hdF9wcHRwLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0xOC1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxOTpuZl9uYXRfc25tcF9iYXNpYy15IDo9IG5mX25hdF9zbm1wX2Jhc2ljLmFzbjEubyBuZl9uYXRfc25tcF9iYXNpY19tYWluLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyMDokKG9iaikvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vOiAkKG9iaikvbmZfbmF0X3NubXBfYmFzaWMuYXNuMS5oXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05GX05BVF9TTk1QX0JBU0lDKSAmIzQzOz0gbmZfbmF0X3NubXBfYmFzaWMub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTTk1QIE5BVCBNb2R1bGUqKgoKUmlnaHQsIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5mX25hdF9zbm1wX2Jhc2ljX21haW4uY2AuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCB0aGUgYmFzaWMgU05NUCBOQVQgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBjb21waWxlZCBjb25kaXRpb25hbGx5IHVuZGVyIGBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGUgb2JqZWN0IGZpbGUuIFdoZXJlIGRvZXMgYG5mX2Nvbm50cmFja19zbm1wLm9gIGxpdmU/IEl0JiMzOTtzIGxpa2VseSBidWlsdCBhcyBwYXJ0IG9mIHRoZSBtYWluIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGF0JiMzOTtsbCBjb25maXJtIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBsaW5raW5nIGlzc3Vlcy4gSXQmIzM5O3MgZ29vZCB0byBrZWVwIHRyYWNrIG9mIHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX3NubXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDk9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGJpb3NfbnMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICYjNDM7PSBuZl9jb25udHJhY2tfc25tcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTUxLW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19wcHRwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3R1ZmYsIHNwZWNpZmljYWxseSB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSBkb3duIHRvIGBORl9OQVRfU05NUF9CQVNJQ2AuIENsZWFybHksIHRoZXNlIGFsbCByZWxhdGUgdG8gZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIHZhcmlvdXMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLiBJIHNlZSBhIGJyb2FkIGFycmF5LCBpbmNsdWRpbmcgcHJvdG9jb2xzIGxpa2UgRlRQLCBILjMyMywgSVJDLCBhbmQgZXZlbiBTTk1QLiBHb29kLCBJIGxpa2UgdGhhdCB0aGUgbW9kdWxlcyBhcmUgc2VwYXJhdGVkIGJ5IHNwZWNpZmljIG5lZWRzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaGVscGVyIG1hbmFnZW1lbnQ6IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYW5kIGBuZm5sX2N0aGVscGVyX2RlbGAuIFRoZXNlIGNsZWFybHkgZGVhbCB3aXRoIHJlZ2lzdGVyaW5nLCB1bnJlZ2lzdGVyaW5nLCBmaW5kaW5nLCBhbmQgbWFuYWdpbmcgdGhlIGhlbHBlciBtb2R1bGVzIHRoZW1zZWx2ZXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgYG5mbmxfKmAgZnVuY3Rpb25zIGluZGljYXRlIHRoZSB1c2Ugb2YgTmV0bGluayBmb3IgY29tbXVuaWNhdGlvbi4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbmZuZXRsaW5rX2N0aGVscGVyLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIHRoYXQmIzM5O3MgYmVlbiB0b3VjaGVkIGluIHRoYXQgZmlsZS4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBmaWxlIGl0c2VsZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlbiYjMzk7dCBpbmNsdWRlZCBpbiB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggY291bGQgcmV2ZWFsIGltcG9ydGFudCBjb250ZXh0IHRoYXQgbWlnaHQgZ2V0IG1pc3NlZCBpZiBJIG9ubHkgbG9va2VkIGF0IHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9jdGhlbHBlcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzM9c3RydWN0IG5mbmxfY3RoZWxwZXIge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzctXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjM4OnN0YXRpYyBMSVNUX0hFQUQobmZubF9jdGhlbHBlcl9saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzktXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00MT1uZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY4LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYJiM0MzsxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzAtXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzU6bmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtODEtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1RVUExFX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6ODI6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl90dXBsZV9wb2wsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy04My1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz05OD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjk5Om5mbmxfY3RoZWxwZXJfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xMDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTE4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTE5Om5mbmxfY3RoZWxwZXJfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTIwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEzNy1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xbTkZDVEhfUE9MSUNZX01BWCYjNDM7MV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEzOS1cdFtORkNUSF9QT0xJQ1lfTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xNDU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNDY6bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTQ3LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTUyLVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfTUFYLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNTM6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9sLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTU0LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc2Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgmIzQzOzFdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzctXHRbTkZDVEhfUE9MSUNZX1NFVF9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxODE6bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE4Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE4OC1cdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfUE9MSUNZX1NFVF9NQVgsIGF0dHIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE4OTpcdFx0XHRcdFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xOTAtXHRcdFx0XHRcdCAgTlVMTCk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDYtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjIwNzpcdFx0cmV0ID0gbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDgtXHRcdFx0XHRcdFx0ICB0YltORkNUSF9QT0xJQ1lfU0VUJiM0MztpXSk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yMTk9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMjA6bmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIyMS1cdFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjQzOlx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KGhlbHBlciwgdGJbTkZDVEhfUE9MSUNZXSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yNjEtXHRoZWxwZXItXHUwMDNlaGVscCA9IG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyNjI6XHRoZWxwZXItXHUwMDNlZnJvbV9ubGF0dHIgPSBuZm5sX2N0aGVscGVyX2Zyb21fbmxhdHRyO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyNjM6XHRoZWxwZXItXHUwMDNldG9fbmxhdHRyID0gbmZubF9jdGhlbHBlcl90b19ubGF0dHI7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI2NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI4NS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mjg2Olx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZmN0aC1cdTAwM2VsaXN0LCBcdTAwMjZuZm5sX2N0aGVscGVyX2xpc3QpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODctXHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTI5NT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI5NjpuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcG9saWN5LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yOTctXHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMDMtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9NQVgsIGF0dHIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjMwNDpcdFx0XHRcdFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMDUtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzI2LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyOC1cdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM0Ny1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzQ4Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNDktXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bmV3X3BvbGljeVtpXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzY3OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2OC1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzc0LVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfU0VUX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc1Olx0XHRcdFx0XHQgIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ni1cdFx0XHRcdFx0ICBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM4Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzg3Olx0cmV0dXJuIG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwodGIsIGhlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM4OC19XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0zOTA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozOTE6bmZubF9jdGhlbHBlcl91cGRhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM5Mi1cdFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDAzLVx0aWYgKHRiW05GQ1RIX1BPTElDWV0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDA0Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3koaGVscGVyLCB0YltORkNUSF9QT0xJQ1ldKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDA1LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI1LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjctXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDQzOlx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShcdTAwMjZ0dXBsZSwgdGJbTkZDVEhfVFVQTEVdKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQ0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDQ3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShubGN0aCwgXHUwMDI2bmZubF9jdGhlbHBlcl9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ0OC1cdFx0Y3VyID0gbmxjdGgtXHUwMDNlaGVscGVyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDY0LVx0aWYgKGhlbHBlciA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0NjU6XHRcdHJldCA9IG5mbmxfY3RoZWxwZXJfY3JlYXRlKHRiLCBcdTAwMjZ0dXBsZSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ2Ni1cdGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDY3Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZSh0YiwgaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDY4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9NDcyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDczOm5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00NzQtXHRcdFx0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00OTY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0OTc6bmZubF9jdGhlbHBlcl9kdW1wX3BvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00OTgtXHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTUzNz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjUzODpuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCB1MzIgdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTM5LVx0XHRcdGludCBldmVudCwgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTU3Olx0aWYgKG5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShza2IsIGhlbHBlcikgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTYwOlx0aWYgKG5mbmxfY3RoZWxwZXJfZHVtcF9wb2xpY3koc2tiLCBoZWxwZXIpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy01NjEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9NTgzPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTg0Om5mbmxfY3RoZWxwZXJfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU4NS17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MDYtXHRcdFx0fVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2MDc6XHRcdFx0aWYgKG5mbmxfY3RoZWxwZXJfZmlsbF9pbmZvKHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjA4LVx0XHRcdFx0XHQgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTYyNS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjI2OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjI3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NDEtXHRcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2NDI6XHRcdFx0LmR1bXAgPSBuZm5sX2N0aGVscGVyX2R1bXBfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY0My1cdFx0fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY1MC1cdGlmICh0YltORkNUSF9UVVBMRV0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjUxOlx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3BhcnNlX3R1cGxlKFx1MDAyNnR1cGxlLCB0YltORkNUSF9UVVBMRV0pO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTItXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTctXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjY1ODpcdGxpc3RfZm9yX2VhY2hfZW50cnkobmxjdGgsIFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTktXHRcdGN1ciA9IG5sY3RoLVx1MDAzZWhlbHBlcjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY3NC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Njc1Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhza2IyLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NzYtXHRcdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY5MC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjkxOnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjkyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MDctXHRpZiAodGJbTkZDVEhfVFVQTEVdKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjcwODpcdFx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShcdTAwMjZ0dXBsZSwgdGJbTkZDVEhfVFVQTEVdKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzA5LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzE1LVx0cmV0ID0gLUVOT0VOVDtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzE2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5sY3RoLCBuLCBcdTAwMjZuZm5sX2N0aGVscGVyX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzE3LVx0XHRjdXIgPSBubGN0aC1cdTAwM2VoZWxwZXI7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MzktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc0MDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl9wb2xpY3lbTkZDVEhfTUFYJiM0MzsxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQxLVx0W05GQ1RIX05BTUVdID0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mbmxfY3RoZWxwZXJfY2JbTkZOTF9NU0dfQ1RIRUxQRVJfTUFYXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ5LVx0W05GTkxfTVNHX0NUSEVMUEVSX05FV11cdD0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTA6XHRcdC5jYWxsXHRcdD0gbmZubF9jdGhlbHBlcl9uZXcsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc1MS1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX01VVEVYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTItXHRcdC5hdHRyX2NvdW50XHQ9IE5GQ1RIX01BWCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzUzOlx0XHQucG9saWN5XHRcdD0gbmZubF9jdGhlbHBlcl9wb2xpY3lcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU0LVx0fSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU1LVx0W05GTkxfTVNHX0NUSEVMUEVSX0dFVF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1NjpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX2dldCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU3LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc1OC1cdFx0LmF0dHJfY291bnRcdD0gTkZDVEhfTUFYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTk6XHRcdC5wb2xpY3lcdFx0PSBuZm5sX2N0aGVscGVyX3BvbGljeVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjAtXHR9LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjEtXHRbTkZOTF9NU0dfQ1RIRUxQRVJfREVMXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc2MjpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX2RlbCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYzLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc2NC1cdFx0LmF0dHJfY291bnRcdD0gTkZDVEhfTUFYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NjU6XHRcdC5wb2xpY3lcdFx0PSBuZm5sX2N0aGVscGVyX3BvbGljeVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjYtXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzY4LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5mbmxfY3RoZWxwZXJfc3Vic3lzID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NzAtXHQubmFtZVx0XHRcdFx0PSBcJiMzNDtjdGhlbHBlclwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc3Mi1cdC5jYl9jb3VudFx0XHRcdD0gTkZOTF9NU0dfQ1RIRUxQRVJfTUFYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NzM6XHQuY2JcdFx0XHRcdD0gbmZubF9jdGhlbHBlcl9jYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc0LX07XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz03NzY9TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0NUSEVMUEVSKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3Nzg6c3RhdGljIGludCBfX2luaXQgbmZubF9jdGhlbHBlcl9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc3OS17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03ODEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc4MjpcdHJldCA9IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoXHUwMDI2bmZubF9jdGhlbHBlcl9zdWJzeXMpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03ODMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03OTEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc5MjpzdGF0aWMgdm9pZCBfX2V4aXQgbmZubF9jdGhlbHBlcl9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc5My17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03OTYtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc5NzpcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZuZm5sX2N0aGVscGVyX3N1YnN5cyk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc5OC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzk5Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5sY3RoLCBuLCBcdTAwMjZuZm5sX2N0aGVscGVyX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtODAwLVx0XHRjdXIgPSBubGN0aC1cdTAwM2VoZWxwZXI7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy04MDYtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjgwNzptb2R1bGVfaW5pdChuZm5sX2N0aGVscGVyX2luaXQpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo4MDg6bW9kdWxlX2V4aXQobmZubF9jdGhlbHBlcl9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQ29ubnRyYWNrIEhlbHBlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oZWxwZXIuY2AgZmlsZS4gVGhlIGNvcmUgb25lcyB0byBmb2N1cyBvbiBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uIGFyZTogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBhbmQgYG5mbmxfY3RoZWxwZXJfZGVsYC4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgcmVnaXN0cmF0aW9uLCBsb29rdXAsIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gbWVjaGFuaXNtcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgc3dlZXAgb2YgdGhhdCBmaWxlLiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBmdW5jdGlvbiB0aGF0IHdhcyB0b3VjaGVkIGR1cmluZyB0aGUgY2hhbmdlcy4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oZWxwZXIuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgYGhlbHBlcl9oYXNoYCBpbiBgbmZfY29ubnRyYWNrX2hlbHBlci5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29ubnRyYWNrIGhlbHBlciBpc3N1ZS4uLiBXaGVyZSBzaG91bGQgSSBzdGFydCBteSBpbnZlc3RpZ2F0aW9uPyBUaGUga2VybmVsJiMzOTtzIGNvbm50cmFjayBoZWxwZXIgaW1wbGVtZW50YXRpb24gaXMgY29tcGxleC4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCByZXZpZXcgc3VnZ2VzdHMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0byBpbnZvbHZlIHRoZSBoZWxwZXIgaGFzaCB0YWJsZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIHN0b3JlcyB0aGVzZSBoZWxwZXJzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgYW5kIHNwZWNpZmljYWxseSBncmVwIGZvciBgaGVscGVyX2hhc2hgLiBJdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgY29kZSB0aGF0IG1hbmFnZXMgdGhlIGhlbHBlciYjMzk7cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaW4gdGhhdCBtb2R1bGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCBpbml0aWFsIGNvbnRleHQgSSBuZWVkIHRvIHB1cnN1ZSB0aGlzIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGVscGVyX2hhc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zMz1zdGF0aWMgREVGSU5FX01VVEVYKG5mX2N0X2hlbHBlcl9tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNDpzdHJ1Y3QgaGxpc3RfaGVhZCAqbmZfY3RfaGVscGVyX2hhc2ggX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9oYXNoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2LXVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfaHNpemUgX19yZWFkX21vc3RseTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MT1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MzpzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTU2PV9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo2MTpcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02Mi1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjY0Olx0aSA9IGhlbHBlcl9oYXNoKG5hbWUsIHByb3RvbnVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTY1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NjY6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02Ny1cdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTM2OD1pbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNzYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNzc6XHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzc4LVx0XHRyZXR1cm4gLUVOT0VOVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zODctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozODg6XHRoID0gaGVscGVyX2hhc2gobWUtXHUwMDNlbmFtZSwgbWUtXHUwMDNlbDRwcm90byk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zODktXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozOTA6XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzkxLVx0XHRpZiAoIXN0cmNtcChjdXItXHUwMDNlbmFtZSwgbWUtXHUwMDNlbmFtZSkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDAwLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lLVx1MDAzZWN0X3JlZmNudCwgMSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDE6XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2bWUtXHUwMDNlaG5vZGUsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwMi1cdG5mX2N0X2hlbHBlcl9jb3VudCYjNDM7JiM0Mzs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTY2PWludCBuZl9jb25udHJhY2tfaGVscGVyX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01NjgtXHRuZl9jdF9oZWxwZXJfaHNpemUgPSAxOyAvKiBnZXRzIHJvdW5kZWQgdXAgdG8gdXNlIG9uZSBwYWdlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1Njk6XHRuZl9jdF9oZWxwZXJfaGFzaCA9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01NzAtXHRcdG5mX2N0X2FsbG9jX2hhc2h0YWJsZShcdTAwMjZuZl9jdF9oZWxwZXJfaHNpemUsIDApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTcxOlx0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3Mi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTc4PXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9maW5pKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01Nzkte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTgwOlx0a3ZmcmVlKG5mX2N0X2hlbHBlcl9oYXNoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjU4MTpcdG5mX2N0X2hlbHBlcl9oYXNoID0gTlVMTDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU4Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBJbmZyYXN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IgdW5kZXJ3YXkuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYWRvcHRpb24gb2YgYGpoYXNoYCB3aXRoaW4gdGhlIGBoZWxwZXJfaGFzaGAgZnVuY3Rpb24sIHdoaWNoIHJlcGxhY2VzIHRoZSBzaW1wbGVyIGJpdHdpc2Ugb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBnb29kIHRvIHNlZS4KCkJleW9uZCB0aGUgaGFzaGluZywgdGhlIHNpZ25hdHVyZSBvZiB0aGUgYG5mX2N0X2hlbHBlcl9pbml0YCBmdW5jdGlvbiBoYXMgYWxzbyBiZWVuIHR3ZWFrZWQuIEFuZCB0aGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIGNvcmUgaGVscGVyIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2VzIHRvIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBuZXcgaGFzaCBmdW5jdGlvbiBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbmZwcm90b2AgYW5kIGBsNHByb3RvYCBmaWVsZHMgYXJlIGJlaW5nIGludGVncmF0ZWQgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGltcGFjdCBvdmVyYWxsIHBlcmZvcm1hbmNlLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYG5mbmV0bGlua19jdGhlbHBlci5jYCBmaWxlLiBUaGUgY2hhbmdlcyB0aGVyZSwgd2l0aGluIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGFuZCBgbmZubF9jdGhlbHBlcl9jcmVhdGVgLCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmaWVsZHMgdG9vLCBpbmRpY2F0aW5nIHRoYXQgdGhleeKAmXJlIGJlaW5nIGhhcm1vbml6ZWQgd2l0aCB0aGUgdXBkYXRlZCBoZWxwZXIgbW9kZWwsIHdoaWNoIGlzIG5lY2Vzc2FyeS4gSSBleHBlY3Qgc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvciBidWcgZml4ZXMgaGVyZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIGltcGFjdGVkLiBPa2F5LCBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCB0aGVuIHRoZSBtb3JlIHNwZWNpZmljIGhlbHBlcnM6IGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19URlRQYCwgYE5GX0NPTk5UUkFDS19TTk1QYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyBgTkZfTkFUX1NOTVBfQkFTSUNgIGludGVyYWN0cyB3aXRoIGFsbCBvZiB0aGlzLiBBaCwgYW5kIGl0JiMzOTtzIGZvciBgbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jYCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWZmZWN0ZWQgaGVyZS4gQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBieSBsb29raW5nIGF0IHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE9rYXksIGdvb2QuIFRoYXQgc2hvdWxkIGJlIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mzg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKQWxyaWdodCwgY29uZmlybWluZyB0aGF0IGBORl9OQVRfU05NUF9CQVNJQ2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZsYWcgdG8gYmUgZm9jdXNpbmcgb24uIEdpdmVuIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0byBmaWxlcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY2AsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBjb25uZWN0aW9uIHRyYWNraW5nIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQga2VybmVsIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZXhhY3QgZmlsZW5hbWUuIEl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYW4gYG9wZW52c3dpdGNoYCBtb2R1bGUsIHNvIEkgc2hvdWxkIGNoYW5nZSBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19vdnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0PW5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTKSAmIzQzOz0gbmZfY29ubnRyYWNrX292cy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2LW5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DVF9QUk9UT19TQ1RQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDc2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfTkZfQ09OTlRSQUNLX09WU2Agb3B0aW9uLi4uIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyB0aGF0JiMzOTtzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIE5ldGZpbHRlci1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIGl0cyByZWxldmFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19PVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTE4OD1jb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA0MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYSBCb29sZWFuIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYm9vbGVhbiBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIHRoaW5nLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGV2YWx1YXRlZCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgaWYgaXQmIzM5O3MgdG9nZ2xlZC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHF1aWNrbHkgaWRlbnRpZnlpbmcgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRvd25zdHJlYW0gaW1wbGljYXRpb25zLiBJJiMzOTttIGVzc2VudGlhbGx5IHRyYWNpbmcgaXRzIHVzYWdlIOKAkyB3aGljaCBtb2R1bGVzLCBmdW5jdGlvbnMsIG9yIGV2ZW4gb3RoZXIgY29uZmlncyByZWZlcmVuY2Ugb3IgZGVwZW5kIG9uIGl0cyBzdGF0ZT8gSXMgaXQganVzdCBhIHNpbXBsZSBmbGFnLCBvciBkb2VzIGl0cyB2YWx1ZSBkaXJlY3RseSBpbmZsdWVuY2UgY3JpdGljYWwgY2FsY3VsYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIG5vdCBiZSBqdXN0IGEgc2ltcGxlIHNpbmdsZSBsaW5lIG9mIHVzYWdlLiBTbyBJJiMzOTtsbCBnbyB0aHJvdWdoIGFuZCBjaGVjayB0aGlzIGl0ZW0gZm9yIGFsbCByZWZlcmVuY2VzIHRvIHRoZSB2YWx1ZSB0aGlzIGNvbmZpZyByZXByZXNlbnRzIGFuZCB1bmRlcnN0YW5kIHRoZSB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWc9Nj1jb25maWcgT1BFTlZTV0lUQ0hcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xOC1cdHNlbGVjdCBORVRfTlNIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzoxOTpcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xubmV0L29wZW52c3dpdGNoL0tjb25maWctMjAtXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MTktXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbm5ldC9zY2hlZC9LY29uZmlnOjkyMDpcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvc2NoZWQvS2NvbmZpZy05MjEtXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0OTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZXkgcmVsYXRlIHRvIE9wZW4gdlN3aXRjaC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAgc2VlbSBsaWtlIHRoZSBrZXkgZHJpdmVycyBoZXJlLCBhbmQgZW5hYmxpbmcgdGhlbSBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwganVzdCBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjb25maWdzIHRoZW1zZWx2ZXM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBhbmQgdGhlIHZhcmlvdXMgYXBwbGljYXRpb24tc3BlY2lmaWMgaGVscGVyczogYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0ZUUGAsIGV0Yy4gUmlnaHQgbm93IGl0JiMzOTtzIGp1c3QgYSByYXcgbGlzdC4KCldhaXQgYSBzZWNvbmTigKYgYE5GX0NPTk5UUkFDS19PVlNgIGlzIGEgYm9vbGVhbi4gSWYgSSBlbmFibGUgYE9QRU5WU1dJVENIYCBhbmQgYE5FVF9BQ1RfQ1RgLCB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBgTkZfQ09OTlRSQUNLX09WU2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLCBhcyBpdCByZWR1Y2VzIHRoZSBjb21wbGV4aXR5IG9mIGV4cGxpY2l0bHkgbWFuYWdpbmcgdGhhdCBjb25maWcgc2VwYXJhdGVseS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlncy4gQWhhISBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgIGFuZCBgTkZfQ09OTlRSQUNLX1NOTVBgLiBJbnRlcmVzdGluZy4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgaGVscGVyIGZ1bmN0aW9uczogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAsIGFuZCBgbmZfY3RfaGVscGVyX2luaXRgLgoKQWgsIGhlcmUmIzM5O3MgYSBnb29kIG9uZTogYG5mX2N0X2hlbHBlcl9pbml0YC4gSXQgc2VlbXMgbGlrZSAqYWxsKiB0aGUgaGVscGVyIG1vZHVsZXMgYXJlIGNhbGxpbmcgdGhpcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoYXTigJlzIGEga2V5IGludGVncmF0aW9uIHBvaW50LgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgYGhlbHBlcl9oYXNoYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCBkaXJlY3RseSB1c2UgaXQgYXMgYSBzeW1ib2wgdG8gYW5hbHl6ZSB0aGUgY29kZS4gSG93ZXZlciwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBzbyB0aG9zZSBhcmUgc3RpbGwgZ29vZCBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKV2FpdCwgdGhlcmUgaXMgYWxzbyBgbmZfY3RfaGVscGVyYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTExLS8qICYjMzk7c2tiJiMzOTsgc2hvdWxkIGFscmVhZHkgYmUgcHVsbGVkIHRvIG5oX29mcy4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjEyOmludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtMTMtXHRcdCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywgdTE2IHByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTgyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjgzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy04NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jPTg1PWludCBuZl9jdF9hZGRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqbmFtZSwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTk1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM6OTY6XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtOTctXHRpZiAoIWhlbHApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4ODMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBgbmZfY3RfaGVscGVyYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbmZfY3RfaGVscGVyYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kLCBjcnVjaWFsbHksICptb2RpZmllZCouIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSB3YXkgaXQgd29ya3MsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgY2hlY2tpbmcgYGhlbHBlci0mZ3Q7bmZwcm90b2AgYW5kIGBoZWxwZXItJmd0O2w0cHJvdG9gLiBUaGlzIG1ha2VzIGBuZl9jdF9oZWxwZXJgIGEgc3Ryb25nIGNhbmRpZGF0ZSAtIGEgZ29vZCBzeW1ib2wgdG8gY29uY2VudHJhdGUgb24uIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtMTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYzoxODppbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0xOS1cdFx0XHRcdHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy04OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYzo4OTpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3Mjc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Nvbm50cmFja2AgQnJvYWRjYXN0IEhlbHBlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhleSByZW1vdmVkIHRoYXQgbGluZSwgYGV4cC0mZ3Q7dHVwbGUuc3JjLnUudWRwLnBvcnQgPSBoZWxwZXItJmd0O3R1cGxlLnNyYy51LnVkcC5wb3J0O2AsIGZyb20gYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbXBhY3QuIEkgY2FuIGNlcnRhaW5seSBzZWUgd2h5IHRoaXMgY2hhbmdlIG1pZ2h0IGJlIHNpZ25pZmljYW50LCBhbmQgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGZvY3VzLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoaXMgaGFzIGltcGxpY2F0aW9ucyBlbHNld2hlcmUuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBuZl9jb25udHJhY2tfYW1hbmRhLmNgIGFuZCBzZWUgaWYgdGhlIEFtYW5kYSBtb2R1bGUgaXMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBwb3J0IGFzc2lnbm1lbnQsIGFuZCBob3cgaXTigJlzIGJlaW5nIGhhbmRsZWQgb3IgY2lyY3VtdmVudGVkIG5vdy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBoYXMgdGhlIGRlc2lyZWQgb3V0Y29tZSBvciBpZiBpdCBoYXMgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24uIEkgd2lsbCBwcm9jZWVkIHdpdGggY2F1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1hbmRhX2hlbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz01Mj1zdGF0aWMgc3RydWN0IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjgzOnN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTg0LVx0XHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMTA3LVx0aWYgKGRhdGFvZmYgXHUwMDNlPSBza2ItXHUwMDNlbGVuKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxMDg6XHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7YW1hbmRhX2hlbHA6IHNrYmxlbiA9ICV1XFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTEwOS1cdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBhbWFuZGFfZXhwX3BvbGljeSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxNzI6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGFtYW5kYV9oZWxwZXJbMl0gX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE3MzpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmFtYW5kYV9oZWxwZXJfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xNzU9c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19hbWFuZGFfZmluaSh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE3OTpcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoYW1hbmRhX2hlbHBlcl9wdHIsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxODA6XHRcdFx0XHRcdEFSUkFZX1NJWkUoYW1hbmRhX2hlbHBlcl9wdHIpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2VhcmNoKTsgaSYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTg1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwMTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAyLVx0XHRcdCAgSEVMUEVSX05BTUUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDM6XHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwNDpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNS1cdFx0XHQgIEhFTFBFUl9OQU1FLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA2Olx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDg6XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA5Olx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShhbWFuZGFfaGVscGVyKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIxMDpcdFx0XHRcdFx0ICAgIGFtYW5kYV9oZWxwZXJfcHRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIxMS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6aW5nIEVmZm9ydDogQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXJzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5mX2N0X2hlbHBlcl9pbml0YCBpbiBhIGJ1bmNoIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlc2UgbW9kdWxlcywgb3IgcGVyaGFwcyBqdXN0IGBuZl9jdF9oZWxwZXJfaW5pdGAgYW5kIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGRpcmVjdGx5LiBIb3dldmVyLCBzaW5jZSB0aGUgaW5pdGlhbGl6YXRpb24gaGFwcGVucyBvbmx5IG9uY2UgZHVyaW5nIG1vZHVsZSBsb2FkLCBmdXp6aW5nIHRob3NlIGRpcmVjdGx5IHByb2JhYmx5IHdvbiYjMzk7dCBiZSBhcyBmcnVpdGZ1bCBhcyB0YXJnZXRpbmcgdGhpbmdzIHRoYXQgYXJlIGNvbnN0YW50bHkgaW4gdXNlLgoKVGhlIHJlYWwgbWVhdCB3aWxsIGxpa2VseSBiZSBpbiB0aGUgbmV0bGluayBpbnRlcmZhY2Ug4oCTIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAg4oCTIGFuZCwgY3J1Y2lhbGx5LCB0aGUgcGFja2V0IHBhdGggaXRzZWxmOiBgbmZfY3RfaGVscGVyYCBhbmQgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAuIERvbiYjMzk7dCBmb3JnZXQsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBwYWNrZXQgbWF0Y2hlcyBhIGhlbHBlciBvciB3aGVuIG9uZSBpcyBhc3NpZ25lZCB2aWEgbmV0bGluayBvciBuZnRhYmxlcy4KClNvLCBsZXQgbWUgc3VtbWFyaXplIHRoZSBrZXkgZm9jdXMgc3ltYm9sczoKKiAgIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgCiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgCiogICBgbmZfY3RfaGVscGVyX2luaXRgCiogICBgbmZubF9jdGhlbHBlcl9uZXdgCiogICBgbmZubF9jdGhlbHBlcl9nZXRgCiogICBgbmZubF9jdGhlbHBlcl9kZWxgCiogICBgbmZubF9jdGhlbHBlcl9jcmVhdGVgCiogICBgbmZfY3RfaGVscGVyYAoqICAgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAKCk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcy4gSSBzZWUgYSBidW5jaCBvZiBvcHRpb25zIGxpc3RlZDogYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19URlRQYCwgYE5GX0NPTk5UUkFDS19TTk1QYCwgYE5GX05BVF9TTk1QX0JBU0lDYCwgYE9QRU5WU1dJVENIYCwgYW5kIGBORVRfQUNUX0NUYC4KCldhaXQsIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBzZWxlY3RlZCBieSBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAsIHNvIEkgY2FuIGp1c3QgaW5jbHVkZSB0aG9zZSB0d28gaW5zdGVhZC4KCkFscmlnaHQsIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCBpcyBzZWxlY3RlZCBieSBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgIGFuZCBgTkZfQ09OTlRSQUNLX1NOTVBgLiBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCkxldCBtZSBjaGVjayBpZiBgTkZfQ09OTlRSQUNLX09WU2AgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBZZXMsIEkgc2VlIHRoZSBlbnRyeTogYG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTKSAmIzQzOz0gbmZfY29ubnRyYWNrX292cy5vYC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmNpZXMuIERvZXMgYE5GX05BVF9TTk1QX0JBU0lDYCByZXF1aXJlIGBORl9OQVRgPyBZZXMsIGl0IGRvZXMuIEluY2x1ZGUgYE5GX05BVGAuCgpEb2VzIGBORl9DT05OVFJBQ0tfU05NUGAgcmVxdWlyZSBgTkVURklMVEVSX0FEVkFOQ0VEYD8gWWVzLCBJIG5lZWQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjaGVjayBvbiB0aGUgb3RoZXJzLiBEb2VzIGBORl9DT05OVFJBQ0tfUFBUUGAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfSDMyM2AgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfU0FORWAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfVEZUUGAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfU0lQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuCkRvZXMgYE5GX0NPTk5UUkFDS19JUkNgIHJlcXVpcmUgYE5GX0NPTk5UUkFDS2A/IFllcy4KRG9lcyBgTkZfQ09OTlRSQUNLX0ZUUGAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfQU1BTkRBYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuCkRvZXMgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuCkRvZXMgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZXF1aXJlIGBORl9DVF9ORVRMSU5LYD8gWWVzLCBpdCBkb2VzLiBJbmNsdWRlIGBORl9DVF9ORVRMSU5LYC4KCk9rYXksIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgbGlzdCBvZiBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE5vdwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNzM9Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBORl9DVF9ORVRMSU5LX0hFTFBFUioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHN1bW1hcml6ZSBhIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgKmRlcGVuZGVuY2llcyogb2YgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuIEkga25vdyBpdCYjMzk7cyBhIGtlcm5lbCBtb2R1bGUsIGxpa2VseSByZWxhdGVkIHRvIG5ldGZpbHRlciBhbmQgY29ubmVjdGlvbiB0cmFja2luZywgYW5kIHRoYXQgJiMzNDtORVRMSU5LJiMzNDsgc3VnZ2VzdHMgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpc3NlY3Qgd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBmdW5jdGlvbnMgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZWxpZXMgdXBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsgbWlnaHQgYmUgaW50ZWdyYXRlZCwgYW55IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvc3NpYmxlIGludGVyYWN0aW9ucyB3aXRoIHVzZXItc3BhY2UgdG9vbHMgYW5kIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBoZWxwZXIgKnByb3ZpZGVzKiBhbmQgZnJvbSB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGl0JiMzOTtzIHVzZWQuIFRoaXMgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBiZSB0aGlua2luZyBpbiB0ZXJtcyBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQgcG90ZW50aWFsIGJ1aWxkIG9yZGVyIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM3Mz1jb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluc3RydWN0aW9uIHNheXMgdG8gbG9vayBhdCB0aGUgbGluZXMgKmFmdGVyKiBgY29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBpcyBhYm91dCBOZXRmaWx0ZXIgYW5kIGxpa2VseSBpdHMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuJiMzNDsgVGhhdCBgY29uZmlnYCBsaW5lIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGUgc3Vic2VxdWVudCBsaW5lcywgd2hlcmV2ZXIgdGhleSBhcmUsIHdpbGwgdGVsbCBtZSBzb21ldGhpbmcgYWJvdXQgaG93IHRoYXQgbW9kdWxlLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBpcyBjb25maWd1cmVkIG9yIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUuIEtub3dpbmcgaG93IHRoYXQgY29tcG9uZW50IGlzIGNvbmZpZ3VyZWQgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBiZWNhdXNlIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIGFuZCBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIHNlZSB3aGF0IG9wdGlvbnMgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBOZXRmaWx0ZXIgaW4gdGVybXMgb2YgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgcG90ZW50aWFsIG5ldGxpbmsgaW50ZXJhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3Igb2YgYW55IGN1c3RvbSBmaXJld2FsbCBydWxlcyBvciBuZXR3b3JrIGFwcGxpY2F0aW9ucyBkZXBlbmRpbmcgb24gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwuIEkgYW50aWNpcGF0ZSBzZWVpbmcgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIG1heWJlIGV2ZW4gZGVzY3JpcHRpb25zIG9mIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSByZWxhdGVkIGZlYXR1cmVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aG9zZSBsaW5lcyByZXZlYWwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODU6XHRjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcbiAzODY6XHRcdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuIDM4NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzg4Olx0XHRkZXBlbmRzIG9uIE5GX0NUX05FVExJTktcbiAzODk6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfUVVFVUVcbiAzOTA6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxuIDM5MTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAzOTI6XHRcdGhlbHBcbiAzOTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgdXNlci1zcGFjZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcbiAzOTQ6XHRcdCAgaW5mcmFzdHJ1Y3R1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy4KCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBOZXRmaWx0ZXIgTmV0bGluayBGdW5jdGlvbmFsaXR5KioKClJpZ2h0LCBzbyB0byBnZXQgdGhpcyBOZXRmaWx0ZXIgTmV0bGluayBmdW5jdGlvbmFsaXR5IHdvcmtpbmcgYXMgaW50ZW5kZWQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGUgY29yZSBkZXBlbmRlbmN5IGhlcmUgc2VlbXMgdG8gaGluZ2Ugb24gYE5GX0NUX05FVExJTktgLCB0aGF04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgb2YgY291cnNlLCB0aGF0JiMzOTtzIG5vdCB0aGUgZW5kIG9mIHRoZSBzdG9yeS4gV2UmIzM5O2xsIGFsc28gbmVlZCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGZvciB0aGUgcXVldWluZyBtZWNoYW5pc20gYW5kIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCAtIHByZXN1bWFibHkgdGhlcmUmIzM5O3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlIGZvciBnbHVlaW5nIHRoaW5ncyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGBjdGAuIEFuZCBsYXN0bHksIGBORVRGSUxURVJfQURWQU5DRURgIGZlZWxzIGxpa2UgYSBwcnVkZW50IGNob2ljZSwgYXMgb2Z0ZW4gdGhlIGFkdmFuY2VkIGZlYXR1cmVzIGVuYWJsZSBvdGhlciBuZWVkZWQgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O2xsIG1ha2UgYSBwb2ludCBvZiBleHBsaWNpdGx5IGluY2x1ZGluZyBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBqdXN0IHRvIGJlIHN1cmUgd2UmIzM5O3JlIGNvdmVyZWQuCgpOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RgIHNwZWNpZmljYWxseSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk5LVx0Ym9vbCBcJiMzNDtORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMDAKCQkJCQkJCW91dHB1dDogMzg3CgkJCQkJCQl0aG91Z2h0czogNDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgZnVuY3Rpb25hbCBhbmQgd2FycmFudHMgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGFuZCB0aGVuIHRoZSB2YXJpb3VzIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbm50cmFjayBoZWxwZXJzIGxpa2UgRlRQLCBIMzIzLCBJUkMsIGV0Yy4gV2UgYWxzbyBoYXZlIGBORl9OQVRgIGFuZCBzb21lIGFzc29jaWF0ZWQgbW9kdWxlcy4gQ3J1Y2lhbGx5LCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAgYXJlIGluIHRoZSBtaXggYXMgd2VsbC4KClRoZSBwYXRjaCBpdHNlbGYgaXMgZm9jdXNpbmcgb24gYSBjb3JlIGFyZWE6IGNvbm50cmFjayBoZWxwZXIgcmVnaXN0cmF0aW9uIGFuZCBtYXRjaGluZy4gSXQmIzM5O3MgbW92aW5nIGF3YXkgZnJvbSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCB0b3dhcmRzIGp1c3QgTDMvTDQgcHJvdG9jb2wgbWF0Y2hpbmcuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGhlbHBlcnMgZ2V0IGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG5ldGZpbHRlciBjb25udHJhY2sgYW5kIGlzIGFuIGFyZWEgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gSSYjMzk7dmUgZmxhZ2dlZCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpczogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAsIGBuZl9jdF9oZWxwZXJgLCBhbmQgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAuCgpOb3csIGxldCYjMzk7cyBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY29uZmlncy4gV2UgaGF2ZSBhIGZldyBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBhIGRlcGVuZGVuY3kgb2YgYm90aCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAuIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCBpcyBzZWxlY3RlZCBieSBib3RoIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AgYW5kIGBORl9DT05OVFJBQ0tfU05NUGAuIEFuZCBgTkZfTkFUX1NOTVBfQkFTSUNgIGlzIGRlcGVuZGVudCBvbiBgTkZfTkFUYC4KCkkmIzM5O2xsIGNvbnNvbGlkYXRlIHRoaXMgaW5mb3JtYXRpb24gaW50byBhIGNsZWFyIHJlcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTozMC4zNzA0MTk5NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0NDk5NTU0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfR0xVRV9DVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19JUkNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19ORVRCSU9TX05TXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfUFBUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NBTkVcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19URlRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU05NUFwiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJORl9OQVRfU05NUF9CQVNJQ1wiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfZ2V0XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2RlbFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9jcmVhdGVcIixcbiAgICBcIm5mX2N0X2hlbHBlclwiLFxuICAgIFwibmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgb2YgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXIgcmVnaXN0cmF0aW9uIGFuZCBtYXRjaGluZy4gSXQgcmVtb3ZlcyB0aGUgcG9ydC1iYXNlZCBtYXRjaGluZyBhbmQgcmVwbGFjZXMgaXQgd2l0aCBMMy9MNCBwcm90b2NvbCBtYXRjaGluZy4gVGhpcyBhZmZlY3RzIGhvdyBoZWxwZXJzIGFyZSBhc3NpZ25lZCB0byBjb25uZWN0aW9ucyBhbmQgaG93IHRoZXkgYXJlIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTozMC4zNzA0MjUxNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDY3NzgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5ZGNkNmMzMWM3ZDMyYjc4ZmQ5NDBhMGFiMDA4MDExN2U0MjQwOGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6MDk6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXG5pbmRleCA4MTI4NmM0OTkzMjUyMS4uYjE1ZjM3NjA0Y2RlNGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXG5AQCAtOSw4ICs5LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBSQVNfUE9SVCAxNzE5XFxuLSNkZWZpbmUgUTkzMV9QT1JUIDE3MjBcXG4gI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0XFx0LyogQXVkaW8sIHZpZGVvLCBGQVggYW5kIG90aGVyICovXFxuIFxcbiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmhcXG5pbmRleCBjM2JkYjQzNzA5Mzg0ZC4uYzBiMzA1Y2U3YzNjNmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmhcXG5AQCAtNTAsOCArNTAsNiBAQCBzdHJ1Y3QgbmZfbmF0X3BwdHAge1xcbiBcXHRfX2JlMTYgcGFjX2NhbGxfaWQ7XFx0XFx0XFx0LyogTkFUJ2VkIFBBQyBjYWxsIGlkICovXFxuIH07XFxuIFxcbi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUXFx0MTcyM1xcbi1cXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MXFx0MVxcbiAjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVRcXHQyXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxcbmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxcbkBAIC0zLDggKzMsNiBAQFxcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfU0FORV9IXFxuIC8qIFNBTkUgdHJhY2tpbmcuICovXFxuIFxcbi0jZGVmaW5lIFNBTkVfUE9SVFxcdDY1NjZcXG4tXFxuIGVudW0gc2FuZV9zdGF0ZSB7XFxuIFxcdFNBTkVfU1RBVEVfTk9STUFMLFxcbiBcXHRTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmhcXG5pbmRleCA5MGIzMzRiYmNlM2NlNi4uZTNkMTczOWM1NTdkMTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmhcXG5AQCAtMiw4ICsyLDYgQEBcXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVEZUUF9IXFxuIFxcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxcbi1cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbkBAIC00MywxMSArNDMsMTAgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIge1xcbiBcXG4gXFx0cmVmY291bnRfdCBjdF9yZWZjbnQ7XFxuIFxcbi1cXHQvKiBUdXBsZSBvZiB0aGluZ3Mgd2Ugd2lsbCBoZWxwIChjb21wYXJlZCBhZ2FpbnN0IHNlcnZlciByZXNwb25zZSkgKi9cXG4tXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcXG4rXFx0dTggbmZwcm90bztcXHQvKiBORlBST1RPXyosIGNhbiBiZSBORlBST1RPX1VOU1BFQyAqL1xcbitcXHR1OCBsNHByb3RvO1xcdC8qIElQUFJPVE9fVURQL1RDUCAqL1xcbiBcXG4tXFx0LyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCwgb3IgLTEgdG9cXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xcbitcXHQvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gZGF0YSBwYXNzZXM7IHJldHVybiB2ZXJkaWN0ICovXFxuIFxcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0ICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pO1xcbkBAIC05NCw4ICs5Myw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7XFxuIFxcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLVxcdFxcdCAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tXFx0XFx0ICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCxcXG4rXFx0XFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsXFxuIFxcdFxcdCAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCxcXG4gXFx0XFx0ICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uY1xcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uY1xcbkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NubXBfYmFzaWNfaW5pdCh2b2lkKVxcbiBcXHRSQ1VfSU5JVF9QT0lOVEVSKG5mX25hdF9zbm1wX2hvb2ssIGhlbHApO1xcbiBcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIFxcXCJzbm1wX3RyYXBcXFwiLCBTTk1QX1RSQVBfUE9SVCwgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJzbm1wX3RyYXBcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFxuIFxcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIFxcdTAwMjZzbm1wX3RyYXBfaGVscGVyX3B0cik7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5pbmRleCBkZGFmYmRmYzk2ZGMzNS4uZWRjZWQwMzk5NzBkNDggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xcbkBAIC0xOTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCAxMDA4MCwgMTAwODAsIDEwMDgwLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4gXFx0XFx0XFx0ICBcXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuaW5kZXggYmY3ODgyOGM3NTQ5ZDQuLjZmZjk1NGYxYmZiODdjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcXG5AQCAtNjYsOCArNjYsNiBAQCBpbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGV4cC1cXHUwMDNldHVwbGUgICAgICAgICAgICAgICAgPSBjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XFxuIFxcbiBcXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4tXFx0aWYgKGhlbHBlcilcXG4tXFx0XFx0ZXhwLVxcdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci1cXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQ7XFxuIFxcbiBcXHRleHAtXFx1MDAzZW1hc2suc3JjLnUzLmlwICAgICAgID0gbWFzaztcXG4gXFx0ZXhwLVxcdTAwM2VtYXNrLnNyYy51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcXG5pbmRleCAwODQ3Zjg0NTYxM2Q2YS4uZjM5NDQ1OThjMTcyNmYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xcbkBAIC0zNSwxMSArMzUsNiBAQCBNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja19mdHBcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhuZl9mdHBfbG9jayk7XFxuIFxcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XFxuLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTtcXG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXFx1MDAyNnBvcnRzX2MsIDA0MDApO1xcbi1cXG4gc3RhdGljIGJvb2wgbG9vc2U7XFxuIG1vZHVsZV9wYXJhbShsb29zZSwgYm9vbCwgMDYwMCk7XFxuIFxcbkBAIC01NjAsOCArNTU1LDggQEAgc3RhdGljIGludCBuZl9jdF9mdHBfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cCBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHIgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcdC5tYXhfZXhwZWN0ZWRcXHQ9IDEsXFxuQEAgLTU3MCwzMiArNTY1LDIzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2Z0cF9maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihmdHBfcHRyLCBwb3J0c19jICogMik7XFxuK1xcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihmdHBfcHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2Z0cF9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIpKTtcXG4gXFxuLVxcdGlmIChwb3J0c19jID09IDApXFxuLVxcdFxcdHBvcnRzW3BvcnRzX2MrK10gPSBGVFBfUE9SVDtcXG4tXFxuIFxcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xcbiBcXHRcXHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRzX2M7IGkrKykge1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2ZnRwWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxcbi1cXHRcXHRcXHRcXHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2ZnRwWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgRlRQX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcXG4tXFx0XFx0XFx0XFx0ICBcXHUwMDI2ZnRwX2V4cF9wb2xpY3ksIDAsIGhlbHAsXFxuLVxcdFxcdFxcdFxcdCAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcXG4rXFx0XFx0XFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcXG4gXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGZ0cCwgcG9ydHNfYyAqIDIsIGZ0cF9wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZmdHAsIFxcdTAwMjZmdHBfcHRyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcXG5pbmRleCAyNDkzMWUzNzk5ODViYi4uOThiOTc1M2Q1ZTY1ZTEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xcbkBAIC0xNzEzLDE5ICsxNzEzLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1swXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgXFxcIlJBU1xcXCIsIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcIlJBU1xcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0ICBcXFwiUkFTXFxcIiwgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcXG4rXFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG4gXFx0XFx0XFx0ICBcXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsIEFGX1VOU1BFQywgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgXFxcIkguMjQ1XFxcIiwgMCwgMCwgMCxcXG4rXFx0XFx0XFx0ICBcXFwiSC4yNDVcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZoMjQ1X2V4cF9wb2xpY3ksIDAsIGgyNDVfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJRLjkzMVxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJRLjkzMVxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcXG5pbmRleCA1MDA1MDliMTc2NjNlZC4uNTA2YzU4MDM0NzYxNTUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbkBAIC00MCwxMiArNDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTtcXG4gc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9uYXRfaGVscGVyc19tdXRleCk7XFxuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2N0X25hdF9oZWxwZXJzIF9fcmVhZF9tb3N0bHk7XFxuIFxcbi0vKiBTdHVwaWQgaGFzaCwgYnV0IGNvbGxpc2lvbiBmcmVlIGZvciB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb25zIG9mIHRoZVxcbi0gKiBoZWxwZXJzIGN1cnJlbnRseSBpbiB0aGUga2VybmVsLiAqL1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxcbiB7XFxuLVxcdHJldHVybiAoKCh0dXBsZS1cXHUwMDNlc3JjLmwzbnVtIFxcdTAwM2NcXHUwMDNjIDgpIHwgdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSkgXlxcbi1cXHRcXHQoX19mb3JjZSBfX3UxNil0dXBsZS1cXHUwMDNlc3JjLnUuYWxsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcXG4rXFx0c3RhdGljIHUzMiBzZWVkO1xcbitcXHR1MzIgaW5pdHZhbDtcXG4rXFxuK1xcdGdldF9yYW5kb21fb25jZShcXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcXG4rXFxuK1xcdGluaXR2YWwgPSBzZWVkIF4gcHJvdG9udW07XFxuK1xcbitcXHRyZXR1cm4gamhhc2gobmFtZSwgc3RybGVuKG5hbWUpLCBpbml0dmFsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcXG4gfVxcbiBcXG4gc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxcbkBAIC01NCwxOCArNTgsMTggQEAgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSsrKSB7XFxuLVxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XFxuLVxcdFxcdFxcdGlmIChzdHJjbXAoaC1cXHUwMDNlbmFtZSwgbmFtZSkpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdGlmIChoLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGgtXFx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBsM251bSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdGkgPSBoZWxwZXJfaGFzaChuYW1lLCBwcm90b251bSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaC1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID09IHByb3RvbnVtKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gaDtcXG4tXFx0XFx0fVxcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xcbitcXHRcXHRpZiAoc3RyY21wKGgtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGgtXFx1MDAzZW5mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlbmZwcm90byAhPSBsM251bSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChoLVxcdTAwM2VsNHByb3RvID09IHByb3RvbnVtKVxcbitcXHRcXHRcXHRyZXR1cm4gaDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC0zNjMsOSArMzY3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7XFxuIFxcbiBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgbWFzayA9IHsgLnNyYy51LmFsbCA9IGh0b25zKDB4RkZGRikgfTtcXG4tXFx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcXHUwMDI2bWUtXFx1MDAzZXR1cGxlKTtcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN1cjtcXG4rXFx0dW5zaWduZWQgaW50IGg7XFxuIFxcdGludCByZXQgPSAwLCBpO1xcbiBcXG4gXFx0QlVHX09OKG1lLVxcdTAwM2VleHBlY3RfY2xhc3NfbWF4IFxcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7XFxuQEAgLTM4MiwyOSArMzg1LDE4IEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0aCA9IGhlbHBlcl9oYXNoKG1lLVxcdTAwM2VuYW1lLCBtZS1cXHUwMDNlbDRwcm90byk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xcbi1cXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcXG4tXFx0XFx0XFx0aWYgKCFzdHJjbXAoY3VyLVxcdTAwM2VuYW1lLCBtZS1cXHUwMDNlbmFtZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIChjdXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBORlBST1RPX1VOU1BFQyB8fFxcbi1cXHRcXHRcXHQgICAgIGN1ci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IG1lLVxcdTAwM2V0dXBsZS5zcmMubDNudW0pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBjdXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBtZS1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaF0sIGhub2RlKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKGN1ci1cXHUwMDNlbmFtZSwgbWUtXFx1MDAzZW5hbWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoY3VyLVxcdTAwM2VuZnByb3RvID09IE5GUFJPVE9fVU5TUEVDIHx8XFxuK1xcdFxcdCAgICAgY3VyLVxcdTAwM2VuZnByb3RvID09IG1lLVxcdTAwM2VuZnByb3RvKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY3VyLVxcdTAwM2VsNHByb3RvID09IG1lLVxcdTAwM2VsNHByb3RvKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LyogYXZvaWQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgZm9yIGF1dG9fYXNzaWduX2hlbHBlciAqL1xcbi1cXHRpZiAoIShtZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0UpKSB7XFxuLVxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xcbi1cXHRcXHRcXHRpZiAobmZfY3RfdHVwbGVfc3JjX21hc2tfY21wKFxcdTAwMjZjdXItXFx1MDAzZXR1cGxlLCBcXHUwMDI2bWUtXFx1MDAzZXR1cGxlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtYXNrKSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm1lLVxcdTAwM2VjdF9yZWZjbnQsIDEpO1xcbiBcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNm1lLVxcdTAwM2Vobm9kZSwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdKTtcXG4gXFx0bmZfY3RfaGVscGVyX2NvdW50Kys7XFxuQEAgLTQ3OSw4ICs0NzEsNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XFxuIFxcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLVxcdFxcdCAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tXFx0XFx0ICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCxcXG4rXFx0XFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsXFxuIFxcdFxcdCAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCxcXG4gXFx0XFx0ICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbkBAIC00OTIsOSArNDgzLDggQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbiB7XFxuIFxcdG1lbXNldChoZWxwZXIsIDAsIHNpemVvZigqaGVscGVyKSk7XFxuIFxcbi1cXHRoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSA9IGwzbnVtO1xcbi1cXHRoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvbnVtO1xcbi1cXHRoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy51LmFsbCA9IGh0b25zKHNwZWNfcG9ydCk7XFxuK1xcdGhlbHBlci1cXHUwMDNlbmZwcm90byA9IGwzbnVtO1xcbitcXHRoZWxwZXItXFx1MDAzZWw0cHJvdG8gPSBwcm90b251bTtcXG4gXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItXFx1MDAzZWhlbHAsIGhlbHApO1xcbiBcXHRoZWxwZXItXFx1MDAzZWZyb21fbmxhdHRyID0gZnJvbV9ubGF0dHI7XFxuQEAgLTUwMiwxMCArNDkyLDcgQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbiBcXHRzbnByaW50ZihoZWxwZXItXFx1MDAzZW5hdF9tb2RfbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmF0X21vZF9uYW1lKSxcXG4gXFx0XFx0IE5GX05BVF9IRUxQRVJfUFJFRklYIFxcXCIlc1xcXCIsIG5hbWUpO1xcbiBcXG4tXFx0aWYgKHNwZWNfcG9ydCA9PSBkZWZhdWx0X3BvcnQpXFxuLVxcdFxcdHNucHJpbnRmKGhlbHBlci1cXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsIG5hbWUpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHNucHJpbnRmKGhlbHBlci1cXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlcy0ldVxcXCIsIG5hbWUsIGlkKTtcXG4rXFx0c25wcmludGYoaGVscGVyLVxcdTAwM2VuYW1lLCBzaXplb2YoaGVscGVyLVxcdTAwM2VuYW1lKSwgXFxcIiVzXFxcIiwgbmFtZSk7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKGV4cGVjdF9jbGFzc19tYXggXFx1MDAzZT0gTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSlcXG4gXFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuaW5kZXggMTkzYWIzNGRiNzk1ZjkuLjRlNmJhZmU0MTQzNzUyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcXG5AQCAtMjEsOSArMjEsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcXG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IG1heF9kY2NfY2hhbm5lbHMgPSA4O1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XFxuIC8qIFRoaXMgaXMgc2xvdywgYnV0IGl0J3Mgc2ltcGxlLiAtLVJSICovXFxuQEAgLTQyLDggKzM5LDYgQEAgTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja19pcmNcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gXFxuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcXHUwMDI2cG9ydHNfYywgMDQwMCk7XFxuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFxcXCJwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnNcXFwiKTtcXG4gbW9kdWxlX3BhcmFtKG1heF9kY2NfY2hhbm5lbHMsIHVpbnQsIDA0MDApO1xcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9kY2NfY2hhbm5lbHMsIFxcXCJtYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXFxcIlxcbiBcXHRcXHRcXHRcXHQgICBcXFwiSVJDIHNlc3Npb25cXFwiKTtcXG5AQCAtMjU0LDEzICsyNDksMTMgQEAgc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaXJjW01BWF9QT1JUU10gX19yZWFkX21vc3RseTtcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyW01BWF9QT1JUU10gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyYyBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmlyY19wdHIgX19yZWFkX21vc3RseTtcXG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xcbiBcXG5AQCAtMjgyLDE3ICsyNzcsMTEgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXFxuIFxcdGlmICghaXJjX2J1ZmZlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHQvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovXFxuLVxcdGlmIChwb3J0c19jID09IDApXFxuLVxcdFxcdHBvcnRzW3BvcnRzX2MrK10gPSBJUkNfUE9SVDtcXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmlyYywgQUZfSU5FVCwgSVBQUk9UT19UQ1AsIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZpcmNfZXhwX3BvbGljeSxcXG4rXFx0XFx0XFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcXG4tXFx0XFx0XFx0XFx0ICBJUkNfUE9SVCwgcG9ydHNbaV0sIGksIFxcdTAwMjZpcmNfZXhwX3BvbGljeSxcXG4tXFx0XFx0XFx0XFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKFxcdTAwMjZpcmNbMF0sIHBvcnRzX2MsIGlyY19wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZpcmMsIFxcdTAwMjZpcmNfcHRyKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxcXG5cXFwiKTtcXG4gXFx0XFx0a2ZyZWUoaXJjX2J1ZmZlcik7XFxuQEAgLTMwNCw3ICsyOTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaXJjX2Zpbmkodm9pZClcXG4ge1xcbi1cXHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKGlyY19wdHIsIHBvcnRzX2MpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoaXJjX3B0cik7XFxuIFxcdGtmcmVlKGlyY19idWZmZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcXG5pbmRleCA4OWQxY2Y3ZDY1MTJlNy4uY2FhMmIxMDFmYTllNWUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBIRUxQRVJfTkFNRVxcdFxcXCJuZXRiaW9zLW5zXFxcIlxcbi0jZGVmaW5lIE5NQkRfUE9SVFxcdDEzN1xcbiBcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGF0cmljayBNY0hhcmR5IFxcdTAwM2NrYWJlckB0cmFzaC5uZXRcXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXFxcIik7XFxuQEAgLTU0LDcgKzUzLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKVxcbiBcXHRleHBfcG9saWN5LnRpbWVvdXQgPSB0aW1lb3V0O1xcbiBcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsIEhFTFBFUl9OQU1FLFxcbi1cXHRcXHRcXHQgIE5NQkRfUE9SVCwgTk1CRF9QT1JULCBOTUJEX1BPUlQsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4gXFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNmhlbHBlciwgXFx1MDAyNmhlbHBlcl9wdHIpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuaW5kZXggNDlkMTUxMWU5OTIxODUuLmI0MDg1YWYzYWQxY2UwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcXG5AQCAtMzEsOCArMzEsOCBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0aWYgKCFoZWxwZXIpXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbi1cXHRpZiAoaGVscGVyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGhlbHBlci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IHByb3RvKVxcbitcXHRpZiAoaGVscGVyLVxcdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoZWxwZXItXFx1MDAzZW5mcHJvdG8gIT0gcHJvdG8pXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzd2l0Y2ggKHByb3RvKSB7XFxuQEAgLTYwLDcgKzYwLDcgQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdFxcdHJldHVybiBORl9EUk9QO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gcHJvdG8pXFxuK1xcdGlmIChoZWxwZXItXFx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVxcdTAwM2VoZWxwKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXFxuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xcbkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxcbiBcXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3RfcHB0cF9tYXN0ZXIpKTtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZwcHRwLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0ICBcXFwicHB0cFxcXCIsIFBQVFBfQ09OVFJPTF9QT1JULCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcInBwdHBcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFxuIFxcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xcbmluZGV4IDM5MDg1YWNmN2E3MTg1Li5hMDY1OGY2OWQ3OGZiYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcXG5AQCAtMzQsMTEgKzM0LDYgQEAgTU9EVUxFX0FVVEhPUihcXFwiTWljaGFsIFNjaG1pZHQgXFx1MDAzY21zY2htaWR0QHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiU0FORSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclxcXCIpO1xcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xcbiBcXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tXFxuIHN0cnVjdCBzYW5lX3JlcXVlc3Qge1xcbiBcXHRfX2JlMzIgUlBDX2NvZGU7XFxuICNkZWZpbmUgU0FORV9ORVRfU1RBUlQgICAgICA3ICAgLyogUlBDIGNvZGUgKi9cXG5AQCAtMTY5LDggKzE2NCw4IEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZVtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2FuZV9wdHIgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xcbiBcXHQubWF4X2V4cGVjdGVkXFx0PSAxLFxcbkBAIC0xNzksMzIgKzE3NCwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHtcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc2FuZV9wdHIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc2FuZV9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NhbmVfbWFzdGVyKSk7XFxuIFxcbi1cXHRpZiAocG9ydHNfYyA9PSAwKVxcbi1cXHRcXHRwb3J0c1twb3J0c19jKytdID0gU0FORV9QT1JUO1xcbi1cXG4tXFx0LyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnNcXG4tXFx0XFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwb3J0c19jOyBpKyspIHtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNhbmVbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcXG4tXFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzYW5lWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcXG4tXFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxcbitcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4gXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNhbmUsIHBvcnRzX2MgKiAyLCBzYW5lX3B0cik7XFxuK1xcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNnNhbmUsIFxcdTAwMjZzYW5lX3B0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcXG5AQCAtMzUsMTIgKzM1LDYgQEAgTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcXFwiKTtcXG4gTU9EVUxFX0FMSUFTKFxcXCJpcF9jb25udHJhY2tfc2lwXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XFxuIFxcbi0jZGVmaW5lIE1BWF9QT1JUU1xcdDhcXG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXFxcInBvcnQgbnVtYmVycyBvZiBTSVAgc2VydmVyc1xcXCIpO1xcbi1cXG4gc3RhdGljIHVuc2lnbmVkIGludCBzaXBfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gU0lQX1RJTUVPVVQ7XFxuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XFxuIE1PRFVMRV9QQVJNX0RFU0Moc2lwX3RpbWVvdXQsIFxcXCJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIFNJUCBzZXNzaW9uXFxcIik7XFxuQEAgLTE3NjQsOCArMTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRyZXR1cm4gcHJvY2Vzc19zaXBfbXNnKHNrYiwgY3QsIHByb3RvZmYsIGRhdGFvZmYsIFxcdTAwMjZkcHRyLCBcXHUwMDI2ZGF0YWxlbik7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTICogNF0gX19yZWFkX21vc3RseTtcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyW01BWF9QT1JUUyAqIDRdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbMl0gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMV0gPSB7XFxuIFxcdFtTSVBfRVhQRUNUX1NJR05BTExJTkddID0ge1xcbkBAIC0xNzkyLDM4ICsxNzg2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggKyAxXFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCBwb3J0c19jICogNCk7XFxuK1xcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgMik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2lwX21hc3RlcikpO1xcbiBcXG4tXFx0aWYgKHBvcnRzX2MgPT0gMClcXG4tXFx0XFx0cG9ydHNbcG9ydHNfYysrXSA9IFNJUF9QT1JUO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRzX2M7IGkrKykge1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzQgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcXG4tXFx0XFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzaXBbNCAqIGkgKyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3RjcCxcXG4tXFx0XFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzaXBbNCAqIGkgKyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXFxuLVxcdFxcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzQgKiBpICsgM10sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxcbi1cXHRcXHRcXHRcXHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxcbi1cXHRcXHRcXHRcXHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4tXFx0fVxcbitcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzBdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsXFxuK1xcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuK1xcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXFxuK1xcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbitcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuK1xcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXFxuK1xcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4tXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7XFxuK1xcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNpcCwgMiwgc2lwX3B0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcXG5pbmRleCBiNmZjZTU3MDNmY2U3Ny4uMTA5OTg2ZDVkNTVlNjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXFxuQEAgLTE0LDggKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmhcXHUwMDNlXFxuIFxcbi0jZGVmaW5lIFNOTVBfUE9SVFxcdDE2MVxcbi1cXG4gTU9EVUxFX0FVVEhPUihcXFwiSmlyaSBPbHNhIFxcdTAwM2Nqb2xzYUByZWRoYXQuY29tXFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNOTVAgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbkBAIC01NSw3ICs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcXG4gXFx0ZXhwX3BvbGljeS50aW1lb3V0ID0gdGltZW91dDtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIFxcXCJzbm1wXFxcIiwgU05NUF9QT1JULCBTTk1QX1BPUlQsIFNOTVBfUE9SVCxcXG4rXFx0XFx0XFx0ICBcXFwic25tcFxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNmV4cF9wb2xpY3ksIDAsIHNubXBfY29ubnRyYWNrX2hlbHAsIE5VTEwsXFxuIFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXFxuaW5kZXggNDM5M2M0MzVhYTM1NDkuLmE2OTU1OWVkZjliMzYzIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xcbkBAIC0yNiwxMiArMjYsNiBAQCBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIE1PRFVMRV9BTElBUyhcXFwiaXBfY29ubnRyYWNrX3RmdHBcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gXFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcXG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXFxcIlBvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnNcXFwiKTtcXG4tXFxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcXG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3RmdHBfaG9vayk7XFxuIFxcbkBAIC05NSw4ICs4OSw4IEBAIHN0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHAgX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0ZnRwX3B0ciBfX3JlYWRfbW9zdGx5O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcdC5tYXhfZXhwZWN0ZWRcXHQ9IDEsXFxuQEAgLTEwNSwzMCArOTksMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKVxcbiB7XFxuLVxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTtcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHRmdHBfcHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKDApO1xcbiBcXG4tXFx0aWYgKHBvcnRzX2MgPT0gMClcXG4tXFx0XFx0cG9ydHNbcG9ydHNfYysrXSA9IFRGVFBfUE9SVDtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwb3J0c19jOyBpKyspIHtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnRmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBcXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2dGZ0cFsyICogaSArIDFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4tXFx0fVxcbitcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcXG4rXFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuIFxcbi1cXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3Rlcih0ZnRwLCBwb3J0c19jICogMiwgdGZ0cF9wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZ0ZnRwLCBcXHUwMDI2dGZ0cF9wdHIpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uNTY2NTVjYjdmZTJhZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtNjcsNyArNjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCsxXSA9IHtcXG4tXFx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXFxuK1xcdFtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLFxcbiBcXHRbTkZDVEhfVFVQTEVfTDRQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1U4LCB9LFxcbiB9O1xcbiBcXG5AQCAtMjU0LDcgKzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRoZWxwZXItXFx1MDAzZWRhdGFfbGVuID0gc2l6ZTtcXG4gXFxuIFxcdGhlbHBlci1cXHUwMDNlZmxhZ3MgfD0gTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFO1xcbi1cXHRtZW1jcHkoXFx1MDAyNmhlbHBlci1cXHUwMDNldHVwbGUsIHR1cGxlLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSkpO1xcbitcXHRoZWxwZXItXFx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cXHUwMDNlc3JjLmwzbnVtO1xcbitcXHRoZWxwZXItXFx1MDAzZWw0cHJvdG8gPSB0dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtO1xcbiBcXG4gXFx0aGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbiBcXHRoZWxwZXItXFx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcXG5AQCAtNDQ5LDggKzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0aWYgKHN0cm5jbXAoY3VyLVxcdTAwM2VuYW1lLCBoZWxwZXJfbmFtZSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSB8fFxcbi1cXHRcXHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXFxuK1xcdFxcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cXHUwMDNlbmZwcm90byB8fFxcbitcXHRcXHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXFx1MDAzZWw0cHJvdG8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX2ZsYWdzIFxcdTAwMjYgTkxNX0ZfRVhDTClcXG5AQCAtNDc5LDEwICs0ODAsMTAgQEAgbmZubF9jdGhlbHBlcl9kdW1wX3R1cGxlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIE5GQ1RIX1RVUExFX0wzUFJPVE9OVU0sXFxuLVxcdFxcdFxcdCBodG9ucyhoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSkpKVxcbitcXHRcXHRcXHQgaHRvbnMoaGVscGVyLVxcdTAwM2VuZnByb3RvKSkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXFxuK1xcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVxcdTAwM2VsNHByb3RvKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQoc2tiLCBuZXN0X3Bhcm1zKTtcXG5AQCAtNjYxLDggKzY2Miw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAodHVwbGVfc2V0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XFxuLVxcdFxcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcXG4rXFx0XFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVxcdTAwM2VuZnByb3RvIHx8XFxuK1xcdFxcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cXHUwMDNlbDRwcm90bykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbkBAIC03MjEsOCArNzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICh0dXBsZV9zZXQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcXG4tXFx0XFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxcbitcXHRcXHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXFx1MDAzZW5mcHJvdG8gfHxcXG4rXFx0XFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVxcdTAwM2VsNHByb3RvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRmb3VuZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjMwLjk5NTg1MTk3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4ODI0NTEzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS19BTUFOREFcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSVJDXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTkVUQklPU19OU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1BQVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TQU5FXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVEZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NOTVBcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRfQUNUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZFwiLFxuICAgIFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2dldFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9kZWxcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfY3JlYXRlXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJcIixcbiAgICBcIm5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG9mIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVyIHJlZ2lzdHJhdGlvbiBhbmQgbWF0Y2hpbmcuIEl0IHJlbW92ZXMgdGhlIHBvcnQtYmFzZWQgbWF0Y2hpbmcgYW5kIHJlcGxhY2VzIGl0IHdpdGggTDMvTDQgcHJvdG9jb2wgbWF0Y2hpbmcuIFRoaXMgYWZmZWN0cyBob3cgaGVscGVycyBhcmUgYXNzaWduZWQgdG8gY29ubmVjdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIHZpYSBuZXRsaW5rLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5OWRjZDZjMzFjN2QzMmI3OGZkOTQwYTBhYjAwODAxMTdlNDI0MDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6MDk6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuaW5kZXggODEyODZjNDk5MzI1MjEuLmIxNWYzNzYwNGNkZTRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuQEAgLTksOCArOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmhcdTAwM2VcbiBcbi0jZGVmaW5lIFJBU19QT1JUIDE3MTlcbi0jZGVmaW5lIFE5MzFfUE9SVCAxNzIwXG4gI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0XHQvKiBBdWRpbywgdmlkZW8sIEZBWCBhbmQgb3RoZXIgKi9cbiBcbiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuaW5kZXggYzNiZGI0MzcwOTM4NGQuLmMwYjMwNWNlN2MzYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuQEAgLTUwLDggKzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcbiBcdF9fYmUxNiBwYWNfY2FsbF9pZDtcdFx0XHQvKiBOQVQnZWQgUEFDIGNhbGwgaWQgKi9cbiB9O1xuIFxuLSNkZWZpbmUgUFBUUF9DT05UUk9MX1BPUlRcdDE3MjNcbi1cbiAjZGVmaW5lIFBQVFBfUEFDS0VUX0NPTlRST0xcdDFcbiAjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVRcdDJcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuaW5kZXggNDZjN2FjZDFiNGE3MGYuLjg1MDEwMzVkNzMzNTU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuQEAgLTMsOCArMyw2IEBAXG4gI2RlZmluZSBfTkZfQ09OTlRSQUNLX1NBTkVfSFxuIC8qIFNBTkUgdHJhY2tpbmcuICovXG4gXG4tI2RlZmluZSBTQU5FX1BPUlRcdDY1NjZcbi1cbiBlbnVtIHNhbmVfc3RhdGUge1xuIFx0U0FORV9TVEFURV9OT1JNQUwsXG4gXHRTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuaW5kZXggOTBiMzM0YmJjZTNjZTYuLmUzZDE3MzljNTU3ZDE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuQEAgLTIsOCArMiw2IEBAXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxuICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0hcbiBcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC00MywxMSArNDMsMTAgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIge1xuIFxuIFx0cmVmY291bnRfdCBjdF9yZWZjbnQ7XG4gXG4tXHQvKiBUdXBsZSBvZiB0aGluZ3Mgd2Ugd2lsbCBoZWxwIChjb21wYXJlZCBhZ2FpbnN0IHNlcnZlciByZXNwb25zZSkgKi9cbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XG4rXHR1OCBuZnByb3RvO1x0LyogTkZQUk9UT18qLCBjYW4gYmUgTkZQUk9UT19VTlNQRUMgKi9cbitcdHU4IGw0cHJvdG87XHQvKiBJUFBST1RPX1VEUC9UQ1AgKi9cbiBcbi1cdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xuK1x0LyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCAqL1xuIFx0aW50IF9fcmN1ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0ICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0ICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pO1xuQEAgLTk0LDggKzkzLDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSxcbiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpO1xuIFxuIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbi1cdFx0ICAgICAgIHUxNiBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLFxuLVx0XHQgICAgICAgdTE2IGRlZmF1bHRfcG9ydCwgdTE2IHNwZWNfcG9ydCwgdTMyIGlkLFxuK1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NubXBfYmFzaWNfaW5pdCh2b2lkKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZl9uYXRfc25tcF9ob29rLCBoZWxwKTtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJzbm1wX3RyYXBcIiwgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCxcbitcdFx0XHQgIFwic25tcF90cmFwXCIsXG4gXHRcdFx0ICBcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXHUwMDI2c25tcF90cmFwX2hlbHBlcl9wdHIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbmluZGV4IGRkYWZiZGZjOTZkYzM1Li5lZGNlZDAzOTk3MGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuQEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuIFx0fVxuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2YW1hbmRhX2hlbHBlclswXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZhbWFuZGFfaGVscGVyWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTY2LDggKzY2LDYgQEAgaW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuLVx0aWYgKGhlbHBlcilcbi1cdFx0ZXhwLVx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0ID0gaGVscGVyLVx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0O1xuIFxuIFx0ZXhwLVx1MDAzZW1hc2suc3JjLnUzLmlwICAgICAgID0gbWFzaztcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xuaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXG5AQCAtMzUsMTEgKzM1LDYgQEAgTU9EVUxFX0FMSUFTKFwiaXBfY29ubnRyYWNrX2Z0cFwiKTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfZnRwX2xvY2spO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1cbiBzdGF0aWMgYm9vbCBsb29zZTtcbiBtb2R1bGVfcGFyYW0obG9vc2UsIGJvb2wsIDA2MDApO1xuIFxuQEAgLTU2MCw4ICs1NTUsOCBAQCBzdGF0aWMgaW50IG5mX2N0X2Z0cF9mcm9tX25sYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqZnRwX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGZ0cF9leHBfcG9saWN5ID0ge1xuIFx0Lm1heF9leHBlY3RlZFx0PSAxLFxuQEAgLTU3MCwzMiArNTY1LDIzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBGVFBfUE9SVDtcbi1cbiBcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xuIFx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2ZnRwWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdH1cbitcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcbitcdFx0XHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoZnRwLCBwb3J0c19jICogMiwgZnRwX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmZ0cCwgXHUwMDI2ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcbmluZGV4IDI0OTMxZTM3OTk4NWJiLi45OGI5NzUzZDVlNjVlMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xuQEAgLTE3MTMsMTkgKzE3MTMsMTkgQEAgc3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuIFx0aW50IHJldDtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwiUkFTXCIsIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsXG4rXHRcdFx0ICBcIlJBU1wiLFxuIFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJSQVNcIiwgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcbitcdFx0XHQgIFwiUkFTXCIsXG4gXHRcdFx0ICBcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwiSC4yNDVcIiwgMCwgMCwgMCxcbitcdFx0XHQgIFwiSC4yNDVcIixcbiBcdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdCAgXCJRLjkzMVwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuK1x0XHRcdCAgXCJRLjkzMVwiLFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxuLVx0XHRcdCAgXCJRLjkzMVwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuK1x0XHRcdCAgXCJRLjkzMVwiLFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2VkLi41MDZjNTgwMzQ3NjE1NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQwLDEyICs0MCwxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X2hlbHBlcl9jb3VudCBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyBERUZJTkVfTVVURVgobmZfY3RfbmF0X2hlbHBlcnNfbXV0ZXgpO1xuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2N0X25hdF9oZWxwZXJzIF9fcmVhZF9tb3N0bHk7XG4gXG4tLyogU3R1cGlkIGhhc2gsIGJ1dCBjb2xsaXNpb24gZnJlZSBmb3IgdGhlIGRlZmF1bHQgcmVnaXN0cmF0aW9ucyBvZiB0aGVcbi0gKiBoZWxwZXJzIGN1cnJlbnRseSBpbiB0aGUga2VybmVsLiAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBoZWxwZXJfaGFzaChjb25zdCBjaGFyICpuYW1lLCB1OCBwcm90b251bSlcbiB7XG4tXHRyZXR1cm4gKCgodHVwbGUtXHUwMDNlc3JjLmwzbnVtIFx1MDAzY1x1MDAzYyA4KSB8IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bSkgXlxuLVx0XHQoX19mb3JjZSBfX3UxNil0dXBsZS1cdTAwM2VzcmMudS5hbGwpICUgbmZfY3RfaGVscGVyX2hzaXplO1xuK1x0c3RhdGljIHUzMiBzZWVkO1xuK1x0dTMyIGluaXR2YWw7XG4rXG4rXHRnZXRfcmFuZG9tX29uY2UoXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcbitcbitcdGluaXR2YWwgPSBzZWVkIF4gcHJvdG9udW07XG4rXG4rXHRyZXR1cm4gamhhc2gobmFtZSwgc3RybGVuKG5hbWUpLCBpbml0dmFsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcbiB9XG4gXG4gc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxuQEAgLTU0LDE4ICs1OCwxOCBAQCBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSsrKSB7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbi1cdFx0XHRpZiAoc3RyY21wKGgtXHUwMDNlbmFtZSwgbmFtZSkpXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXG4rXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaC1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gbDNudW0pXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdGkgPSBoZWxwZXJfaGFzaChuYW1lLCBwcm90b251bSk7XG4gXG4tXHRcdFx0aWYgKGgtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID09IHByb3RvbnVtKVxuLVx0XHRcdFx0cmV0dXJuIGg7XG4tXHRcdH1cbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbitcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaC1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5mcHJvdG8gIT0gbDNudW0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChoLVx1MDAzZWw0cHJvdG8gPT0gcHJvdG9udW0pXG4rXHRcdFx0cmV0dXJuIGg7XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMzYzLDkgKzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xuIFxuIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9O1xuLVx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcdTAwMjZtZS1cdTAwM2V0dXBsZSk7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3VyO1xuK1x0dW5zaWduZWQgaW50IGg7XG4gXHRpbnQgcmV0ID0gMCwgaTtcbiBcbiBcdEJVR19PTihtZS1cdTAwM2VleHBlY3RfY2xhc3NfbWF4IFx1MDAzZT0gTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKTtcbkBAIC0zODIsMjkgKzM4NSwxOCBAQCBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGggPSBoZWxwZXJfaGFzaChtZS1cdTAwM2VuYW1lLCBtZS1cdTAwM2VsNHByb3RvKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSsrKSB7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4tXHRcdFx0aWYgKCFzdHJjbXAoY3VyLVx1MDAzZW5hbWUsIG1lLVx1MDAzZW5hbWUpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBORlBST1RPX1VOU1BFQyB8fFxuLVx0XHRcdCAgICAgY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBtZS1cdTAwM2V0dXBsZS5zcmMubDNudW0pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBjdXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID09IG1lLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkge1xuLVx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcbitcdFx0aWYgKCFzdHJjbXAoY3VyLVx1MDAzZW5hbWUsIG1lLVx1MDAzZW5hbWUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGN1ci1cdTAwM2VuZnByb3RvID09IE5GUFJPVE9fVU5TUEVDIHx8XG4rXHRcdCAgICAgY3VyLVx1MDAzZW5mcHJvdG8gPT0gbWUtXHUwMDNlbmZwcm90bykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjdXItXHUwMDNlbDRwcm90byA9PSBtZS1cdTAwM2VsNHByb3RvKSB7XG4rXHRcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBmb3IgYXV0b19hc3NpZ25faGVscGVyICovXG4tXHRpZiAoIShtZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xuLVx0XHRcdGlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoXHUwMDI2Y3VyLVx1MDAzZXR1cGxlLCBcdTAwMjZtZS1cdTAwM2V0dXBsZSxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1hc2spKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZtZS1cdTAwM2VjdF9yZWZjbnQsIDEpO1xuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XG4gXHRuZl9jdF9oZWxwZXJfY291bnQrKztcbkBAIC00NzksOCArNDcxLDcgQEAgdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4rXHRcdCAgICAgICB1OCBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBfcG9sLFxuIFx0XHQgICAgICAgdTMyIGV4cGVjdF9jbGFzc19tYXgsXG4gXHRcdCAgICAgICBpbnQgKCpoZWxwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbkBAIC00OTIsOSArNDgzLDggQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuIHtcbiBcdG1lbXNldChoZWxwZXIsIDAsIHNpemVvZigqaGVscGVyKSk7XG4gXG4tXHRoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID0gbDNudW07XG4tXHRoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG9udW07XG4tXHRoZWxwZXItXHUwMDNldHVwbGUuc3JjLnUuYWxsID0gaHRvbnMoc3BlY19wb3J0KTtcbitcdGhlbHBlci1cdTAwM2VuZnByb3RvID0gbDNudW07XG4rXHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHByb3RvbnVtO1xuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlbHBlci1cdTAwM2VoZWxwLCBoZWxwKTtcbiBcdGhlbHBlci1cdTAwM2Vmcm9tX25sYXR0ciA9IGZyb21fbmxhdHRyO1xuQEAgLTUwMiwxMCArNDkyLDcgQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuIFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hdF9tb2RfbmFtZSwgc2l6ZW9mKGhlbHBlci1cdTAwM2VuYXRfbW9kX25hbWUpLFxuIFx0XHQgTkZfTkFUX0hFTFBFUl9QUkVGSVggXCIlc1wiLCBuYW1lKTtcbiBcbi1cdGlmIChzcGVjX3BvcnQgPT0gZGVmYXVsdF9wb3J0KVxuLVx0XHRzbnByaW50ZihoZWxwZXItXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cdTAwM2VuYW1lKSwgXCIlc1wiLCBuYW1lKTtcbi1cdGVsc2Vcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwiJXMtJXVcIiwgbmFtZSwgaWQpO1xuK1x0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwiJXNcIiwgbmFtZSk7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGV4cGVjdF9jbGFzc19tYXggXHUwMDNlPSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuaW5kZXggMTkzYWIzNGRiNzk1ZjkuLjRlNmJhZmU0MTQzNzUyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG5AQCAtMjEsOSArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaFx1MDAzZVxuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4gc3RhdGljIHVuc2lnbmVkIGludCBtYXhfZGNjX2NoYW5uZWxzID0gODtcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XG4gLyogVGhpcyBpcyBzbG93LCBidXQgaXQncyBzaW1wbGUuIC0tUlIgKi9cbkBAIC00Miw4ICszOSw2IEBAIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9BTElBUyhcImlwX2Nvbm50cmFja19pcmNcIik7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCJwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnNcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9kY2NfY2hhbm5lbHMsIHVpbnQsIDA0MDApO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2RjY19jaGFubmVscywgXCJtYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXCJcbiBcdFx0XHRcdCAgIFwiSVJDIHNlc3Npb25cIik7XG5AQCAtMjU0LDEzICsyNDksMTMgQEAgc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyW01BWF9QT1JUU10gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaXJjIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0O1xuK1x0aW50IHJldDtcbiBcbiBcdG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChIRUxQRVJfTkFNRSk7XG4gXG5AQCAtMjgyLDE3ICsyNzcsMTEgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4gXHRpZiAoIWlyY19idWZmZXIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0LyogSWYgbm8gcG9ydCBnaXZlbiwgZGVmYXVsdCB0byBzdGFuZGFyZCBpcmMgcG9ydCAqL1xuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYysrXSA9IElSQ19QT1JUO1xuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2aXJjLCBBRl9JTkVULCBJUFBST1RPX1RDUCwgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbitcdFx0XHQgIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHRcdCAgSVJDX1BPUlQsIHBvcnRzW2ldLCBpLCBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbi1cdFx0XHRcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0fVxuLVxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoXHUwMDI2aXJjWzBdLCBwb3J0c19jLCBpcmNfcHRyKTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2aXJjLCBcdTAwMjZpcmNfcHRyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXG5cIik7XG4gXHRcdGtmcmVlKGlyY19idWZmZXIpO1xuQEAgLTMwNCw3ICsyOTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2lyY19maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihpcmNfcHRyLCBwb3J0c19jKTtcbitcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihpcmNfcHRyKTtcbiBcdGtmcmVlKGlyY19idWZmZXIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcbmluZGV4IDg5ZDFjZjdkNjUxMmU3Li5jYWEyYjEwMWZhOWU1ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXG5AQCAtMjEsNyArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBIRUxQRVJfTkFNRVx0XCJuZXRiaW9zLW5zXCJcbi0jZGVmaW5lIE5NQkRfUE9SVFx0MTM3XG4gXG4gTU9EVUxFX0FVVEhPUihcIlBhdHJpY2sgTWNIYXJkeSBcdTAwM2NrYWJlckB0cmFzaC5uZXRcdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCIpO1xuQEAgLTU0LDcgKzUzLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKVxuIFx0ZXhwX3BvbGljeS50aW1lb3V0ID0gdGltZW91dDtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsIEhFTFBFUl9OQU1FLFxuLVx0XHRcdCAgTk1CRF9QT1JULCBOTUJEX1BPUlQsIE5NQkRfUE9SVCxcbiBcdFx0XHQgIFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFxuIFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2aGVscGVyLCBcdTAwMjZoZWxwZXJfcHRyKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXG5pbmRleCA0OWQxNTExZTk5MjE4NS4uYjQwODVhZjNhZDFjZTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbkBAIC0zMSw4ICszMSw4IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0aWYgKCFoZWxwZXIpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4tXHRpZiAoaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdCAgICBoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IHByb3RvKVxuK1x0aWYgKGhlbHBlci1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhlbHBlci1cdTAwM2VuZnByb3RvICE9IHByb3RvKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c3dpdGNoIChwcm90bykge1xuQEAgLTYwLDcgKzYwLDcgQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFx0fVxuIFxuLVx0aWYgKGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gcHJvdG8pXG4rXHRpZiAoaGVscGVyLVx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVx1MDAzZWhlbHApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyKSk7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZwcHRwLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwicHB0cFwiLCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULFxuK1x0XHRcdCAgXCJwcHRwXCIsXG4gXHRcdFx0ICBcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXG5pbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xuQEAgLTM0LDExICszNCw2IEBAIE1PRFVMRV9BVVRIT1IoXCJNaWNoYWwgU2NobWlkdCBcdTAwM2Ntc2NobWlkdEByZWRoYXQuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlNBTkUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcIik7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XG4tc3RhdGljIHVfaW50MTZfdCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tXG4gc3RydWN0IHNhbmVfcmVxdWVzdCB7XG4gXHRfX2JlMzIgUlBDX2NvZGU7XG4gI2RlZmluZSBTQU5FX05FVF9TVEFSVCAgICAgIDcgICAvKiBSUEMgY29kZSAqL1xuQEAgLTE2OSw4ICsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0ciBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFx0Lm1heF9leHBlY3RlZFx0PSAxLFxuQEAgLTE3OSwzMiArMTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHNhbmVfcHRyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBpLCByZXQgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2FuZV9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBTQU5FX1BPUlQ7XG4tXG4tXHQvKiBGSVhNRSBzaG91bGQgYmUgY29uZmlndXJhYmxlIHdoZXRoZXIgSVB2NCBhbmQgSVB2NiBjb25uZWN0aW9uc1xuLVx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmVbMiAqIGkgKyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcbi1cdFx0XHRcdCAgVEhJU19NT0RVTEUpO1xuLVx0fVxuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2FuZSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXG4rXHRcdFx0ICBUSElTX01PRFVMRSk7XG4gXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzYW5lLCBwb3J0c19jICogMiwgc2FuZV9wdHIpO1xuK1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZzYW5lLCBcdTAwMjZzYW5lX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5kMGI4NWI4YWQxZTZkOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuQEAgLTM1LDEyICszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTihcIlNJUCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclwiKTtcbiBNT0RVTEVfQUxJQVMoXCJpcF9jb25udHJhY2tfc2lwXCIpO1xuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XG4gXG4tI2RlZmluZSBNQVhfUE9SVFNcdDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwicG9ydCBudW1iZXJzIG9mIFNJUCBzZXJ2ZXJzXCIpO1xuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUO1xuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzaXBfdGltZW91dCwgXCJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIFNJUCBzZXNzaW9uXCIpO1xuQEAgLTE3NjQsOCArMTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCBcdTAwMjZkcHRyLCBcdTAwMjZkYXRhbGVuKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbMl0gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNpcF9wdHJbMl0gX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMV0gPSB7XG4gXHRbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHtcbkBAIC0xNzkyLDM4ICsxNzg2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggKyAxXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19zaXBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgcG9ydHNfYyAqIDQpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbitcdGludCByZXQ7XG4gXG4gXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2lwX21hc3RlcikpO1xuIFxuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYysrXSA9IFNJUF9QT1JUO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgKyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSArIDJdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSArIDNdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHR9XG4rXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMF0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXG4rXHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4rXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMV0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4rXHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzaXAsIHBvcnRzX2MgKiA0LCBzaXBfcHRyKTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNpcCwgMiwgc2lwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xuaW5kZXggYjZmY2U1NzAzZmNlNzcuLjEwOTk4NmQ1ZDU1ZTY5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcbkBAIC0xNCw4ICsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuaFx1MDAzZVxuIFxuLSNkZWZpbmUgU05NUF9QT1JUXHQxNjFcbi1cbiBNT0RVTEVfQVVUSE9SKFwiSmlyaSBPbHNhIFx1MDAzY2pvbHNhQHJlZGhhdC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiU05NUCBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbkBAIC01NSw3ICs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJzbm1wXCIsIFNOTVBfUE9SVCwgU05NUF9QT1JULCBTTk1QX1BPUlQsXG4rXHRcdFx0ICBcInNubXBcIixcbiBcdFx0XHQgIFx1MDAyNmV4cF9wb2xpY3ksIDAsIHNubXBfY29ubnRyYWNrX2hlbHAsIE5VTEwsXG4gXHRcdFx0ICBUSElTX01PRFVMRSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXG5pbmRleCA0MzkzYzQzNWFhMzU0OS4uYTY5NTU5ZWRmOWIzNjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xuQEAgLTI2LDEyICsyNiw2IEBAIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9BTElBUyhcImlwX2Nvbm50cmFja190ZnRwXCIpO1xuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XG4gXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxuLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCJQb3J0IG51bWJlcnMgb2YgVEZUUCBzZXJ2ZXJzXCIpO1xuLVxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfdGZ0cF9ob29rKTtcbiBcbkBAIC05NSw4ICs4OSw4IEBAIHN0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cCBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC0xMDUsMzAgKzk5LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfdGZ0cF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3Rlcih0ZnRwX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHRmdHBfcHRyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBpLCByZXQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTigwKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBURlRQX1BPUlQ7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpKyspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cFsyICogaSArIDFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBURlRQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcbi1cdFx0XHRcdCAgVEhJU19NT0RVTEUpO1xuLVx0fVxuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcbitcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHRmdHAsIHBvcnRzX2MgKiAyLCB0ZnRwX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNnRmdHAsIFx1MDAyNnRmdHBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXG5cIik7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC02Nyw3ICs2Nyw3IEBAIG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYKzFdID0ge1xuLVx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXG4rXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbiBcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4gfTtcbiBcbkBAIC0yNTQsNyArMjU0LDggQEAgbmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4gXHRoZWxwZXItXHUwMDNlZGF0YV9sZW4gPSBzaXplO1xuIFxuIFx0aGVscGVyLVx1MDAzZWZsYWdzIHw9IE5GX0NUX0hFTFBFUl9GX1VTRVJTUEFDRTtcbi1cdG1lbWNweShcdTAwMjZoZWxwZXItXHUwMDNldHVwbGUsIHR1cGxlLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSkpO1xuK1x0aGVscGVyLVx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cdTAwM2VzcmMubDNudW07XG4rXHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bTtcbiBcbiBcdGhlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xuIFx0aGVscGVyLVx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcbkBAIC00NDksOCArNDUwLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRpZiAoc3RybmNtcChjdXItXHUwMDNlbmFtZSwgaGVscGVyX25hbWUsIE5GX0NUX0hFTFBFUl9OQU1FX0xFTikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9FWENMKVxuQEAgLTQ3OSwxMCArNDgwLDEwIEBAIG5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORkNUSF9UVVBMRV9MM1BST1RPTlVNLFxuLVx0XHRcdCBodG9ucyhoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtKSkpXG4rXHRcdFx0IGh0b25zKGhlbHBlci1cdTAwM2VuZnByb3RvKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbitcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVx1MDAzZWw0cHJvdG8pKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdG5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpO1xuQEAgLTY2MSw4ICs2NjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICh0dXBsZV9zZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuQEAgLTcyMSw4ICs3MjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICh0dXBsZV9zZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Zm91bmQgPSB0cnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6MzAuOTk1ODUzNDUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwODY5MDgwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIENvbm50cmFjayBIZWxwZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyBtZXNzaW5nIHdpdGggbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkncmUgZGVmaW5lZCBhbmQgcmVnaXN0ZXJlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZWxpbWluYXRpbmcgdGhlIGB0dXBsZWAgZmllbGQgaW4gYHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyYCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggaW5kaXZpZHVhbCBwcm90b2NvbCBpZGVudGlmaWVycyAoYG5mcHJvdG9gIGFuZCBgbDRwcm90b2ApLiAgVGhleSd2ZSBhbHNvIGNoYW5nZWQgYG5mX2N0X2hlbHBlcl9pbml0YCB0byB0YWtlIGFuIGB1OCBsM251bWAgaW5zdGVhZCBvZiBgdTE2IGwzbnVtYCwgYW5kIHJlbW92ZWQgc29tZSBvZiB0aGUgbm93IG9ic29sZXRlIGluaXRpYWxpc2Vycy4gSXQgZmVlbHMgbGlrZSB0aGV5J3JlIHN0cmVhbWxpbmluZyB0aGUgaGVscGVyIHN0cnVjdHVyZS5cblxuTXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcmVmYWN0b3IgdG8gYWxpZ24gd2l0aCBhIG1vcmUgcnVsZS1iYXNlZCBoZWxwZXIgYXNzaWdubWVudCwgbGlrZSB3aGF0IHlvdSdkIHNlZSB3aXRoIG5mdGFibGVzIG9yIHRoZSBjb25udHJhY2sgdGFyZ2V0IGluIGlwdGFibGVzLiBUaGUgcmVtb3ZhbCBvZiBwb3J0LWJhc2VkIG1hdGNoaW5nIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzOyBpdCBzdHJvbmdseSBzdWdnZXN0cyB0aGUgc3lzdGVtIGlzIG5vIGxvbmdlciByZWx5aW5nIG9uIGF1dG9tYXRpYyBoZWxwZXIgc2VsZWN0aW9uIGJ5IHBvcnQsIHdoaWNoIEkgc2VlbSB0byByZWNhbGwgd2FzIGRlcHJlY2F0ZWQgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW55d2F5LiBUaGUgcmVtb3ZhbCBvZiB0aGUgdHVwbGVzIGFuZCBwb3J0IGFycmF5cyBmcm9tIHRoZSBoZWxwZXJzIHRoZW1zZWx2ZXMgY2xpbmNoZXMgdGhhdCBwb2ludC5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBoZWxwZXIgbW9kdWxlcywgSSdtIHRoaW5raW5nIGEgdGhvcm91Z2ggcmV2aWV3IGlzIGluIG9yZGVyLiBUaGUgZmlsZXMgbW9kaWZpZWQgaW5jbHVkZSBib3RoIGhlYWRlciBmaWxlcyBhbmQgdGhlIGNvcmUgaGVscGVyIGxvZ2ljLCBwbHVzIHNwZWNpZmljIGhlbHBlciBpbXBsZW1lbnRhdGlvbnMgbGlrZSBGVFAsIElSQywgU0lQLCBhbmQgVEZUUC4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkuXG5cblRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyBldmVyeXRoaW5nLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX05GX0NPTk5UUkFDS2AgYW5kIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBoZWxwZXIgb3B0aW9ucywgYXMgd2VsbCBhcyBgQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSYC4gSSdsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGVgLCBhbmQgYG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyYC4gIEknbGwgc3RhcnQgdGhlcmUuIE5vdyBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTo0Mi4wODI3NjQwNjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4MTcyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTg1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwMTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2YW1hbmRhX2hlbHBlclswXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAyLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAzLVxcdFxcdFxcdCAgXFx1MDAyNmFtYW5kYV9leHBfcG9saWN5LCAwLCBhbWFuZGFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwNDpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2YW1hbmRhX2hlbHBlclsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNS1cXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM9NTcxPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19mdHBfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTc4LVxcdFxcdCBhcmUgdHJhY2tlZCBvciBub3QgLSBZSyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jOjU3OTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2ZnRwLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTgwLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcxNTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTYtXFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE3LVxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3MTg6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcxOS1cXHRcXHRcXHQgIFxcXCJSQVNcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjAtXFx0XFx0XFx0ICBcXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcyMTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjItXFx0XFx0XFx0ICBcXFwiSC4yNDVcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjMtXFx0XFx0XFx0ICBcXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI0OlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjUtXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjYtXFx0XFx0XFx0ICBcXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI3OlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzI4LVxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTQ3MT1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0NzM6dm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ3NC1cXHRcXHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUwMy19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTA0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MDUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYz0yNTY9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yNzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM6MjgwOlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yODEtXFx0XFx0XFx0ICBcXHUwMDI2aXJjX2V4cF9wb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmM9NDk9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jLTU0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYzo1NTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2aGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCwgSEVMUEVSX05BTUUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jLTU2LVxcdFxcdFxcdCAgXFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jPTUzOD1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzo1NDI6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnBwdHAsIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy01NDMtXFx0XFx0XFx0ICBcXFwicHB0cFxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9MTgwPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYy0xODUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jOjE4NjpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2FuZSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYy0xODctXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTE3OTI9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNzk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjE3OTg6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNpcFswXSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE3OTktXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE4MDEtXFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTgwMjpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTgwMy1cXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM6NTU6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jLTU2LVxcdFxcdFxcdCAgXFxcInNubXBcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jPTEwNT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMtMTEwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYzoxMTE6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnRmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMtMTEyLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjQyLjE0MjU4NjI0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDcwMzkwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgSGVscGVyIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIHRoZSBgbmZfY3RfaGVscGVyX2luaXRgIGZ1bmN0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBzb21lIGxvdy1sZXZlbCBjaGFuZ2VzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciByZWdpc3RyYXRpb24gcHJvY2Vzcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGFyZWEsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogaXQncyBiZWVuIGFsdGVyZWQgYW5kIHdoYXQgdGhhdCBzaWduaWZpZXMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gem9vbSBpbiBvbiB0aG9zZSBmdW5jdGlvbnMgZGlyZWN0bHkuIEl04oCZcyBwcmV0dHkgY2xlYXIgdGhhdCBpdOKAmXMgYWx0ZXJpbmcgd2hhdCBoYXBwZW5zIHdoZW4gd2UgcmVnaXN0ZXIgdGhvc2UgaGVscGVycywgYW5kIGxvb2tpbmcgYXQgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHdpbGwgbWFrZSBpdCBjbGVhciBleGFjdGx5IGhvdyB0aGV5J3JlIGJlaW5nIGNoYW5nZWQuIEkgd2lsbCBzdGFydCBieSBleGFtaW5pbmcgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAgYW5kIGBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG1pZ2h0IHByb3ZpZGUgc29tZSB1c2VmdWwgZGV0YWlsLCBzbyBpdCdzIGJlc3QgdG8gaGF2ZSBib3RoIGluIG1pbmQgYXQgdGhlIHNhbWUgdGltZS4gTGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aGF0J3MgZGlmZmVyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjQ1Ljg0OTYyODM2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg3NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jPTU3MT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jLTU4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYzo1ODQ6XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2ZnRwLCBcXHUwMDI2ZnRwX3B0cik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTg1LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MzAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTczMTpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTczMi1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zNjY9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM2ODppbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjkte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDA2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MDgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDA5OmludCBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTAtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoqaGVscGVyX3B0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MjI6XFx0ZXJyID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKG5ld19oZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMy1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzMy19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDM0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTUwNj1pbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUyMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1MjM6XFx0XFx0ZXJyID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKG5ld19oZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUyNC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM9MjU2PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jOjI4NDpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZpcmMsIFxcdTAwMjZpcmNfcHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yODUtXFx0aWYgKHJldCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmM6NTg6XFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNmhlbHBlciwgXFx1MDAyNmhlbHBlcl9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01OS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM9NTM4PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy01NDktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjU1MDpcXHRyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2cHB0cCwgXFx1MDAyNnBwdHBfcHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTUxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYz0xODA9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE5MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM6MTkxOlxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNnNhbmUsIFxcdTAwMjZzYW5lX3B0cik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM6NjA6XFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNmhlbHBlciwgXFx1MDAyNmhlbHBlcl9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy02MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM9MTA1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja190ZnRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jOjExNjpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZ0ZnRwLCBcXHUwMDI2dGZ0cF9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTctXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MjIwPW5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODEtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyODI6XFx0cmV0ID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKGhlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjQ1LjkxMTUxMTMyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDMyNjYxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBjaGFuZ2VzLlxuXG4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBhbmQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gdW5kZXJzdGFuZGluZyBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZSBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGNvcmUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVlbiBjaGFuZ2VkIGluIHRoYXQgZnVuY3Rpb247IGl0IHdpbGwgbGlrZWx5IGdpdmUgdGhlIGJlc3Qgb3ZlcnZpZXcgb2YgaG93IGNvbm50cmFjayBoZWxwZXIgYmVoYXZpb3IgaGFzIGJlZW4gbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6NTAuNjU0Nzc5ODEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjE2NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTU1PXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1NjpfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTc1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo3NjpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz03OT1uZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo4NTpcXHRoID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04Ni0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTkwLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo5MTpcXHRcXHRcXHRoID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy05Mi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTM0PW5mX25hdF9oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE0MS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTQyOlxcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE0My1cXHRpZiAoIWgpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xOTI2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5NTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE5NTY6XFx0aGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTk1Ny1cXHRcXHRcXHRcXHRcXHQgICAgbmZfY3RfcHJvdG9udW0oY3QpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMjIyPWN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMjUxOlxcdFxcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIyNTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mX2N0X3Byb3RvbnVtKGN0KSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI2MS1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjIyNjI6XFx0XFx0XFx0aGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIyNjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mX2N0X2wzbnVtKGN0KSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yODU2PWN0bmV0bGlua19nbHVlX2F0dGFjaF9leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4ODAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI4ODE6XFx0XFx0YXNzaWduX2hlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5mX2N0X2wzbnVtKGN0KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6NTAuNzI5MDAxMzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxNjE4NDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29ubnRyYWNrIEhlbHBlciBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgdG91Y2hpbmcgb24gdGhlIGZ1bmN0aW9uYWwgYXNwZWN0cyBhbmQgc2hvdWxkIGJlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB3aXRoIHRob3NlIGBuZm5ldGxpbmtfY3RoZWxwZXJgIGFuZCBgY3RuZXRsaW5rYCBpbnRlcmZhY2VzLiBBbmQgb2YgY291cnNlLCB0aGUgbG9hZGluZyBvZiB0aGUgY29ubnRyYWNrIGhlbHBlciBtb2R1bGVzIHdpbGwgYmUga2V5LlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2UgY29yZSBmdW5jdGlvbnM6IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYXMgd2VsbCBhcyB0aGUgbmV0bGluayBpbnRlcmZhY2Ugb3BlcmF0aW9uczogYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYW5kIGBuZm5sX2N0aGVscGVyX2RlbGAuIFRoZXNlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgaGVscGVyIHN5c3RlbS5cblxuQW5kIHRoZW4gdGhlcmUncyB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zOiBgTkZfQ09OTlRSQUNLYCwgbmF0dXJhbGx5LCBhbmQgYE5GX0NUX05FVExJTktfSEVMUEVSYCB3aGljaCBJIHN1c3BlY3QgaXMgdGhlIGNvbmZpZyByZXF1aXJlZCBmb3IgbmV0bGluaywgYW5kIHRoZW4gYWxsIHRob3NlIGhlbHBlci1zcGVjaWZpYyBvcHRpb25zIGZvciBwcm90b2NvbHMgc3VjaCBhcyBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBhbmQgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLlxuXG5XYWl0IGEgbWludXRlLCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgaXMgdmVyeSBsaWtlbHkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZWQgdG8gYG5mbmV0bGlua19jdGhlbHBlci5jYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgY29uZmlnIG9wdGlvbiB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTo1OC4wNDUxODgwMzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjE0OTQ1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX2N0aGVscGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6NTguMzM3MzQ2NzgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDk2NjM5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBJdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIGZpbGUgZm9yIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLCBhbmQgdGhlIHBsYWNlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgSSBuZWVkIHRvIGV4YW1pbmUuIEknbGwgc3RhcnQgaGVyZSwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIG9mdGVuIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgdG8gbG9vayBmb3IgZGVlcGVyIGNvZGUgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDowMS41NDcwMTM1MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NzIzNDM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5ldGxpbmtfY3RoZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM4PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSArPSBuZm5ldGxpbmtfY3RoZWxwZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjAzLjIyNDI1MzY1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjA4MzM4MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIE5ldGZpbHRlciBjb25maWd1cmF0aW9ucy4gWWVzLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQuIEl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2UuXG5cbk5vdywgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGNvbmNlcm5pbmcgY29ubmVjdGlvbiB0cmFja2luZywgYXMgdGhlc2UgYXJlIG9mdGVuIGludGVyY29ubmVjdGVkLiBSaWdodCwgaGVyZSB3ZSBnbzogYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1RGVFBgLCBgTkZfQ09OTlRSQUNLX1NOTVBgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBhbmQgZmluYWxseSwgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBzZXR0aW5ncywgYW5kIHRoZWlyIHJlc3BlY3RpdmUgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZWAuIFRoaXMgd2lsbCBwcm92aWRlIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoxMi40MzI1OTQ2NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTM3OTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfZnRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgKz0gbmZfY29ubnRyYWNrX2FtYW5kYS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgKz0gbmZfY29ubnRyYWNrX2Z0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICs9IG5mX2Nvbm50cmFja19oMzIzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MTIuODYxOTc4Njk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTM3OTgyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIGBORl9DT05OVFJBQ0tgIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgc28gbGV0J3Mgc3RhcnQgd2l0aCBhIGxpc3Q6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS19JUkNgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAsIGFuZCBmaW5hbGx5LCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAuIFJpZ2h0LCBnb3QgaXQuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4gVGhhdCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgZW50cnkgZmVlbHMgb3V0IG9mIHBsYWNlIGluIHRoYXQgbGlzdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3Mgb2Z0ZW4gaW1wbGljaXRseSBhY3RpdmF0ZWQgd2hlbiBlaXRoZXIgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBvciBgTkZfQ09OTlRSQUNLX1NOTVBgIGlzIGVuYWJsZWQsIGFuZCB0eXBpY2FsbHkgc2hvdWxkbid0IGJlIGxpc3RlZCBpbmRlcGVuZGVudGx5LiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjE3LjY1NTc3OTQ5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwODU3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTI1OD1jb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTI3Nz1jb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzk6XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjgwLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yOTY9Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk4LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5OTpcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDAtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoxNy43MTA4NzEzNTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDQxMTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU3RyZWFtbGluaW5nIHRoZSBOZXRmaWx0ZXIgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBpdCBzZWVtcyB1bm5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGVudW1lcmF0ZSBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAuIEkgY2FuIGluZmVyIHRoYXQgYmFzZWQgb24gdGhlIGNvbnRleHQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgdGhhdCBvdmVyaGVhZC4gTGV0J3MgbW92ZSBvbiBhbmQgZW5zdXJlIHdlJ3JlIHRob3JvdWdoLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIHVzYWdlIGFuZCBjb250ZXh0IG9mIGBORl9DT05OVFJBQ0tfU05NUGAgd2l0aGluIHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlYCBmaWxlLiBDaGVja2luZyB0aGF0IE1ha2VmaWxlIHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MjAuODg1Mjg0OTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDI2MzIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfc25tcF9iYXNpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19ORl9OQVRfUFBUUCkgKz0gbmZfbmF0X3BwdHAub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0xOC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfbmF0X3NubXBfYmFzaWMteSA6PSBuZl9uYXRfc25tcF9iYXNpYy5hc24xLm8gbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwOiQob2JqKS9uZl9uYXRfc25tcF9iYXNpY19tYWluLm86ICQob2JqKS9uZl9uYXRfc25tcF9iYXNpYy5hc24xLmhcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05GX05BVF9TTk1QX0JBU0lDKSArPSBuZl9uYXRfc25tcF9iYXNpYy5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoyMC45Njk1NTUxNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NjU4Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU05NUCBOQVQgTW9kdWxlKipcblxuUmlnaHQsIHNvIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIGJhc2ljIFNOTVAgTkFUIGltcGxlbWVudGF0aW9uLCBhbmQgaXQncyBjb21waWxlZCBjb25kaXRpb25hbGx5IHVuZGVyIGBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGUgb2JqZWN0IGZpbGUuIFdoZXJlIGRvZXMgYG5mX2Nvbm50cmFja19zbm1wLm9gIGxpdmU/IEl0J3MgbGlrZWx5IGJ1aWx0IGFzIHBhcnQgb2YgdGhlIG1haW4gYG5ldGZpbHRlcmAgc3Vic3lzdGVtLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCdsbCBjb25maXJtIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBsaW5raW5nIGlzc3Vlcy4gSXQncyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjI0LjQxNjE0NTI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNTIwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3NubXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQ5PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUykgKz0gbmZfY29ubnRyYWNrX25ldGJpb3NfbnMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TTk1QKSArPSBuZl9jb25udHJhY2tfc25tcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS01MS1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFApICs9IG5mX2Nvbm50cmFja19wcHRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MjQuNDg4NTAxNTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTk1OTUzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIHN0dWZmLCBzcGVjaWZpY2FsbHkgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0ZUUGAsIGFuZCBzbyBvbiwgYWxsIHRoZSB3YXkgZG93biB0byBgTkZfTkFUX1NOTVBfQkFTSUNgLiBDbGVhcmx5LCB0aGVzZSBhbGwgcmVsYXRlIHRvIGVuYWJsaW5nIGFuZCBjb25maWd1cmluZyB2YXJpb3VzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycy4gSSBzZWUgYSBicm9hZCBhcnJheSwgaW5jbHVkaW5nIHByb3RvY29scyBsaWtlIEZUUCwgSC4zMjMsIElSQywgYW5kIGV2ZW4gU05NUC4gR29vZCwgSSBsaWtlIHRoYXQgdGhlIG1vZHVsZXMgYXJlIHNlcGFyYXRlZCBieSBzcGVjaWZpYyBuZWVkcy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBoZWxwZXIgbWFuYWdlbWVudDogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBhbmQgYG5mbmxfY3RoZWxwZXJfZGVsYC4gVGhlc2UgY2xlYXJseSBkZWFsIHdpdGggcmVnaXN0ZXJpbmcsIHVucmVnaXN0ZXJpbmcsIGZpbmRpbmcsIGFuZCBtYW5hZ2luZyB0aGUgaGVscGVyIG1vZHVsZXMgdGhlbXNlbHZlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFRoZSBgbmZubF8qYCBmdW5jdGlvbnMgaW5kaWNhdGUgdGhlIHVzZSBvZiBOZXRsaW5rIGZvciBjb21tdW5pY2F0aW9uLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgYG5mbmV0bGlua19jdGhlbHBlci5jYCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIHRoYXQncyBiZWVuIHRvdWNoZWQgaW4gdGhhdCBmaWxlLiBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgZmlsZSBpdHNlbGYuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlbid0IGluY2x1ZGVkIGluIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBjb3VsZCByZXZlYWwgaW1wb3J0YW50IGNvbnRleHQgdGhhdCBtaWdodCBnZXQgbWlzc2VkIGlmIEkgb25seSBsb29rZWQgYXQgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoyOS42NDgwOTk5OTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODQyMjYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzM9c3RydWN0IG5mbmxfY3RoZWxwZXIge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjM4OnN0YXRpYyBMSVNUX0hFQUQobmZubF9jdGhlbHBlcl9saXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM5LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00MT1uZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYKzFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzAtXFx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMTYsIE5GUFJPVE9fSVBWNiksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1Om5mbmxfY3RoZWxwZXJfcGFyc2VfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTgxLVxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfVFVQTEVfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6ODI6XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy04My1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9OTg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6OTk6bmZubF9jdGhlbHBlcl9mcm9tX25sYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xMDAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xMTg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTE5Om5mbmxfY3RoZWxwZXJfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEyMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEzNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjEzODpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9sW05GQ1RIX1BPTElDWV9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xMzktXFx0W05GQ1RIX1BPTElDWV9OQU1FXSA9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTQ1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE0NjpuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTQ3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNTItXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTUzOlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9sLCBOVUxMKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE1NC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc2Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzctXFx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTgxOm5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTgyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTg4LVxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfUE9MSUNZX1NFVF9NQVgsIGF0dHIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxODk6XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTkwLVxcdFxcdFxcdFxcdFxcdCAgTlVMTCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIwNi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjIwNzpcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koXFx1MDAyNmhlbHBlci1cXHUwMDNlZXhwZWN0X3BvbGljeVtpXSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIwOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHRiW05GQ1RIX1BPTElDWV9TRVQraV0pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yMTk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjIwOm5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjIxLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0Mi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI0MzpcXHRyZXQgPSBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3koaGVscGVyLCB0YltORkNUSF9QT0xJQ1ldKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjYxLVxcdGhlbHBlci1cXHUwMDNlaGVscCA9IG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjYyOlxcdGhlbHBlci1cXHUwMDNlZnJvbV9ubGF0dHIgPSBuZm5sX2N0aGVscGVyX2Zyb21fbmxhdHRyO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjYzOlxcdGhlbHBlci1cXHUwMDNldG9fbmxhdHRyID0gbmZubF9jdGhlbHBlcl90b19ubGF0dHI7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yNjQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI4NS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI4NjpcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuZmN0aC1cXHUwMDNlbGlzdCwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTI5NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyOTY6bmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI5Ny1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMwMy1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9NQVgsIGF0dHIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMDQ6XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzA1LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMjYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzQ3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzQ4OlxcdFxcdHJldCA9IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmUoXFx1MDAyNmhlbHBlci1cXHUwMDNlZXhwZWN0X3BvbGljeVtpXSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM0OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmV3X3BvbGljeVtpXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzY3OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNjgtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3NC1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc1OlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ni1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zODYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozODc6XFx0cmV0dXJuIG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwodGIsIGhlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zODgtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0zOTA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzkxOm5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzkyLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDAzLVxcdGlmICh0YltORkNUSF9QT0xJQ1ldKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MDQ6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KGhlbHBlciwgdGJbTkZDVEhfUE9MSUNZXSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MDUtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQyNS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjQyNjpzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfbmV3KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjctXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDQzOlxcdHJldCA9IG5mbmxfY3RoZWxwZXJfcGFyc2VfdHVwbGUoXFx1MDAyNnR1cGxlLCB0YltORkNUSF9UVVBMRV0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQ0LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00NDYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0NDc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShubGN0aCwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQ4LVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ2NC1cXHRpZiAoaGVscGVyID09IE5VTEwpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0NjU6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9jcmVhdGUodGIsIFxcdTAwMjZ0dXBsZSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00NjYtXFx0ZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDY3OlxcdFxcdHJldCA9IG5mbmxfY3RoZWxwZXJfdXBkYXRlKHRiLCBoZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDY4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00NzI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDczOm5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDc0LVxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00OTY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDk3Om5mbmxfY3RoZWxwZXJfZHVtcF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ5OC1cXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz01Mzc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTM4Om5mbmxfY3RoZWxwZXJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIHUzMiB0eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTM5LVxcdFxcdFxcdGludCBldmVudCwgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTU2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTU3OlxcdGlmIChuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGUoc2tiLCBoZWxwZXIpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjU2MDpcXHRpZiAobmZubF9jdGhlbHBlcl9kdW1wX3BvbGljeShza2IsIGhlbHBlcikgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTYxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz01ODM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTg0Om5mbmxfY3RoZWxwZXJfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy01ODUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MDYtXFx0XFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjA3OlxcdFxcdFxcdGlmIChuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MDgtXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MjUtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjI3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY0MS1cXHRcXHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjY0MjpcXHRcXHRcXHQuZHVtcCA9IG5mbmxfY3RoZWxwZXJfZHVtcF90YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY0My1cXHRcXHR9O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTAtXFx0aWYgKHRiW05GQ1RIX1RVUExFXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjUxOlxcdFxcdHJldCA9IG5mbmxfY3RoZWxwZXJfcGFyc2VfdHVwbGUoXFx1MDAyNnR1cGxlLCB0YltORkNUSF9UVVBMRV0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjUyLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTctXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2NTg6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShubGN0aCwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjU5LVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY3NC1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjY3NTpcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhza2IyLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjc2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02OTAtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2OTE6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjkyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTcwNy1cXHRpZiAodGJbTkZDVEhfVFVQTEVdKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3MDg6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShcXHUwMDI2dHVwbGUsIHRiW05GQ1RIX1RVUExFXSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MDktXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTcxNS1cXHRyZXQgPSAtRU5PRU5UO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzE2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShubGN0aCwgbiwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzE3LVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTczOS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc0MDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl9wb2xpY3lbTkZDVEhfTUFYKzFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQxLVxcdFtORkNUSF9OQU1FXSA9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzQ4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZm5sX2N0aGVscGVyX2NiW05GTkxfTVNHX0NUSEVMUEVSX01BWF0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NDktXFx0W05GTkxfTVNHX0NUSEVMUEVSX05FV11cXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MDpcXHRcXHQuY2FsbFxcdFxcdD0gbmZubF9jdGhlbHBlcl9uZXcsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTEtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfTVVURVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTItXFx0XFx0LmF0dHJfY291bnRcXHQ9IE5GQ1RIX01BWCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MzpcXHRcXHQucG9saWN5XFx0XFx0PSBuZm5sX2N0aGVscGVyX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU0LVxcdH0sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTUtXFx0W05GTkxfTVNHX0NUSEVMUEVSX0dFVF0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTY6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfZ2V0LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU3LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU4LVxcdFxcdC5hdHRyX2NvdW50XFx0PSBORkNUSF9NQVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTk6XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZubF9jdGhlbHBlcl9wb2xpY3lcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc2MC1cXHR9LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYxLVxcdFtORk5MX01TR19DVEhFTFBFUl9ERUxdXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NjI6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfZGVsLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYzLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzY0LVxcdFxcdC5hdHRyX2NvdW50XFx0PSBORkNUSF9NQVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NjU6XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZubF9jdGhlbHBlcl9wb2xpY3lcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc2Ni1cXHR9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5mbmxfY3RoZWxwZXJfc3Vic3lzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzcwLVxcdC5uYW1lXFx0XFx0XFx0XFx0PSBcXFwiY3RoZWxwZXJcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NzItXFx0LmNiX2NvdW50XFx0XFx0XFx0PSBORk5MX01TR19DVEhFTFBFUl9NQVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NzM6XFx0LmNiXFx0XFx0XFx0XFx0PSBuZm5sX2N0aGVscGVyX2NiLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc0LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc3Nj1NT0RVTEVfQUxJQVNfTkZOTF9TVUJTWVMoTkZOTF9TVUJTWVNfQ1RIRUxQRVIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzc4OnN0YXRpYyBpbnQgX19pbml0IG5mbmxfY3RoZWxwZXJfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzgyOlxcdHJldCA9IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoXFx1MDAyNm5mbmxfY3RoZWxwZXJfc3Vic3lzKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc4My1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03OTEtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3OTI6c3RhdGljIHZvaWQgX19leGl0IG5mbmxfY3RoZWxwZXJfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzkzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzk3OlxcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcXHUwMDI2bmZubF9jdGhlbHBlcl9zdWJzeXMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzk4LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzk5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShubGN0aCwgbiwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtODAwLVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTgwNi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjgwNzptb2R1bGVfaW5pdChuZm5sX2N0aGVscGVyX2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6ODA4Om1vZHVsZV9leGl0KG5mbmxfY3RoZWxwZXJfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjI5Ljk5NjUyNzg2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUwMTc3MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIENvbm50cmFjayBIZWxwZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oZWxwZXIuY2AgZmlsZS4gVGhlIGNvcmUgb25lcyB0byBmb2N1cyBvbiBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uIGFyZTogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBhbmQgYG5mbmxfY3RoZWxwZXJfZGVsYC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgY3J1Y2lhbCByZWdpc3RyYXRpb24sIGxvb2t1cCwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiBtZWNoYW5pc21zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBpdCdzIHdvcnRoIGEgcXVpY2sgc3dlZXAgb2YgdGhhdCBmaWxlLiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGZ1bmN0aW9uIHRoYXQgd2FzIHRvdWNoZWQgZHVyaW5nIHRoZSBjaGFuZ2VzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjMzLjk0NjcwODg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIxMjM2NzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oZWxwZXIuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MzQuMDQ4ODQzNjk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDEwNTE0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBgaGVscGVyX2hhc2hgIGluIGBuZl9jb25udHJhY2tfaGVscGVyLmNgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ubnRyYWNrIGhlbHBlciBpc3N1ZS4uLiBXaGVyZSBzaG91bGQgSSBzdGFydCBteSBpbnZlc3RpZ2F0aW9uPyBUaGUga2VybmVsJ3MgY29ubnRyYWNrIGhlbHBlciBpbXBsZW1lbnRhdGlvbiBpcyBjb21wbGV4LiBMZXQncyBzZWUuLi4gYSBxdWljayBtZW50YWwgcmV2aWV3IHN1Z2dlc3RzIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBsaWtlbHkgdG8gaW52b2x2ZSB0aGUgaGVscGVyIGhhc2ggdGFibGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBzdG9yZXMgdGhlc2UgaGVscGVycy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgYW5kIHNwZWNpZmljYWxseSBncmVwIGZvciBgaGVscGVyX2hhc2hgLiBJdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgY29kZSB0aGF0IG1hbmFnZXMgdGhlIGhlbHBlcidzIGludGVybmFsIHN0cnVjdHVyZSBpbiB0aGF0IG1vZHVsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgYW5kIGluaXRpYWwgY29udGV4dCBJIG5lZWQgdG8gcHVyc3VlIHRoaXMgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjM5LjE0OTg5NzgwNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MDY0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGVscGVyX2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MzM9c3RhdGljIERFRklORV9NVVRFWChuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM0OnN0cnVjdCBobGlzdF9oZWFkICpuZl9jdF9oZWxwZXJfaGFzaCBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9oYXNoKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNi11bnNpZ25lZCBpbnQgbmZfY3RfaGVscGVyX2hzaXplIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MT1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzOnN0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3QgY2hhciAqbmFtZSwgdTggcHJvdG9udW0pXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTY9X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjYxOlxcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNjItXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NjQ6XFx0aSA9IGhlbHBlcl9oYXNoKG5hbWUsIHByb3RvbnVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo2NjpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTY3LVxcdFxcdGlmIChzdHJjbXAoaC1cXHUwMDNlbmFtZSwgbmFtZSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zNjg9aW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNzYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6Mzc3OlxcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzc4LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM4ODpcXHRoID0gaGVscGVyX2hhc2gobWUtXFx1MDAzZW5hbWUsIG1lLVxcdTAwM2VsNHByb3RvKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zODktXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozOTA6XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaF0sIGhub2RlKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzkxLVxcdFxcdGlmICghc3RyY21wKGN1ci1cXHUwMDNlbmFtZSwgbWUtXFx1MDAzZW5hbWUpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MDAtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZS1cXHUwMDNlY3RfcmVmY250LCAxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDE6XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZtZS1cXHUwMDNlaG5vZGUsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDAyLVxcdG5mX2N0X2hlbHBlcl9jb3VudCsrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTY2PWludCBuZl9jb25udHJhY2tfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU2OC1cXHRuZl9jdF9oZWxwZXJfaHNpemUgPSAxOyAvKiBnZXRzIHJvdW5kZWQgdXAgdG8gdXNlIG9uZSBwYWdlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTY5OlxcdG5mX2N0X2hlbHBlcl9oYXNoID1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01NzAtXFx0XFx0bmZfY3RfYWxsb2NfaGFzaHRhYmxlKFxcdTAwMjZuZl9jdF9oZWxwZXJfaHNpemUsIDApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjU3MTpcXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3Mi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTU3OD12b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZmluaSh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3OS17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTgwOlxcdGt2ZnJlZShuZl9jdF9oZWxwZXJfaGFzaCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTgxOlxcdG5mX2N0X2hlbHBlcl9oYXNoID0gTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01ODItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDozOS4yMjQ3MTAzMTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYyODM2ODg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHNpZ25pZmljYW50IHJlZmFjdG9yIHVuZGVyd2F5LiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkb3B0aW9uIG9mIGBqaGFzaGAgd2l0aGluIHRoZSBgaGVscGVyX2hhc2hgIGZ1bmN0aW9uLCB3aGljaCByZXBsYWNlcyB0aGUgc2ltcGxlciBiaXR3aXNlIG9wZXJhdGlvbi4gVGhhdCdzIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBnb29kIHRvIHNlZS5cblxuQmV5b25kIHRoZSBoYXNoaW5nLCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBgbmZfY3RfaGVscGVyX2luaXRgIGZ1bmN0aW9uIGhhcyBhbHNvIGJlZW4gdHdlYWtlZC4gQW5kIHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaCB0aGUgY29yZSBoZWxwZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyB0byBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCBhbmQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYC4gSXQncyBjbGVhciB0aGF0IHRoZSBuZXcgaGFzaCBmdW5jdGlvbiBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbmZwcm90b2AgYW5kIGBsNHByb3RvYCBmaWVsZHMgYXJlIGJlaW5nIGludGVncmF0ZWQgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlc2UgaW1wYWN0IG92ZXJhbGwgcGVyZm9ybWFuY2UuXG5cblRoZW4gdGhlcmUncyB0aGUgYG5mbmV0bGlua19jdGhlbHBlci5jYCBmaWxlLiBUaGUgY2hhbmdlcyB0aGVyZSwgd2l0aGluIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGFuZCBgbmZubF9jdGhlbHBlcl9jcmVhdGVgLCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmaWVsZHMgdG9vLCBpbmRpY2F0aW5nIHRoYXQgdGhleeKAmXJlIGJlaW5nIGhhcm1vbml6ZWQgd2l0aCB0aGUgdXBkYXRlZCBoZWxwZXIgbW9kZWwsIHdoaWNoIGlzIG5lY2Vzc2FyeS4gSSBleHBlY3Qgc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvciBidWcgZml4ZXMgaGVyZS5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgaW1wYWN0ZWQuIE9rYXksIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgdGhlbiB0aGUgbW9yZSBzcGVjaWZpYyBoZWxwZXJzOiBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS19JUkNgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyBgTkZfTkFUX1NOTVBfQkFTSUNgIGludGVyYWN0cyB3aXRoIGFsbCBvZiB0aGlzLiBBaCwgYW5kIGl0J3MgZm9yIGBuZl9uYXRfc25tcF9iYXNpY19tYWluLmNgIHNvIGl0J3MgcHJvYmFibHkgbm90IGRpcmVjdGx5IGFmZmVjdGVkIGhlcmUuIEFscmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSBieSBsb29raW5nIGF0IHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE9rYXksIGdvb2QuIFRoYXQgc2hvdWxkIGJlIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjQ2Ljg1MzA4MjU5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTg1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTAwOmNvbmZpZyBORl9OQVRfU05NUF9CQVNJQ1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiQmFzaWMgU05NUC1BTEcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6NDYuOTEzMzA2MjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTAxNjc3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTmV0d29yayBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgY29uZmlybWluZyB0aGF0IGBORl9OQVRfU05NUF9CQVNJQ2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZsYWcgdG8gYmUgZm9jdXNpbmcgb24uIEdpdmVuIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0byBmaWxlcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY2AsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBjb25uZWN0aW9uIHRyYWNraW5nIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQga2VybmVsIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZXhhY3QgZmlsZW5hbWUuIEl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBhbiBgb3BlbnZzd2l0Y2hgIG1vZHVsZSwgc28gSSBzaG91bGQgY2hhbmdlIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDo1MS41MjM0NzY0MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzY3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19vdnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xND1uZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgKz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX09WUykgKz0gbmZfY29ubnRyYWNrX292cy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNi1uZl9jb25udHJhY2stJChDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCkgKz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDo1MS42MTQ4NDk2NTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzk0ODg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBgQ09ORklHX05GX0NPTk5UUkFDS19PVlNgIG9wdGlvbi4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyB0aGF0J3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgTmV0ZmlsdGVyLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG9wdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGtleSB0byBhc3Nlc3NpbmcgaXRzIHJlbGV2YW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3NjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDo1NC44NDI4MDE3NzhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjcwNzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9DT05OVFJBQ0tfT1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTg4PWNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6NTUuMTI1NTE0MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1OTU5OTM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBhIEJvb2xlYW4gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYm9vbGVhbiBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5ICp1c2luZyogdGhpcyB0aGluZy5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCB3aGVyZSBpdCdzIGJlaW5nIGV2YWx1YXRlZCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgaWYgaXQncyB0b2dnbGVkLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcXVpY2tseSBpZGVudGlmeWluZyBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMuIEknbSBlc3NlbnRpYWxseSB0cmFjaW5nIGl0cyB1c2FnZSDigJMgd2hpY2ggbW9kdWxlcywgZnVuY3Rpb25zLCBvciBldmVuIG90aGVyIGNvbmZpZ3MgcmVmZXJlbmNlIG9yIGRlcGVuZCBvbiBpdHMgc3RhdGU/IElzIGl0IGp1c3QgYSBzaW1wbGUgZmxhZywgb3IgZG9lcyBpdHMgdmFsdWUgZGlyZWN0bHkgaW5mbHVlbmNlIGNyaXRpY2FsIGNhbGN1bGF0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHJlc291cmNlIGFsbG9jYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIG5vdCBiZSBqdXN0IGEgc2ltcGxlIHNpbmdsZSBsaW5lIG9mIHVzYWdlLiBTbyBJJ2xsIGdvIHRocm91Z2ggYW5kIGNoZWNrIHRoaXMgaXRlbSBmb3IgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHZhbHVlIHRoaXMgY29uZmlnIHJlcHJlc2VudHMgYW5kIHVuZGVyc3RhbmQgdGhlIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA0MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjU5LjQ4NTExNzAzN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MTc4MDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWc9Nj1jb25maWcgT1BFTlZTV0lUQ0hcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTE4LVxcdHNlbGVjdCBORVRfTlNIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTk6XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctMjAtXFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1RcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOS1cXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiAoIU5GX05BVCB8fCBORl9OQVQpIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5uZXQvc2NoZWQvS2NvbmZpZzo5MjA6XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvc2NoZWQvS2NvbmZpZy05MjEtXFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjExOjAxLjc1NjkwNjg3OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjY3MzMwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbm50cmFjayBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSByZWxhdGUgdG8gT3BlbiB2U3dpdGNoLiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBPUEVOVlNXSVRDSGAgYW5kIGBORVRfQUNUX0NUYCBzZWVtIGxpa2UgdGhlIGtleSBkcml2ZXJzIGhlcmUsIGFuZCBlbmFibGluZyB0aGVtIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIGp1c3Qga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNvbmZpZ3MgdGhlbXNlbHZlczogYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGFuZCB0aGUgdmFyaW91cyBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoZWxwZXJzOiBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgZXRjLiBSaWdodCBub3cgaXQncyBqdXN0IGEgcmF3IGxpc3QuXG5cbldhaXQgYSBzZWNvbmTigKYgYE5GX0NPTk5UUkFDS19PVlNgIGlzIGEgYm9vbGVhbi4gSWYgSSBlbmFibGUgYE9QRU5WU1dJVENIYCBhbmQgYE5FVF9BQ1RfQ1RgLCB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBgTkZfQ09OTlRSQUNLX09WU2AuIFRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIsIGFzIGl0IHJlZHVjZXMgdGhlIGNvbXBsZXhpdHkgb2YgZXhwbGljaXRseSBtYW5hZ2luZyB0aGF0IGNvbmZpZyBzZXBhcmF0ZWx5LlxuXG5MZXQncyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlncy4gQWhhISBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgIGFuZCBgTkZfQ09OTlRSQUNLX1NOTVBgLiBJbnRlcmVzdGluZy5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBmb2N1cyBzeW1ib2xzLiBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgaGVscGVyIGZ1bmN0aW9uczogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAsIGFuZCBgbmZfY3RfaGVscGVyX2luaXRgLlxuXG5BaCwgaGVyZSdzIGEgZ29vZCBvbmU6IGBuZl9jdF9oZWxwZXJfaW5pdGAuIEl0IHNlZW1zIGxpa2UgKmFsbCogdGhlIGhlbHBlciBtb2R1bGVzIGFyZSBjYWxsaW5nIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGF04oCZcyBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgYGhlbHBlcl9oYXNoYC4gSXQncyBzdGF0aWMsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgdXNlIGl0IGFzIGEgc3ltYm9sIHRvIGFuYWx5emUgdGhlIGNvZGUuIEhvd2V2ZXIsIGl0J3MgY2FsbGVkIGJ5IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBzbyB0aG9zZSBhcmUgc3RpbGwgZ29vZCBzeW1ib2xzIHRvIGZvY3VzIG9uLlxuXG5XYWl0LCB0aGVyZSBpcyBhbHNvIGBuZl9jdF9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY2AuIExldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ5MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxMC40MjQyNDAwNzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODYzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy0xMS0vKiAnc2tiJyBzaG91bGQgYWxyZWFkeSBiZSBwdWxsZWQgdG8gbmhfb2ZzLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjEyOmludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTEzLVxcdFxcdCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywgdTE2IHByb3RvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtODItfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjgzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtODQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9ODU9aW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy05NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYzo5NjpcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTk3LVxcdGlmICghaGVscCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxMC40ODIxMDg5NjJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2ODcyMDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBgbmZfY3RfaGVscGVyYCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYG5mX2N0X2hlbHBlcmAgaXMgaW5kZWVkIGV4cG9ydGVkIGFuZCwgY3J1Y2lhbGx5LCAqbW9kaWZpZWQqLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSB3YXkgaXQgd29ya3MsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgY2hlY2tpbmcgYGhlbHBlci1cdTAwM2VuZnByb3RvYCBhbmQgYGhlbHBlci1cdTAwM2VsNHByb3RvYC4gVGhpcyBtYWtlcyBgbmZfY3RfaGVscGVyYCBhIHN0cm9uZyBjYW5kaWRhdGUgLSBhIGdvb2Qgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYG5mX2Nvbm50cmFja19icm9hZGNhc3QuY2AuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4ODMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxNC40NTA4MzI4OTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4Mzk2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0xNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYzoxODppbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtMTktXFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtODgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jOjg5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtOTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjExOjE0LjUyOTIzNDg5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3MTU5NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbmZfY29ubnRyYWNrYCBCcm9hZGNhc3QgSGVscGVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXkgcmVtb3ZlZCB0aGF0IGxpbmUsIGBleHAtXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQgPSBoZWxwZXItXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQ7YCwgZnJvbSBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW1wYWN0LiBJIGNhbiBjZXJ0YWlubHkgc2VlIHdoeSB0aGlzIGNoYW5nZSBtaWdodCBiZSBzaWduaWZpY2FudCwgYW5kIGl0J3MgYSBnb29kIHBsYWNlIHRvIGZvY3VzLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgdGhpcyBoYXMgaW1wbGljYXRpb25zIGVsc2V3aGVyZS4gTGV0J3MgZGVsdmUgaW50byBgbmZfY29ubnRyYWNrX2FtYW5kYS5jYCBhbmQgc2VlIGlmIHRoZSBBbWFuZGEgbW9kdWxlIGlzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBwb3J0IGFzc2lnbm1lbnQsIGFuZCBob3cgaXTigJlzIGJlaW5nIGhhbmRsZWQgb3IgY2lyY3VtdmVudGVkIG5vdy4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGlzIGhhcyB0aGUgZGVzaXJlZCBvdXRjb21lIG9yIGlmIGl0IGhhcyBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbi4gSSB3aWxsIHByb2NlZWQgd2l0aCBjYXV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzI3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjExOjE4Ljg3NjM5Njk1NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwODIwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1hbmRhX2hlbHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9NTI9c3RhdGljIHN0cnVjdCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzo4MzpzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtODQtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMTA3LVxcdGlmIChkYXRhb2ZmIFxcdTAwM2U9IHNrYi1cXHUwMDNlbGVuKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTA4OlxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcImFtYW5kYV9oZWxwOiBza2JsZW4gPSAldVxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTEwOS1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgYW1hbmRhX2V4cF9wb2xpY3kgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTcyOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBhbWFuZGFfaGVscGVyWzJdIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTczOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYW1hbmRhX2hlbHBlcl9wdHJbMl0gX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTc1PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfYW1hbmRhX2Zpbmkodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxNzk6XFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihhbWFuZGFfaGVscGVyX3B0cixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxODA6XFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShhbWFuZGFfaGVscGVyX3B0cikpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzZWFyY2gpOyBpKyspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xODU9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjAxOlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZhbWFuZGFfaGVscGVyWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDItXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDM6XFx0XFx0XFx0ICBcXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA0OlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZhbWFuZGFfaGVscGVyWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjA1LVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA2OlxcdFxcdFxcdCAgXFx1MDAyNmFtYW5kYV9leHBfcG9saWN5LCAwLCBhbWFuZGFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDg6XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoYW1hbmRhX2hlbHBlcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDk6XFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoYW1hbmRhX2hlbHBlciksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjEwOlxcdFxcdFxcdFxcdFxcdCAgICBhbWFuZGFfaGVscGVyX3B0cik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjExLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxOC45NjA0ODM2NDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MTIwODkzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0OiBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZl9jdF9oZWxwZXJfaW5pdGAgaW4gYSBidW5jaCBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBtb2R1bGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZSBnb2luZyB0byBiZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG9mIHRoZXNlIG1vZHVsZXMsIG9yIHBlcmhhcHMganVzdCBgbmZfY3RfaGVscGVyX2luaXRgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCBkaXJlY3RseS4gSG93ZXZlciwgc2luY2UgdGhlIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgb25seSBvbmNlIGR1cmluZyBtb2R1bGUgbG9hZCwgZnV6emluZyB0aG9zZSBkaXJlY3RseSBwcm9iYWJseSB3b24ndCBiZSBhcyBmcnVpdGZ1bCBhcyB0YXJnZXRpbmcgdGhpbmdzIHRoYXQgYXJlIGNvbnN0YW50bHkgaW4gdXNlLlxuXG5UaGUgcmVhbCBtZWF0IHdpbGwgbGlrZWx5IGJlIGluIHRoZSBuZXRsaW5rIGludGVyZmFjZSDigJMgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYG5mbmxfY3RoZWxwZXJfZGVsYCwgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYCDigJMgYW5kLCBjcnVjaWFsbHksIHRoZSBwYWNrZXQgcGF0aCBpdHNlbGY6IGBuZl9jdF9oZWxwZXJgIGFuZCBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwYC4gRG9uJ3QgZm9yZ2V0LCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgcGFja2V0IG1hdGNoZXMgYSBoZWxwZXIgb3Igd2hlbiBvbmUgaXMgYXNzaWduZWQgdmlhIG5ldGxpbmsgb3IgbmZ0YWJsZXMuXG5cblNvLCBsZXQgbWUgc3VtbWFyaXplIHRoZSBrZXkgZm9jdXMgc3ltYm9sczpcbiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYFxuKiAgIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGBcbiogICBgbmZfY3RfaGVscGVyX2luaXRgXG4qICAgYG5mbmxfY3RoZWxwZXJfbmV3YFxuKiAgIGBuZm5sX2N0aGVscGVyX2dldGBcbiogICBgbmZubF9jdGhlbHBlcl9kZWxgXG4qICAgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYFxuKiAgIGBuZl9jdF9oZWxwZXJgXG4qICAgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGBcblxuTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGV0J3MgbmFpbCBkb3duIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMuIEkgc2VlIGEgYnVuY2ggb2Ygb3B0aW9ucyBsaXN0ZWQ6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS19JUkNgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAsIGBORl9OQVRfU05NUF9CQVNJQ2AsIGBPUEVOVlNXSVRDSGAsIGFuZCBgTkVUX0FDVF9DVGAuXG5cbldhaXQsIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBzZWxlY3RlZCBieSBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAsIHNvIEkgY2FuIGp1c3QgaW5jbHVkZSB0aG9zZSB0d28gaW5zdGVhZC5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgaXMgc2VsZWN0ZWQgYnkgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBhbmQgYE5GX0NPTk5UUkFDS19TTk1QYC4gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuTGV0IG1lIGNoZWNrIGlmIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBpbiBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIFllcywgSSBzZWUgdGhlIGVudHJ5OiBgb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19PVlMpICs9IG5mX2Nvbm50cmFja19vdnMub2AuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGRlcGVuZGVuY2llcy4gRG9lcyBgTkZfTkFUX1NOTVBfQkFTSUNgIHJlcXVpcmUgYE5GX05BVGA/IFllcywgaXQgZG9lcy4gSW5jbHVkZSBgTkZfTkFUYC5cblxuRG9lcyBgTkZfQ09OTlRSQUNLX1NOTVBgIHJlcXVpcmUgYE5FVEZJTFRFUl9BRFZBTkNFRGA/IFllcywgSSBuZWVkIGBORVRGSUxURVJfQURWQU5DRURgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSBvdGhlcnMuIERvZXMgYE5GX0NPTk5UUkFDS19QUFRQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfSDMyM2AgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLlxuRG9lcyBgTkZfQ09OTlRSQUNLX1NBTkVgIHJlcXVpcmUgYE5GX0NPTk5UUkFDS2A/IFllcy5cbkRvZXMgYE5GX0NPTk5UUkFDS19URlRQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfU0lQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfSVJDYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfRlRQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfQU1BTkRBYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLlxuRG9lcyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIHJlcXVpcmUgYE5GX0NUX05FVExJTktgPyBZZXMsIGl0IGRvZXMuIEluY2x1ZGUgYE5GX0NUX05FVExJTktgLlxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgZ290IGEgc29saWQgbGlzdCBvZiBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE5vd1xuXG4iLCJJbnB1dFRva2VucyI6Mzg2MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTE6MzEuMzcyNTc1MjNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjI4NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0NUX05FVExJTktfSEVMUEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzczPWNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM4NTpjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVxcdHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluaydcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTE6MzEuNDM3ODA5NTM4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODQyNzU3MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgTkZfQ1RfTkVUTElOS19IRUxQRVIqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHN1bW1hcml6ZSBhIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgKmRlcGVuZGVuY2llcyogb2YgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuIEkga25vdyBpdCdzIGEga2VybmVsIG1vZHVsZSwgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgdGhhdCBcIk5FVExJTktcIiBzdWdnZXN0cyBjb21tdW5pY2F0aW9uIHdpdGggdXNlcnNwYWNlLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlzc2VjdCB3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIHJlbGllcyB1cG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrIG1pZ2h0IGJlIGludGVncmF0ZWQsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyLXNwYWNlIHRvb2xzIGFuZCBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBoZWxwZXIgKnByb3ZpZGVzKiBhbmQgZnJvbSB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGl0J3MgdXNlZC4gVGhpcyBkZXBlbmRlbmN5IGFuYWx5c2lzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEknbGwgYmUgdGhpbmtpbmcgaW4gdGVybXMgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIHBvdGVudGlhbCBidWlsZCBvcmRlciBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3NDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMjowNy4yODA1NzAyM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5Njk5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM3Mz1jb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEyOjA3LjU3MDI3NDM4M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ0NTI1ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBzYXlzIHRvIGxvb2sgYXQgdGhlIGxpbmVzICphZnRlciogYGNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoaXMgaXMgYWJvdXQgTmV0ZmlsdGVyIGFuZCBsaWtlbHkgaXRzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLlwiIFRoYXQgYGNvbmZpZ2AgbGluZSBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgdGhlIHN1YnNlcXVlbnQgbGluZXMsIHdoZXJldmVyIHRoZXkgYXJlLCB3aWxsIHRlbGwgbWUgc29tZXRoaW5nIGFib3V0IGhvdyB0aGF0IG1vZHVsZSwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgaXMgY29uZmlndXJlZCBvciB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBLbm93aW5nIGhvdyB0aGF0IGNvbXBvbmVudCBpcyBjb25maWd1cmVkIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgYmVjYXVzZSBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBOZXRmaWx0ZXIgbW9kdWxlcyBhbmQga2VybmVsIHN1YnN5c3RlbXMuIEkgd2FudCB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgTmV0ZmlsdGVyIGluIHRlcm1zIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHBvdGVudGlhbCBuZXRsaW5rIGludGVyYWN0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yIG9mIGFueSBjdXN0b20gZmlyZXdhbGwgcnVsZXMgb3IgbmV0d29yayBhcHBsaWNhdGlvbnMgZGVwZW5kaW5nIG9uIHRoYXQgcGFydCBvZiB0aGUga2VybmVsLiBJIGFudGljaXBhdGUgc2VlaW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBtYXliZSBldmVuIGRlc2NyaXB0aW9ucyBvZiBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgcmVsYXRlZCBmZWF0dXJlcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aG9zZSBsaW5lcyByZXZlYWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTI6MTIuMzE0ODAyODFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODU6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxuIDM4NjpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuIDM4NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xcbiAzODk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAzOTA6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxuIDM5MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAzOTI6XFx0XFx0aGVscFxcbiAzOTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB1c2VyLXNwYWNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xcbiAzOTQ6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTI6MTIuMzE0OTEyOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgyOTcyNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy5cblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIE5ldGZpbHRlciBOZXRsaW5rIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gdG8gZ2V0IHRoaXMgTmV0ZmlsdGVyIE5ldGxpbmsgZnVuY3Rpb25hbGl0eSB3b3JraW5nIGFzIGludGVuZGVkLCBpdCdzIHByZXR0eSBjbGVhciB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGUgY29yZSBkZXBlbmRlbmN5IGhlcmUgc2VlbXMgdG8gaGluZ2Ugb24gYE5GX0NUX05FVExJTktgLCB0aGF04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgb2YgY291cnNlLCB0aGF0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHN0b3J5LiBXZSdsbCBhbHNvIG5lZWQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBmb3IgdGhlIHF1ZXVpbmcgbWVjaGFuaXNtIGFuZCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAgLSBwcmVzdW1hYmx5IHRoZXJlJ3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlIGZvciBnbHVlaW5nIHRoaW5ncyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGBjdGAuIEFuZCBsYXN0bHksIGBORVRGSUxURVJfQURWQU5DRURgIGZlZWxzIGxpa2UgYSBwcnVkZW50IGNob2ljZSwgYXMgb2Z0ZW4gdGhlIGFkdmFuY2VkIGZlYXR1cmVzIGVuYWJsZSBvdGhlciBuZWVkZWQgZnVuY3Rpb25hbGl0eS5cblxuSSdsbCBtYWtlIGEgcG9pbnQgb2YgZXhwbGljaXRseSBpbmNsdWRpbmcgYE5GX0NUX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwganVzdCB0byBiZSBzdXJlIHdlJ3JlIGNvdmVyZWQuXG5cbk5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAgc3BlY2lmaWNhbGx5IGFuZCBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMjoxNi41OTc4ODg2MDlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzUxNjM5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zODU9Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTg6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk5LVxcdGJvb2wgXFxcIk5GUVVFVUUgYW5kIE5GTE9HIGludGVncmF0aW9uIHdpdGggQ29ubmVjdGlvbiBUcmFja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTI6MTcuNzczMDYyNTI4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTY4Nzg3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kIHdhcnJhbnRzIGZ1enppbmcuIEkndmUgZ290IGEgbGlzdCBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGFuZCB0aGVuIHRoZSB2YXJpb3VzIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbm50cmFjayBoZWxwZXJzIGxpa2UgRlRQLCBIMzIzLCBJUkMsIGV0Yy4gV2UgYWxzbyBoYXZlIGBORl9OQVRgIGFuZCBzb21lIGFzc29jaWF0ZWQgbW9kdWxlcy4gQ3J1Y2lhbGx5LCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAgYXJlIGluIHRoZSBtaXggYXMgd2VsbC5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBmb2N1c2luZyBvbiBhIGNvcmUgYXJlYTogY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCdzIG1vdmluZyBhd2F5IGZyb20gcG9ydC1iYXNlZCBtYXRjaGluZyBhbmQgdG93YXJkcyBqdXN0IEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGhlbHBlcnMgZ2V0IGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG5ldGZpbHRlciBjb25udHJhY2sgYW5kIGlzIGFuIGFyZWEgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gSSd2ZSBmbGFnZ2VkIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYG5mX2N0X2hlbHBlcl9pbml0YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYG5mbmxfY3RoZWxwZXJfZGVsYCwgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYCwgYG5mX2N0X2hlbHBlcmAsIGFuZCBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwYC5cblxuTm93LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY29uZmlncy4gV2UgaGF2ZSBhIGZldyBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBhIGRlcGVuZGVuY3kgb2YgYm90aCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAuIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCBpcyBzZWxlY3RlZCBieSBib3RoIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AgYW5kIGBORl9DT05OVFJBQ0tfU05NUGAuIEFuZCBgTkZfTkFUX1NOTVBfQkFTSUNgIGlzIGRlcGVuZGVudCBvbiBgTkZfTkFUYC5cblxuSSdsbCBjb25zb2xpZGF0ZSB0aGlzIGluZm9ybWF0aW9uIGludG8gYSBjbGVhciByZXBvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTAwLCJPdXRwdXRUb2tlbnMiOjM4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMjoyOS43NDE4NTM0NDJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUwNzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfR0xVRV9DVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19JUkNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19ORVRCSU9TX05TXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfUFBUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NBTkVcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19URlRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU05NUFwiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJORl9OQVRfU05NUF9CQVNJQ1wiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfZ2V0XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2RlbFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9jcmVhdGVcIixcbiAgICBcIm5mX2N0X2hlbHBlclwiLFxuICAgIFwibmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgb2YgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXIgcmVnaXN0cmF0aW9uIGFuZCBtYXRjaGluZy4gSXQgcmVtb3ZlcyB0aGUgcG9ydC1iYXNlZCBtYXRjaGluZyBhbmQgcmVwbGFjZXMgaXQgd2l0aCBMMy9MNCBwcm90b2NvbCBtYXRjaGluZy4gVGhpcyBhZmZlY3RzIGhvdyBoZWxwZXJzIGFyZSBhc3NpZ25lZCB0byBjb25uZWN0aW9ucyBhbmQgaG93IHRoZXkgYXJlIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS19BTUFOREFcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSVJDXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTkVUQklPU19OU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1BQVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TQU5FXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVEZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NOTVBcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRfQUNUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZFwiLFxuICAgIFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2dldFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9kZWxcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfY3JlYXRlXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJcIixcbiAgICBcIm5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG9mIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVyIHJlZ2lzdHJhdGlvbiBhbmQgbWF0Y2hpbmcuIEl0IHJlbW92ZXMgdGhlIHBvcnQtYmFzZWQgbWF0Y2hpbmcgYW5kIHJlcGxhY2VzIGl0IHdpdGggTDMvTDQgcHJvdG9jb2wgbWF0Y2hpbmcuIFRoaXMgYWZmZWN0cyBob3cgaGVscGVycyBhcmUgYXNzaWduZWQgdG8gY29ubmVjdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIHZpYSBuZXRsaW5rLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 17:59:19 +0000 UTC FinishedAt: 2026-06-26 18:12:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK_QUEUE", "NETFILTER_NETLINK_GLUE_CT", "NETFILTER_ADVANCED", "NF_CT_NETLINK_HELPER", "NF_CONNTRACK_AMANDA", "NF_CONNTRACK_FTP", "NF_CONNTRACK_H323", "NF_CONNTRACK_IRC", "NF_CONNTRACK_NETBIOS_NS", "NF_CONNTRACK_PPTP", "NF_CONNTRACK_SANE", "NF_CONNTRACK_SIP", "NF_CONNTRACK_TFTP", "NF_CONNTRACK_SNMP", "NF_NAT", "NF_NAT_SNMP_BASIC", "OPENVSWITCH", "NET_ACT_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK_QUEUE", "NETFILTER_NETLINK_GLUE_CT", "NETFILTER_ADVANCED", "NF_CT_NETLINK_HELPER", "NF_CONNTRACK_AMANDA", "NF_CONNTRACK_FTP", "NF_CONNTRACK_H323", "NF_CONNTRACK_IRC", "NF_CONNTRACK_NETBIOS_NS", "NF_CONNTRACK_PPTP", "NF_CONNTRACK_SANE", "NF_CONNTRACK_SIP", "NF_CONNTRACK_TFTP", "NF_CONNTRACK_SNMP", "NF_NAT", "NF_NAT_SNMP_BASIC", "OPENVSWITCH", "NET_ACT_CT" ], "series_id": "f65c315d-b9f9-4dc6-8d2c-387298720db0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_conntrack_helper_register", "__nf_conntrack_helper_find", "nf_ct_helper_init", "nfnl_cthelper_new", "nfnl_cthelper_get", "nfnl_cthelper_del", "nfnl_cthelper_create", "nf_ct_helper", "nf_conntrack_broadcast_help" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OWRjZDZjMzFjN2QzMmI3OGZkOTQwYTBhYjAwODAxMTdlNDI0MDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6MDk6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbmluZGV4IDgxMjg2YzQ5OTMyNTIxLi5iMTVmMzc2MDRjZGU0ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbkBAIC05LDggJiM0Mzs5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaFx1MDAzZVxuIFxuLSNkZWZpbmUgUkFTX1BPUlQgMTcxOVxuLSNkZWZpbmUgUTkzMV9QT1JUIDE3MjBcbiAjZGVmaW5lIEgzMjNfUlRQX0NIQU5ORUxfTUFYIDRcdC8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqL1xuIFxuIC8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG5pbmRleCBjM2JkYjQzNzA5Mzg0ZC4uYzBiMzA1Y2U3YzNjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG5AQCAtNTAsOCAmIzQzOzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcbiBcdF9fYmUxNiBwYWNfY2FsbF9pZDtcdFx0XHQvKiBOQVQmIzM5O2VkIFBBQyBjYWxsIGlkICovXG4gfTtcbiBcbi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUXHQxNzIzXG4tXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MXHQxXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9NR01UXHQyXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbkBAIC0zLDggJiM0MzszLDYgQEBcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfU0FORV9IXG4gLyogU0FORSB0cmFja2luZy4gKi9cbiBcbi0jZGVmaW5lIFNBTkVfUE9SVFx0NjU2NlxuLVxuIGVudW0gc2FuZV9zdGF0ZSB7XG4gXHRTQU5FX1NUQVRFX05PUk1BTCxcbiBcdFNBTkVfU1RBVEVfU1RBUlRfUkVRVUVTVEVELFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG5pbmRleCA5MGIzMzRiYmNlM2NlNi4uZTNkMTczOWM1NTdkMTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG5AQCAtMiw4ICYjNDM7Miw2IEBAXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxuICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0hcbiBcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC00MywxMSAmIzQzOzQzLDEwIEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHtcbiBcbiBcdHJlZmNvdW50X3QgY3RfcmVmY250O1xuIFxuLVx0LyogVHVwbGUgb2YgdGhpbmdzIHdlIHdpbGwgaGVscCAoY29tcGFyZWQgYWdhaW5zdCBzZXJ2ZXIgcmVzcG9uc2UpICovXG4tXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlO1xuJiM0MztcdHU4IG5mcHJvdG87XHQvKiBORlBST1RPXyosIGNhbiBiZSBORlBST1RPX1VOU1BFQyAqL1xuJiM0MztcdHU4IGw0cHJvdG87XHQvKiBJUFBST1RPX1VEUC9UQ1AgKi9cbiBcbi1cdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xuJiM0MztcdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QgKi9cbiBcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdCAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjb25udHJhY2tpbmZvKTtcbkBAIC05NCw4ICYjNDM7OTMsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4mIzQzO1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX25hdF9zbm1wX2Jhc2ljX2luaXQodm9pZClcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfbmF0X3NubXBfaG9vaywgaGVscCk7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzbm1wX3RyYXBfaGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O3NubXBfdHJhcFwmIzM0OywgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtzbm1wX3RyYXBcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXHUwMDI2c25tcF90cmFwX2hlbHBlcl9wdHIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbmluZGV4IGRkYWZiZGZjOTZkYzM1Li5lZGNlZDAzOTk3MGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuQEAgLTE5OSwxMCAmIzQzOzE5OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4gXHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIEhFTFBFUl9OQU1FLCAxMDA4MCwgMTAwODAsIDEwMDgwLFxuJiM0MztcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTY2LDggJiM0Mzs2Niw2IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGV4cC1cdTAwM2V0dXBsZSAgICAgICAgICAgICAgICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xuIFxuIFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbi1cdGlmIChoZWxwZXIpXG4tXHRcdGV4cC1cdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci1cdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydDtcbiBcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51My5pcCAgICAgICA9IG1hc2s7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudS51ZHAucG9ydCAgPSBodG9ucygweEZGRkYpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcbmluZGV4IDA4NDdmODQ1NjEzZDZhLi5mMzk0NDU5OGMxNzI2ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xuQEAgLTM1LDExICYjNDM7MzUsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2Z0cFwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mX2Z0cF9sb2NrKTtcbiBcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XG4tc3RhdGljIHVfaW50MTZfdCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tXG4gc3RhdGljIGJvb2wgbG9vc2U7XG4gbW9kdWxlX3BhcmFtKGxvb3NlLCBib29sLCAwNjAwKTtcbiBcbkBAIC01NjAsOCAmIzQzOzU1NSw4IEBAIHN0YXRpYyBpbnQgbmZfY3RfZnRwX2Zyb21fbmxhdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC01NzAsMzIgJiM0Mzs1NjUsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2Z0cF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihmdHBfcHRyLCBwb3J0c19jICogMik7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7XG4gXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBGVFBfUE9SVDtcbi1cbiBcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xuIFx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgRlRQX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2ZnRwX2V4cF9wb2xpY3ksIDAsIGhlbHAsXG4tXHRcdFx0XHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbiYjNDM7XHRcdFx0ICBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcbiYjNDM7XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGZ0cCwgcG9ydHNfYyAqIDIsIGZ0cF9wdHIpO1xuJiM0MztcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2ZnRwLCBcdTAwMjZmdHBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXG5pbmRleCAyNDkzMWUzNzk5ODViYi4uOThiOTc1M2Q1ZTY1ZTEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcbkBAIC0xNzEzLDE5ICYjNDM7MTcxMywxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBoMzIzX2hlbHBlcl9pbml0KHZvaWQpXG4gXHRpbnQgcmV0O1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O1JBU1wmIzM0OyxcbiBcdFx0XHQgIFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O1JBU1wmIzM0OywgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LCAwLCAwLCAwLFxuJiM0MztcdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OyxcbiBcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2VkLi41MDZjNTgwMzQ3NjE1NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQwLDEyICYjNDM7NDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKG5mX2N0X25hdF9oZWxwZXJzX211dGV4KTtcbiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xuIFxuLS8qIFN0dXBpZCBoYXNoLCBidXQgY29sbGlzaW9uIGZyZWUgZm9yIHRoZSBkZWZhdWx0IHJlZ2lzdHJhdGlvbnMgb2YgdGhlXG4tICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxuIHtcbi1cdHJldHVybiAoKCh0dXBsZS1cdTAwM2VzcmMubDNudW0gXHUwMDNjXHUwMDNjIDgpIHwgdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKSBeXG4tXHRcdChfX2ZvcmNlIF9fdTE2KXR1cGxlLVx1MDAzZXNyYy51LmFsbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4mIzQzO1x0c3RhdGljIHUzMiBzZWVkO1xuJiM0MztcdHUzMiBpbml0dmFsO1xuJiM0MztcbiYjNDM7XHRnZXRfcmFuZG9tX29uY2UoXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcbiYjNDM7XG4mIzQzO1x0aW5pdHZhbCA9IHNlZWQgXiBwcm90b251bTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgaW5pdHZhbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4gfVxuIFxuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcbkBAIC01NCwxOCAmIzQzOzU4LDE4IEBAIF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4tXHRcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaC1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gbDNudW0pXG4tXHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBwcm90b251bSlcbi1cdFx0XHRcdHJldHVybiBoO1xuLVx0XHR9XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xuJiM0MztcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChoLVx1MDAzZW5mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmZwcm90byAhPSBsM251bSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaC1cdTAwM2VsNHByb3RvID09IHByb3RvbnVtKVxuJiM0MztcdFx0XHRyZXR1cm4gaDtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0zNjMsOSAmIzQzOzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xuIFxuIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9O1xuLVx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcdTAwMjZtZS1cdTAwM2V0dXBsZSk7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3VyO1xuJiM0MztcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IHJldCA9IDAsIGk7XG4gXG4gXHRCVUdfT04obWUtXHUwMDNlZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7XG5AQCAtMzgyLDI5ICYjNDM7Mzg1LDE4IEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGggPSBoZWxwZXJfaGFzaChtZS1cdTAwM2VuYW1lLCBtZS1cdTAwM2VsNHByb3RvKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbi1cdFx0XHRpZiAoIXN0cmNtcChjdXItXHUwMDNlbmFtZSwgbWUtXHUwMDNlbmFtZSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IE5GUFJPVE9fVU5TUEVDIHx8XG4tXHRcdFx0ICAgICBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IG1lLVx1MDAzZXR1cGxlLnNyYy5sM251bSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPT0gbWUtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcbiYjNDM7XHRcdGlmICghc3RyY21wKGN1ci1cdTAwM2VuYW1lLCBtZS1cdTAwM2VuYW1lKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY3VyLVx1MDAzZW5mcHJvdG8gPT0gTkZQUk9UT19VTlNQRUMgfHxcbiYjNDM7XHRcdCAgICAgY3VyLVx1MDAzZW5mcHJvdG8gPT0gbWUtXHUwMDNlbmZwcm90bykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY3VyLVx1MDAzZWw0cHJvdG8gPT0gbWUtXHUwMDNlbDRwcm90bykge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBmb3IgYXV0b19hc3NpZ25faGVscGVyICovXG4tXHRpZiAoIShtZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xuLVx0XHRcdGlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoXHUwMDI2Y3VyLVx1MDAzZXR1cGxlLCBcdTAwMjZtZS1cdTAwM2V0dXBsZSxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1hc2spKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZtZS1cdTAwM2VjdF9yZWZjbnQsIDEpO1xuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XG4gXHRuZl9jdF9oZWxwZXJfY291bnQmIzQzOyYjNDM7O1xuQEAgLTQ3OSw4ICYjNDM7NDcxLDcgQEAgdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4mIzQzO1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5AQCAtNDkyLDkgJiM0Mzs0ODMsOCBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4ge1xuIFx0bWVtc2V0KGhlbHBlciwgMCwgc2l6ZW9mKCpoZWxwZXIpKTtcbiBcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gPSBsM251bTtcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPSBwcm90b251bTtcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5zcmMudS5hbGwgPSBodG9ucyhzcGVjX3BvcnQpO1xuJiM0MztcdGhlbHBlci1cdTAwM2VuZnByb3RvID0gbDNudW07XG4mIzQzO1x0aGVscGVyLVx1MDAzZWw0cHJvdG8gPSBwcm90b251bTtcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItXHUwMDNlaGVscCwgaGVscCk7XG4gXHRoZWxwZXItXHUwMDNlZnJvbV9ubGF0dHIgPSBmcm9tX25sYXR0cjtcbkBAIC01MDIsMTAgJiM0Mzs0OTIsNyBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4gXHRzbnByaW50ZihoZWxwZXItXHUwMDNlbmF0X21vZF9uYW1lLCBzaXplb2YoaGVscGVyLVx1MDAzZW5hdF9tb2RfbmFtZSksXG4gXHRcdCBORl9OQVRfSEVMUEVSX1BSRUZJWCBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG4gXG4tXHRpZiAoc3BlY19wb3J0ID09IGRlZmF1bHRfcG9ydClcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbi1cdGVsc2Vcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzLSV1XCYjMzQ7LCBuYW1lLCBpZCk7XG4mIzQzO1x0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUykpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG5pbmRleCAxOTNhYjM0ZGI3OTVmOS4uNGU2YmFmZTQxNDM3NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbkBAIC0yMSw5ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaFx1MDAzZVxuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4gc3RhdGljIHVuc2lnbmVkIGludCBtYXhfZGNjX2NoYW5uZWxzID0gODtcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XG4gLyogVGhpcyBpcyBzbG93LCBidXQgaXQmIzM5O3Mgc2ltcGxlLiAtLVJSICovXG5AQCAtNDIsOCAmIzQzOzM5LDYgQEAgTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2lyY1wmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCYjMzQ7cG9ydCBudW1iZXJzIG9mIElSQyBzZXJ2ZXJzXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X2RjY19jaGFubmVscywgdWludCwgMDQwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfZGNjX2NoYW5uZWxzLCBcJiMzNDttYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXCYjMzQ7XG4gXHRcdFx0XHQgICBcJiMzNDtJUkMgc2Vzc2lvblwmIzM0Oyk7XG5AQCAtMjU0LDEzICYjNDM7MjQ5LDEzIEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmNbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaXJjX3B0cltNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmMgX19yZWFkX21vc3RseTtcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0O1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xuIFxuQEAgLTI4MiwxNyAmIzQzOzI3NywxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiBcdGlmICghaXJjX2J1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBJUkNfUE9SVDtcbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbiYjNDM7XHRcdFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHRcdCAgSVJDX1BPUlQsIHBvcnRzW2ldLCBpLCBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbi1cdFx0XHRcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0fVxuLVxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoXHUwMDI2aXJjWzBdLCBwb3J0c19jLCBpcmNfcHRyKTtcbiYjNDM7XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmlyYywgXHUwMDI2aXJjX3B0cik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdGtmcmVlKGlyY19idWZmZXIpO1xuQEAgLTMwNCw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19pcmNfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoaXJjX3B0ciwgcG9ydHNfYyk7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGlyY19wdHIpO1xuIFx0a2ZyZWUoaXJjX2J1ZmZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xuaW5kZXggODlkMWNmN2Q2NTEyZTcuLmNhYTJiMTAxZmE5ZTVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBIRUxQRVJfTkFNRVx0XCYjMzQ7bmV0Ymlvcy1uc1wmIzM0O1xuLSNkZWZpbmUgTk1CRF9QT1JUXHQxMzdcbiBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BhdHJpY2sgTWNIYXJkeSBcdTAwM2NrYWJlckB0cmFzaC5uZXRcdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcJiMzNDspO1xuQEAgLTU0LDcgJiM0Mzs1Myw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHQgIE5NQkRfUE9SVCwgTk1CRF9QT1JULCBOTUJEX1BPUlQsXG4gXHRcdFx0ICBcdTAwMjZleHBfcG9saWN5LCAwLCBuZXRiaW9zX25zX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmhlbHBlciwgXHUwMDI2aGVscGVyX3B0cik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuaW5kZXggNDlkMTUxMWU5OTIxODUuLmI0MDg1YWYzYWQxY2UwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXG5AQCAtMzEsOCAmIzQzOzMxLDggQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdGlmIChoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gcHJvdG8pXG4mIzQzO1x0aWYgKGhlbHBlci1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoZWxwZXItXHUwMDNlbmZwcm90byAhPSBwcm90bylcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbkBAIC02MCw3ICYjNDM7NjAsNyBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHR9XG4gXG4tXHRpZiAoaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBwcm90bylcbiYjNDM7XHRpZiAoaGVscGVyLVx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVx1MDAzZWhlbHApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDAsNyAmIzQzOzU0MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9wcHRwX21hc3RlcikpO1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcJiMzNDtwcHRwXCYjMzQ7LCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O3BwdHBcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXG5pbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xuQEAgLTM0LDExICYjNDM7MzQsNiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O01pY2hhbCBTY2htaWR0IFx1MDAzY21zY2htaWR0QHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTQU5FIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1cbiBzdHJ1Y3Qgc2FuZV9yZXF1ZXN0IHtcbiBcdF9fYmUzMiBSUENfY29kZTtcbiAjZGVmaW5lIFNBTkVfTkVUX1NUQVJUICAgICAgNyAgIC8qIFJQQyBjb2RlICovXG5AQCAtMTY5LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzYW5lX2V4cF9wb2xpY3kgPSB7XG4gXHQubWF4X2V4cGVjdGVkXHQ9IDEsXG5AQCAtMTc5LDMyICYjNDM7MTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzYW5lX3B0cik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zYW5lX21hc3RlcikpO1xuIFxuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gU0FORV9QT1JUO1xuLVxuLVx0LyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnNcbi1cdFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmVbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxuLVx0XHRcdFx0ICBcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4mIzQzO1x0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuJiM0MztcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNhbmUsIHBvcnRzX2MgKiAyLCBzYW5lX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZzYW5lLCBcdTAwMjZzYW5lX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5AQCAtMzUsMTIgJiM0MzszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcJiMzNDspO1xuIE1PRFVMRV9BTElBUyhcJiMzNDtpcF9jb25udHJhY2tfc2lwXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTXHQ4XG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcJiMzNDtwb3J0IG51bWJlcnMgb2YgU0lQIHNlcnZlcnNcJiMzNDspO1xuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUO1xuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzaXBfdGltZW91dCwgXCYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvblwmIzM0Oyk7XG5AQCAtMTc2NCw4ICYjNDM7MTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCBcdTAwMjZkcHRyLCBcdTAwMjZkYXRhbGVuKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwWzJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggJiM0MzsgMV0gPSB7XG4gXHRbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHtcbkBAIC0xNzkyLDM4ICYjNDM7MTc4NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICYjNDM7IDFcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCBwb3J0c19jICogNCk7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NpcF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFNJUF9QT1JUO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzQgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSAmIzQzOyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSAmIzQzOyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgJiM0MzsgM10sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4tXHRcdFx0XHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMF0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcbiYjNDM7XHRcdFx0ICBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbiYjNDM7XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4mIzQzO1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4mIzQzO1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4mIzQzO1x0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCAyLCBzaXBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcbmluZGV4IGI2ZmNlNTcwM2ZjZTc3Li4xMDk5ODZkNWQ1NWU2OSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXG5AQCAtMTQsOCAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5oXHUwMDNlXG4gXG4tI2RlZmluZSBTTk1QX1BPUlRcdDE2MVxuLVxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7SmlyaSBPbHNhIFx1MDAzY2pvbHNhQHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTk1QIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuQEAgLTU1LDcgJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCYjMzQ7c25tcFwmIzM0OywgU05NUF9QT1JULCBTTk1QX1BPUlQsIFNOTVBfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtzbm1wXCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2ZXhwX3BvbGljeSwgMCwgc25tcF9jb25udHJhY2tfaGVscCwgTlVMTCxcbiBcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcbmluZGV4IDQzOTNjNDM1YWEzNTQ5Li5hNjk1NTllZGY5YjM2MyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXG5AQCAtMjYsMTIgJiM0MzsyNiw2IEBAIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTKFwmIzM0O2lwX2Nvbm50cmFja190ZnRwXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwmIzM0O1BvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnNcJiMzNDspO1xuLVxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfdGZ0cF9ob29rKTtcbiBcbkBAIC05NSw4ICYjNDM7ODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHBbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC0xMDUsMzAgJiM0Mzs5OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTtcbiYjNDM7XHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIodGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTigwKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFRGVFBfUE9SVDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHR9XG4mIzQzO1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxuJiM0MztcdFx0XHQgIEhFTFBFUl9OQU1FLFxuJiM0MztcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuJiM0MztcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHRmdHAsIHBvcnRzX2MgKiAyLCB0ZnRwX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZ0ZnRwLCBcdTAwMjZ0ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCYjNDM7MV0gPSB7XG4tXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1UxNiwgfSxcbiYjNDM7XHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbiBcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4gfTtcbiBcbkBAIC0yNTQsNyAmIzQzOzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0aGVscGVyLVx1MDAzZWRhdGFfbGVuID0gc2l6ZTtcbiBcbiBcdGhlbHBlci1cdTAwM2VmbGFncyB8PSBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0U7XG4tXHRtZW1jcHkoXHUwMDI2aGVscGVyLVx1MDAzZXR1cGxlLCB0dXBsZSwgc2l6ZW9mKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUpKTtcbiYjNDM7XHRoZWxwZXItXHUwMDNlbmZwcm90byA9IHR1cGxlLVx1MDAzZXNyYy5sM251bTtcbiYjNDM7XHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bTtcbiBcbiBcdGhlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xuIFx0aGVscGVyLVx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcbkBAIC00NDksOCAmIzQzOzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdFx0aWYgKHN0cm5jbXAoY3VyLVx1MDAzZW5hbWUsIGhlbHBlcl9uYW1lLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XG4tXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdFx0aWYgKCh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZW5mcHJvdG8gfHxcbiYjNDM7XHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9FWENMKVxuQEAgLTQ3OSwxMCAmIzQzOzQ4MCwxMCBAQCBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZDVEhfVFVQTEVfTDNQUk9UT05VTSxcbi1cdFx0XHQgaHRvbnMoaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSkpKVxuJiM0MztcdFx0XHQgaHRvbnMoaGVscGVyLVx1MDAzZW5mcHJvdG8pKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAobmxhX3B1dF91OChza2IsIE5GQ1RIX1RVUExFX0w0UFJPVE9OVU0sIGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVx1MDAzZWw0cHJvdG8pKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdG5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpO1xuQEAgLTY2MSw4ICYjNDM7NjYyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAodHVwbGVfc2V0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XG4tXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZW5mcHJvdG8gfHxcbiYjNDM7XHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuQEAgLTcyMSw4ICYjNDM7NzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAodHVwbGVfc2V0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XG4tXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxuJiM0MztcdFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZW5mcHJvdG8gfHxcbiYjNDM7XHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Zm91bmQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk5ZGNkNmMzMWM3ZDMyYjc4ZmQ5NDBhMGFiMDA4MDExN2U0MjQwOGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAxODowOToyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oCmluZGV4IDgxMjg2YzQ5OTMyNTIxLi5iMTVmMzc2MDRjZGU0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oCkBAIC05LDggJiM0Mzs5LDYgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmgmZ3Q7CiAKLSNkZWZpbmUgUkFTX1BPUlQgMTcxOQotI2RlZmluZSBROTMxX1BPUlQgMTcyMAogI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0CS8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqLwogCiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oCmluZGV4IGMzYmRiNDM3MDkzODRkLi5jMGIzMDVjZTdjM2M2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oCkBAIC01MCw4ICYjNDM7NTAsNiBAQCBzdHJ1Y3QgbmZfbmF0X3BwdHAgewogCV9fYmUxNiBwYWNfY2FsbF9pZDsJCQkvKiBOQVQmIzM5O2VkIFBBQyBjYWxsIGlkICovCiB9OwogCi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUCTE3MjMKLQogI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MCTEKICNkZWZpbmUgUFBUUF9QQUNLRVRfTUdNVAkyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oCmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oCkBAIC0zLDggJiM0MzszLDYgQEAKICNkZWZpbmUgX05GX0NPTk5UUkFDS19TQU5FX0gKIC8qIFNBTkUgdHJhY2tpbmcuICovCiAKLSNkZWZpbmUgU0FORV9QT1JUCTY1NjYKLQogZW51bSBzYW5lX3N0YXRlIHsKIAlTQU5FX1NUQVRFX05PUk1BTCwKIAlTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oCmluZGV4IDkwYjMzNGJiY2UzY2U2Li5lM2QxNzM5YzU1N2QxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oCkBAIC0yLDggJiM0MzsyLDYgQEAKICNpZm5kZWYgX05GX0NPTk5UUkFDS19URlRQX0gKICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0gKIAotI2RlZmluZSBURlRQX1BPUlQgNjkKLQogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCBjNzYxY2Q4MTU4YjI1My4uYmM1NDI3ZDIzOWY0YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaApAQCAtNDMsMTEgJiM0Mzs0MywxMCBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB7CiAKIAlyZWZjb3VudF90IGN0X3JlZmNudDsKIAotCS8qIFR1cGxlIG9mIHRoaW5ncyB3ZSB3aWxsIGhlbHAgKGNvbXBhcmVkIGFnYWluc3Qgc2VydmVyIHJlc3BvbnNlKSAqLwotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiYjNDM7CXU4IG5mcHJvdG87CS8qIE5GUFJPVE9fKiwgY2FuIGJlIE5GUFJPVE9fVU5TUEVDICovCiYjNDM7CXU4IGw0cHJvdG87CS8qIElQUFJPVE9fVURQL1RDUCAqLwogCi0JLyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCwgb3IgLTEgdG8KLSAgICAgICAgICAgaW52YWxpZGF0ZS4gKi8KJiM0MzsJLyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCAqLwogCWludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY29ubnRyYWNraW5mbyk7CkBAIC05NCw4ICYjNDM7OTMsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLAogdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKTsKIAogdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLAotCQkgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsCiYjNDM7CQkgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCwKIAkJICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LAogCQkgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYwppbmRleCAwZWRlMTM4ZGZkMjllNy4uZTU0MGI4NmJkMTViNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYwpAQCAtMjEzLDcgJiM0MzsyMTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfc25tcF9iYXNpY19pbml0KHZvaWQpCiAJUkNVX0lOSVRfUE9JTlRFUihuZl9uYXRfc25tcF9ob29rLCBoZWxwKTsKIAogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c25tcF90cmFwX2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7c25tcF90cmFwJiMzNDssIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCwgU05NUF9UUkFQX1BPUlQsCiYjNDM7CQkJICAmIzM0O3NubXBfdHJhcCYjMzQ7LAogCQkJICAmYW1wO3NubXBfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJZXJyID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3NubXBfdHJhcF9oZWxwZXIsICZhbXA7c25tcF90cmFwX2hlbHBlcl9wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCBkZGFmYmRmYzk2ZGMzNS4uZWRjZWQwMzk5NzBkNDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCkBAIC0xOTksMTAgJiM0MzsxOTksMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpCiAJfQogCiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDthbWFuZGFfaGVscGVyWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCwKLQkJCSAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKIAkJCSAgJmFtcDthbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2FtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCwKLQkJCSAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKIAkJCSAgJmFtcDthbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAogCXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGFtYW5kYV9oZWxwZXIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jCmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKQEAgLTY2LDggJiM0Mzs2Niw2IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlleHAtJmd0O3R1cGxlICAgICAgICAgICAgICAgID0gY3QtJmd0O3R1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlOwogCiAJaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtJmd0O2hlbHBlcik7Ci0JaWYgKGhlbHBlcikKLQkJZXhwLSZndDt0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci0mZ3Q7dHVwbGUuc3JjLnUudWRwLnBvcnQ7CiAKIAlleHAtJmd0O21hc2suc3JjLnUzLmlwICAgICAgID0gbWFzazsKIAlleHAtJmd0O21hc2suc3JjLnUudWRwLnBvcnQgID0gaHRvbnMoMHhGRkZGKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtMzUsMTEgJiM0MzszNSw2IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwX2Nvbm50cmFja19mdHAmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhuZl9mdHBfbG9jayk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotCiBzdGF0aWMgYm9vbCBsb29zZTsKIG1vZHVsZV9wYXJhbShsb29zZSwgYm9vbCwgMDYwMCk7CiAKQEAgLTU2MCw4ICYjNDM7NTU1LDggQEAgc3RhdGljIGludCBuZl9jdF9mdHBfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7CiAJLm1heF9leHBlY3RlZAk9IDEsCkBAIC01NzAsMzIgJiM0Mzs1NjUsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHsKIAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKQogewotCW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoZnRwX3B0cik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19mdHBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBGVFBfUE9SVDsKLQogCS8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9ucwogCQkgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBGVFBfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtmdHBfZXhwX3BvbGljeSwgMCwgaGVscCwKLQkJCQkgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2Z0cFsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sCi0JCQkJICAmYW1wO2Z0cF9leHBfcG9saWN5LCAwLCBoZWxwLAotCQkJCSAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2Z0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLAomIzQzOwkJCSAgSEVMUEVSX05BTUUsCiYjNDM7CQkJICAmYW1wO2Z0cF9leHBfcG9saWN5LCAwLCBoZWxwLAomIzQzOwkJCSAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihmdHAsIHBvcnRzX2MgKiAyLCBmdHBfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO2Z0cCwgJmFtcDtmdHBfcHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCAyNDkzMWUzNzk5ODViYi4uOThiOTc1M2Q1ZTY1ZTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC0xNzEzLDE5ICYjNDM7MTcxMywxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBoMzIzX2hlbHBlcl9pbml0KHZvaWQpCiAJaW50IHJldDsKIAogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLAotCQkJICAmIzM0O1JBUyYjMzQ7LCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULAomIzQzOwkJCSAgJiMzNDtSQVMmIzM0OywKIAkJCSAgJmFtcDtyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfcmFzWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7UkFTJiMzNDssIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsCiYjNDM7CQkJICAmIzM0O1JBUyYjMzQ7LAogCQkJICAmYW1wO3Jhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLAotCQkJICAmIzM0O0guMjQ1JiMzNDssIDAsIDAsIDAsCiYjNDM7CQkJICAmIzM0O0guMjQ1JiMzNDssCiAJCQkgICZhbXA7aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsCi0JCQkgICYjMzQ7US45MzEmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCwKJiM0MzsJCQkgICYjMzQ7US45MzEmIzM0OywKIAkJCSAgJmFtcDtxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsCi0JCQkgICYjMzQ7US45MzEmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCwKJiM0MzsJCQkgICYjMzQ7US45MzEmIzM0OywKIAkJCSAgJmFtcDtxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNTAwNTA5YjE3NjYzZWQuLjUwNmM1ODAzNDc2MTU1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtNDAsMTIgJiM0Mzs0MCwxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X2hlbHBlcl9jb3VudCBfX3JlYWRfbW9zdGx5Owogc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9uYXRfaGVscGVyc19tdXRleCk7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5OwogCi0vKiBTdHVwaWQgaGFzaCwgYnV0IGNvbGxpc2lvbiBmcmVlIGZvciB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb25zIG9mIHRoZQotICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBoZWxwZXJfaGFzaChjb25zdCBjaGFyICpuYW1lLCB1OCBwcm90b251bSkKIHsKLQlyZXR1cm4gKCgodHVwbGUtJmd0O3NyYy5sM251bSAmbHQ7Jmx0OyA4KSB8IHR1cGxlLSZndDtkc3QucHJvdG9udW0pIF4KLQkJKF9fZm9yY2UgX191MTYpdHVwbGUtJmd0O3NyYy51LmFsbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7CiYjNDM7CXN0YXRpYyB1MzIgc2VlZDsKJiM0MzsJdTMyIGluaXR2YWw7CiYjNDM7CiYjNDM7CWdldF9yYW5kb21fb25jZSgmYW1wO3NlZWQsIHNpemVvZihzZWVkKSk7CiYjNDM7CiYjNDM7CWluaXR2YWwgPSBzZWVkIF4gcHJvdG9udW07CiYjNDM7CiYjNDM7CXJldHVybiBqaGFzaChuYW1lLCBzdHJsZW4obmFtZSksIGluaXR2YWwpICUgbmZfY3RfaGVscGVyX2hzaXplOwogfQogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCkBAIC01NCwxOCAmIzQzOzU4LDE4IEBAIF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pCiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHsKLQkJCWlmIChzdHJjbXAoaC0mZ3Q7bmFtZSwgbmFtZSkpCi0JCQkJY29udGludWU7CiYjNDM7CWlmICghbmZfY3RfaGVscGVyX2hhc2gpCiYjNDM7CQlyZXR1cm4gTlVMTDsKIAotCQkJaWYgKGgtJmd0O3R1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyAmYW1wOyZhbXA7Ci0JCQkgICAgaC0mZ3Q7dHVwbGUuc3JjLmwzbnVtICE9IGwzbnVtKQotCQkJCWNvbnRpbnVlOwomIzQzOwlpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pOwogCi0JCQlpZiAoaC0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtID09IHByb3RvbnVtKQotCQkJCXJldHVybiBoOwotCQl9CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkgewomIzQzOwkJaWYgKHN0cmNtcChoLSZndDtuYW1lLCBuYW1lKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChoLSZndDtuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDICZhbXA7JmFtcDsgaC0mZ3Q7bmZwcm90byAhPSBsM251bSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChoLSZndDtsNHByb3RvID09IHByb3RvbnVtKQomIzQzOwkJCXJldHVybiBoOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTM2Myw5ICYjNDM7MzY3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7CiAKIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQogewotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9OwotCXVuc2lnbmVkIGludCBoID0gaGVscGVyX2hhc2goJmFtcDttZS0mZ3Q7dHVwbGUpOwogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdXI7CiYjNDM7CXVuc2lnbmVkIGludCBoOwogCWludCByZXQgPSAwLCBpOwogCiAJQlVHX09OKG1lLSZndDtleHBlY3RfY2xhc3NfbWF4ICZndDs9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7CkBAIC0zODIsMjkgJiM0MzszODUsMTggQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaCA9IGhlbHBlcl9oYXNoKG1lLSZndDtuYW1lLCBtZS0mZ3Q7bDRwcm90byk7CiAJbXV0ZXhfbG9jaygmYW1wO25mX2N0X2hlbHBlcl9tdXRleCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSYjNDM7JiM0MzspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkgewotCQkJaWYgKCFzdHJjbXAoY3VyLSZndDtuYW1lLCBtZS0mZ3Q7bmFtZSkgJmFtcDsmYW1wOwotCQkJICAgIChjdXItJmd0O3R1cGxlLnNyYy5sM251bSA9PSBORlBST1RPX1VOU1BFQyB8fAotCQkJICAgICBjdXItJmd0O3R1cGxlLnNyYy5sM251bSA9PSBtZS0mZ3Q7dHVwbGUuc3JjLmwzbnVtKSAmYW1wOyZhbXA7Ci0JCQkgICAgY3VyLSZndDt0dXBsZS5kc3QucHJvdG9udW0gPT0gbWUtJmd0O3R1cGxlLmRzdC5wcm90b251bSkgewotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkgewomIzQzOwkJaWYgKCFzdHJjbXAoY3VyLSZndDtuYW1lLCBtZS0mZ3Q7bmFtZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChjdXItJmd0O25mcHJvdG8gPT0gTkZQUk9UT19VTlNQRUMgfHwKJiM0MzsJCSAgICAgY3VyLSZndDtuZnByb3RvID09IG1lLSZndDtuZnByb3RvKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY3VyLSZndDtsNHByb3RvID09IG1lLSZndDtsNHByb3RvKSB7CiYjNDM7CQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JLyogYXZvaWQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgZm9yIGF1dG9fYXNzaWduX2hlbHBlciAqLwotCWlmICghKG1lLSZndDtmbGFncyAmYW1wOyBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0UpKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHsKLQkJCWlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoJmFtcDtjdXItJmd0O3R1cGxlLCAmYW1wO21lLSZndDt0dXBsZSwKLQkJCQkJCSAgICAgJmFtcDttYXNrKSkgewotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCX0KIAlyZWZjb3VudF9zZXQoJmFtcDttZS0mZ3Q7Y3RfcmVmY250LCAxKTsKIAlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDttZS0mZ3Q7aG5vZGUsICZhbXA7bmZfY3RfaGVscGVyX2hhc2hbaF0pOwogCW5mX2N0X2hlbHBlcl9jb3VudCYjNDM7JiM0Mzs7CkBAIC00NzksOCAmIzQzOzQ3MSw3IEBAIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7CiAKIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciwKLQkJICAgICAgIHUxNiBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICAgdTE2IGRlZmF1bHRfcG9ydCwgdTE2IHNwZWNfcG9ydCwgdTMyIGlkLAomIzQzOwkJICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsCiAJCSAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCwKIAkJICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtNDkyLDkgJiM0Mzs0ODMsOCBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsCiB7CiAJbWVtc2V0KGhlbHBlciwgMCwgc2l6ZW9mKCpoZWxwZXIpKTsKIAotCWhlbHBlci0mZ3Q7dHVwbGUuc3JjLmwzbnVtID0gbDNudW07Ci0JaGVscGVyLSZndDt0dXBsZS5kc3QucHJvdG9udW0gPSBwcm90b251bTsKLQloZWxwZXItJmd0O3R1cGxlLnNyYy51LmFsbCA9IGh0b25zKHNwZWNfcG9ydCk7CiYjNDM7CWhlbHBlci0mZ3Q7bmZwcm90byA9IGwzbnVtOwomIzQzOwloZWxwZXItJmd0O2w0cHJvdG8gPSBwcm90b251bTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItJmd0O2hlbHAsIGhlbHApOwogCWhlbHBlci0mZ3Q7ZnJvbV9ubGF0dHIgPSBmcm9tX25sYXR0cjsKQEAgLTUwMiwxMCAmIzQzOzQ5Miw3IEBAIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciwKIAlzbnByaW50ZihoZWxwZXItJmd0O25hdF9tb2RfbmFtZSwgc2l6ZW9mKGhlbHBlci0mZ3Q7bmF0X21vZF9uYW1lKSwKIAkJIE5GX05BVF9IRUxQRVJfUFJFRklYICYjMzQ7JXMmIzM0OywgbmFtZSk7CiAKLQlpZiAoc3BlY19wb3J0ID09IGRlZmF1bHRfcG9ydCkKLQkJc25wcmludGYoaGVscGVyLSZndDtuYW1lLCBzaXplb2YoaGVscGVyLSZndDtuYW1lKSwgJiMzNDslcyYjMzQ7LCBuYW1lKTsKLQllbHNlCi0JCXNucHJpbnRmKGhlbHBlci0mZ3Q7bmFtZSwgc2l6ZW9mKGhlbHBlci0mZ3Q7bmFtZSksICYjMzQ7JXMtJXUmIzM0OywgbmFtZSwgaWQpOwomIzQzOwlzbnByaW50ZihoZWxwZXItJmd0O25hbWUsIHNpemVvZihoZWxwZXItJmd0O25hbWUpLCAmIzM0OyVzJiMzNDssIG5hbWUpOwogCiAJaWYgKFdBUk5fT05fT05DRShleHBlY3RfY2xhc3NfbWF4ICZndDs9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMKaW5kZXggMTkzYWIzNGRiNzk1ZjkuLjRlNmJhZmU0MTQzNzUyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtMjEsOSAmIzQzOzIxLDYgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5oJmd0OwogCi0jZGVmaW5lIE1BWF9QT1JUUyA4Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2RjY19jaGFubmVscyA9IDg7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7CiAvKiBUaGlzIGlzIHNsb3csIGJ1dCBpdCYjMzk7cyBzaW1wbGUuIC0tUlIgKi8KQEAgLTQyLDggJiM0MzszOSw2IEBAIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogTU9EVUxFX0FMSUFTKCYjMzQ7aXBfY29ubnRyYWNrX2lyYyYjMzQ7KTsKIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7CiAKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgJiMzNDtwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnMmIzM0Oyk7CiBtb2R1bGVfcGFyYW0obWF4X2RjY19jaGFubmVscywgdWludCwgMDQwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9kY2NfY2hhbm5lbHMsICYjMzQ7bWF4IG51bWJlciBvZiBleHBlY3RlZCBEQ0MgY2hhbm5lbHMgcGVyICYjMzQ7CiAJCQkJICAgJiMzNDtJUkMgc2Vzc2lvbiYjMzQ7KTsKQEAgLTI1NCwxMyAmIzQzOzI0OSwxMyBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmlyY19wdHJbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmMgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmlyY19wdHIgX19yZWFkX21vc3RseTsKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaXJjX2V4cF9wb2xpY3k7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQ7CiYjNDM7CWludCByZXQ7CiAKIAluZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpOwogCkBAIC0yODIsMTcgJiM0MzsyNzcsMTEgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpCiAJaWYgKCFpcmNfYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIElmIG5vIHBvcnQgZ2l2ZW4sIGRlZmF1bHQgdG8gc3RhbmRhcmQgaXJjIHBvcnQgKi8KLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBJUkNfUE9SVDsKJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSwKJiM0MzsJCQkgICZhbXA7aXJjX2V4cF9wb2xpY3ksCiYjNDM7CQkJICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSwKLQkJCQkgIElSQ19QT1JULCBwb3J0c1tpXSwgaSwgJmFtcDtpcmNfZXhwX3BvbGljeSwKLQkJCQkgIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKLQl9Ci0KLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcigmYW1wO2lyY1swXSwgcG9ydHNfYywgaXJjX3B0cik7CiYjNDM7CXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmFtcDtpcmMsICZhbXA7aXJjX3B0cik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlrZnJlZShpcmNfYnVmZmVyKTsKQEAgLTMwNCw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaXJjX2Zpbmkodm9pZCkKIHsKLQluZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKGlyY19wdHIsIHBvcnRzX2MpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoaXJjX3B0cik7CiAJa2ZyZWUoaXJjX2J1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCA4OWQxY2Y3ZDY1MTJlNy4uY2FhMmIxMDFmYTllNWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgmZ3Q7CiAKICNkZWZpbmUgSEVMUEVSX05BTUUJJiMzNDtuZXRiaW9zLW5zJiMzNDsKLSNkZWZpbmUgTk1CRF9QT1JUCTEzNwogCiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGF0cmljayBNY0hhcmR5ICZsdDtrYWJlckB0cmFzaC5uZXQmZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyJiMzNDspOwpAQCAtNTQsNyAmIzQzOzUzLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKQogCWV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsIEhFTFBFUl9OQU1FLAotCQkJICBOTUJEX1BPUlQsIE5NQkRfUE9SVCwgTk1CRF9QT1JULAogCQkJICAmYW1wO2V4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJcmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmFtcDtoZWxwZXIsICZhbXA7aGVscGVyX3B0cik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jCmluZGV4IDQ5ZDE1MTFlOTkyMTg1Li5iNDA4NWFmM2FkMWNlMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMKQEAgLTMxLDggJiM0MzszMSw4IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCWlmICghaGVscGVyKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JaWYgKGhlbHBlci0mZ3Q7dHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDICZhbXA7JmFtcDsKLQkgICAgaGVscGVyLSZndDt0dXBsZS5zcmMubDNudW0gIT0gcHJvdG8pCiYjNDM7CWlmIChoZWxwZXItJmd0O25mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkgICAgaGVscGVyLSZndDtuZnByb3RvICE9IHByb3RvKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJc3dpdGNoIChwcm90bykgewpAQCAtNjAsNyAmIzQzOzYwLDcgQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCXJldHVybiBORl9EUk9QOwogCX0KIAotCWlmIChoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSAhPSBwcm90bykKJiM0MzsJaWYgKGhlbHBlci0mZ3Q7bDRwcm90byAhPSBwcm90bykKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCWhlbHBlcl9jYiA9IHJjdV9kZXJlZmVyZW5jZShoZWxwZXItJmd0O2hlbHApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCmluZGV4IDgwZmMxNGM4N2RkYzRiLi5jYmYzMmEzY2IxZjYxMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNTQwLDcgJiM0Mzs1NDAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpCiAJTkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyKSk7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3BwdHAsIEFGX0lORVQsIElQUFJPVE9fVENQLAotCQkJICAmIzM0O3BwdHAmIzM0OywgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULCBQUFRQX0NPTlRST0xfUE9SVCwKJiM0MzsJCQkgICYjMzQ7cHB0cCYjMzQ7LAogCQkJICAmYW1wO3BwdHBfZXhwX3BvbGljeSwgMCwgY29ubnRyYWNrX3BwdHBfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJcHB0cC5kZXN0cm95ID0gZ3JlX3BwdHBfZGVzdHJveV9zaWJsaW5nczsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYwppbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKQEAgLTM0LDExICYjNDM7MzQsNiBAQCBNT0RVTEVfQVVUSE9SKCYjMzQ7TWljaGFsIFNjaG1pZHQgJmx0O21zY2htaWR0QHJlZGhhdC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U0FORSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotCiBzdHJ1Y3Qgc2FuZV9yZXF1ZXN0IHsKIAlfX2JlMzIgUlBDX2NvZGU7CiAjZGVmaW5lIFNBTkVfTkVUX1NUQVJUICAgICAgNyAgIC8qIFJQQyBjb2RlICovCkBAIC0xNjksOCAmIzQzOzE2NCw4IEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNhbmUgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0gewogCS5tYXhfZXhwZWN0ZWQJPSAxLApAQCAtMTc5LDMyICYjNDM7MTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0gewogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NhbmVfZmluaSh2b2lkKQogewotCW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2FuZV9wdHIsIHBvcnRzX2MgKiAyKTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHNhbmVfcHRyKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zYW5lX21hc3RlcikpOwogCi0JaWYgKHBvcnRzX2MgPT0gMCkKLQkJcG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gU0FORV9QT1JUOwotCi0JLyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnMKLQkJIGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2FuZVsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2FuZVsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCwKJiM0MzsJCQkgIEhFTFBFUl9OQU1FLAomIzQzOwkJCSAgJmFtcDtzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsCiYjNDM7CQkJICBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzYW5lLCBwb3J0c19jICogMiwgc2FuZV9wdHIpOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbXA7c2FuZSwgJmFtcDtzYW5lX3B0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMzUsMTIgJiM0MzszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1NJUCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKIE1PRFVMRV9BTElBUygmIzM0O2lwX2Nvbm50cmFja19zaXAmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogCi0jZGVmaW5lIE1BWF9QT1JUUwk4Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgJiMzNDtwb3J0IG51bWJlcnMgb2YgU0lQIHNlcnZlcnMmIzM0Oyk7Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUOwogbW9kdWxlX3BhcmFtKHNpcF90aW1lb3V0LCB1aW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2lwX3RpbWVvdXQsICYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvbiYjMzQ7KTsKQEAgLTE3NjQsOCAmIzQzOzE3NTgsOCBAQCBzdGF0aWMgaW50IHNpcF9oZWxwX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIAlyZXR1cm4gcHJvY2Vzc19zaXBfbXNnKHNrYiwgY3QsIHByb3RvZmYsIGRhdGFvZmYsICZhbXA7ZHB0ciwgJmFtcDtkYXRhbGVuKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyW01BWF9QT1JUUyAqIDRdIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFsyXSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0clsyXSBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICYjNDM7IDFdID0gewogCVtTSVBfRVhQRUNUX1NJR05BTExJTkddID0gewpAQCAtMTc5MiwzOCAmIzQzOzE3ODYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzaXBfZXhwX3BvbGljeVtTSVBfRVhQRUNUX01BWCAmIzQzOyAxCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2lwX2Zpbmkodm9pZCkKIHsKLQluZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHNpcF9wdHIsIHBvcnRzX2MgKiA0KTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldDsKJiM0MzsJaW50IHJldDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zaXBfbWFzdGVyKSk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBTSVBfUE9SVDsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBwb3J0c19jOyBpJiM0MzsmIzQzOykgewotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFs0ICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLAotCQkJCSAgTlVMTCwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFs0ICogaSAmIzQzOyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsCi0JCQkJICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsCi0JCQkJICBOVUxMLCBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2lwWzQgKiBpICYjNDM7IDJdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsCi0JCQkJICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsCi0JCQkJICBOVUxMLCBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2lwWzQgKiBpICYjNDM7IDNdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsCi0JCQkJICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsCi0JCQkJICBOVUxMLCBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFswXSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLAomIzQzOwkJCSAgSEVMUEVSX05BTUUsCiYjNDM7CQkJICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCwKJiM0MzsJCQkgIE5VTEwsIFRISVNfTU9EVUxFKTsKJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtzaXBbMV0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCwKJiM0MzsJCQkgIEhFTFBFUl9OQU1FLAomIzQzOwkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsCiYjNDM7CQkJICBOVUxMLCBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzaXAsIHBvcnRzX2MgKiA0LCBzaXBfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCAyLCBzaXBfcHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jCmluZGV4IGI2ZmNlNTcwM2ZjZTc3Li4xMDk5ODZkNWQ1NWU2OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYwpAQCAtMTQsOCAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuaCZndDsKIAotI2RlZmluZSBTTk1QX1BPUlQJMTYxCi0KIE1PRFVMRV9BVVRIT1IoJiMzNDtKaXJpIE9sc2EgJmx0O2pvbHNhQHJlZGhhdC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U05NUCBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpAQCAtNTUsNyAmIzQzOzUzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NubXBfaW5pdCh2b2lkKQogCWV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7c25tcCYjMzQ7LCBTTk1QX1BPUlQsIFNOTVBfUE9SVCwgU05NUF9QT1JULAomIzQzOwkJCSAgJiMzNDtzbm1wJiMzNDssCiAJCQkgICZhbXA7ZXhwX3BvbGljeSwgMCwgc25tcF9jb25udHJhY2tfaGVscCwgTlVMTCwKIAkJCSAgVEhJU19NT0RVTEUpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMKaW5kZXggNDM5M2M0MzVhYTM1NDkuLmE2OTU1OWVkZjliMzYzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jCkBAIC0yNiwxMiAmIzQzOzI2LDYgQEAgTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfQUxJQVMoJiMzNDtpcF9jb25udHJhY2tfdGZ0cCYjMzQ7KTsKIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdOwotc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jOwotbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsICZhbXA7cG9ydHNfYywgMDQwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCAmIzM0O1BvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnMmIzM0Oyk7Ci0KIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF90ZnRwX2hvb2spOwogCkBAIC05NSw4ICYjNDM7ODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHAgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0gewogCS5tYXhfZXhwZWN0ZWQJPSAxLApAQCAtMTA1LDMwICYjNDM7OTksMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfdGZ0cF9maW5pKHZvaWQpCiB7Ci0JbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3Rlcih0ZnRwX3B0ciwgcG9ydHNfYyAqIDIpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIodGZ0cF9wdHIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldDsKJiM0MzsJaW50IHJldDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oMCk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBURlRQX1BPUlQ7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDt0ZnRwWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkJICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgICZhbXA7dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7dGZ0cFsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLAotCQkJCSAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksCi0JCQkJICAmYW1wO3RmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLAotCQkJCSAgVEhJU19NT0RVTEUpOwotCX0KJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDt0ZnRwLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKJiM0MzsJCQkgICZhbXA7dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsCiYjNDM7CQkJICBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3Rlcih0ZnRwLCBwb3J0c19jICogMiwgdGZ0cF9wdHIpOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbXA7dGZ0cCwgJmFtcDt0ZnRwX3B0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCYjNDM7MV0gPSB7Ci0JW05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sCiYjNDM7CVtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLAogCVtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCiB9OwogCkBAIC0yNTQsNyAmIzQzOzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLAogCWhlbHBlci0mZ3Q7ZGF0YV9sZW4gPSBzaXplOwogCiAJaGVscGVyLSZndDtmbGFncyB8PSBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0U7Ci0JbWVtY3B5KCZhbXA7aGVscGVyLSZndDt0dXBsZSwgdHVwbGUsIHNpemVvZihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlKSk7CiYjNDM7CWhlbHBlci0mZ3Q7bmZwcm90byA9IHR1cGxlLSZndDtzcmMubDNudW07CiYjNDM7CWhlbHBlci0mZ3Q7bDRwcm90byA9IHR1cGxlLSZndDtkc3QucHJvdG9udW07CiAKIAloZWxwZXItJmd0O21lID0gVEhJU19NT0RVTEU7CiAJaGVscGVyLSZndDtoZWxwID0gbmZubF91c2Vyc3BhY2VfY3RoZWxwZXI7CkBAIC00NDksOCAmIzQzOzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAkJaWYgKHN0cm5jbXAoY3VyLSZndDtuYW1lLCBoZWxwZXJfbmFtZSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7dHVwbGUuc3JjLmwzbnVtIHx8Ci0JCSAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJCWlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7bmZwcm90byB8fAomIzQzOwkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDtsNHByb3RvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpbmZvLSZndDtubGgtJmd0O25sbXNnX2ZsYWdzICZhbXA7IE5MTV9GX0VYQ0wpCkBAIC00NzksMTAgJiM0Mzs0ODAsMTAgQEAgbmZubF9jdGhlbHBlcl9kdW1wX3R1cGxlKHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJaWYgKG5sYV9wdXRfYmUxNihza2IsIE5GQ1RIX1RVUExFX0wzUFJPVE9OVU0sCi0JCQkgaHRvbnMoaGVscGVyLSZndDt0dXBsZS5zcmMubDNudW0pKSkKJiM0MzsJCQkgaHRvbnMoaGVscGVyLSZndDtuZnByb3RvKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JaWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSkpCiYjNDM7CWlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLSZndDtsNHByb3RvKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlubGFfbmVzdF9lbmQoc2tiLCBuZXN0X3Bhcm1zKTsKQEAgLTY2MSw4ICYjNDM7NjYyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQkJY29udGludWU7CiAKIAkJaWYgKHR1cGxlX3NldCAmYW1wOyZhbXA7Ci0JCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7dHVwbGUuc3JjLmwzbnVtIHx8Ci0JCSAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7bmZwcm90byB8fAomIzQzOwkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDtsNHByb3RvKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNrYjIgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKQEAgLTcyMSw4ICYjNDM7NzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQkJY29udGludWU7CiAKIAkJaWYgKHR1cGxlX3NldCAmYW1wOyZhbXA7Ci0JCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7dHVwbGUuc3JjLmwzbnVtIHx8Ci0JCSAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJCSAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci0mZ3Q7bmZwcm90byB8fAomIzQzOwkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDtsNHByb3RvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWZvdW5kID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIENvbm50cmFjayBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBtZXNzaW5nIHdpdGggbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkmIzM5O3JlIGRlZmluZWQgYW5kIHJlZ2lzdGVyZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGVsaW1pbmF0aW5nIHRoZSBgdHVwbGVgIGZpZWxkIGluIGBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcmAgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGluZGl2aWR1YWwgcHJvdG9jb2wgaWRlbnRpZmllcnMgKGBuZnByb3RvYCBhbmQgYGw0cHJvdG9gKS4gIFRoZXkmIzM5O3ZlIGFsc28gY2hhbmdlZCBgbmZfY3RfaGVscGVyX2luaXRgIHRvIHRha2UgYW4gYHU4IGwzbnVtYCBpbnN0ZWFkIG9mIGB1MTYgbDNudW1gLCBhbmQgcmVtb3ZlZCBzb21lIG9mIHRoZSBub3cgb2Jzb2xldGUgaW5pdGlhbGlzZXJzLiBJdCBmZWVscyBsaWtlIHRoZXkmIzM5O3JlIHN0cmVhbWxpbmluZyB0aGUgaGVscGVyIHN0cnVjdHVyZS4KCk15IGluaXRpYWwgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHJlZmFjdG9yIHRvIGFsaWduIHdpdGggYSBtb3JlIHJ1bGUtYmFzZWQgaGVscGVyIGFzc2lnbm1lbnQsIGxpa2Ugd2hhdCB5b3UmIzM5O2Qgc2VlIHdpdGggbmZ0YWJsZXMgb3IgdGhlIGNvbm50cmFjayB0YXJnZXQgaW4gaXB0YWJsZXMuIFRoZSByZW1vdmFsIG9mIHBvcnQtYmFzZWQgbWF0Y2hpbmcgZnVydGhlciByZWluZm9yY2VzIHRoaXM7IGl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBzeXN0ZW0gaXMgbm8gbG9uZ2VyIHJlbHlpbmcgb24gYXV0b21hdGljIGhlbHBlciBzZWxlY3Rpb24gYnkgcG9ydCwgd2hpY2ggSSBzZWVtIHRvIHJlY2FsbCB3YXMgZGVwcmVjYXRlZCBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbnl3YXkuIFRoZSByZW1vdmFsIG9mIHRoZSB0dXBsZXMgYW5kIHBvcnQgYXJyYXlzIGZyb20gdGhlIGhlbHBlcnMgdGhlbXNlbHZlcyBjbGluY2hlcyB0aGF0IHBvaW50LgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBoZWxwZXIgbW9kdWxlcywgSSYjMzk7bSB0aGlua2luZyBhIHRob3JvdWdoIHJldmlldyBpcyBpbiBvcmRlci4gVGhlIGZpbGVzIG1vZGlmaWVkIGluY2x1ZGUgYm90aCBoZWFkZXIgZmlsZXMgYW5kIHRoZSBjb3JlIGhlbHBlciBsb2dpYywgcGx1cyBzcGVjaWZpYyBoZWxwZXIgaW1wbGVtZW50YXRpb25zIGxpa2UgRlRQLCBJUkMsIFNJUCwgYW5kIFRGVFAuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3RpbmcgZXZlcnl0aGluZywgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhbmQgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGhlbHBlciBvcHRpb25zLCBhcyB3ZWxsIGFzIGBDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGVgLCBhbmQgYG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyYC4gIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBOb3cgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2hlbHBlcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTg1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwMTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAyLVx0XHRcdCAgSEVMUEVSX05BTUUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDMtXHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwNDpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNS1cdFx0XHQgIEhFTFBFUl9OQU1FLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jPTU3MT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYy01NzgtXHRcdCBhcmUgdHJhY2tlZCBvciBub3QgLSBZSyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM6NTc5Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2ZnRwLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYy01ODAtXHRcdFx0ICBIRUxQRVJfTkFNRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcxNTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTYtXHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE3LVx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzE4Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTktXHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzIwLVx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzIxOlx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyMi1cdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyMy1cdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI0Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjUtXHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjYtXHRcdFx0ICBcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcyNzpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyOC1cdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTQ3MT1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDcyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDczOnZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ3NC1cdFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTAzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUwNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MDUtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM9MjU2PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jLTI3OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jOjI4MDpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmlyYywgQUZfSU5FVCwgSVBQUk9UT19UQ1AsIEhFTFBFUl9OQU1FLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjgxLVx0XHRcdCAgXHUwMDI2aXJjX2V4cF9wb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMtNTQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmM6NTU6XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01Ni1cdFx0XHQgIFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYz01Mzg9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy01NDEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM6NTQyOlx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTQzLVx0XHRcdCAgXCYjMzQ7cHB0cFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9MTgwPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTg1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jOjE4NjpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYy0xODctXHRcdFx0ICBIRUxQRVJfTkFNRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz0xNzkyPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE3OTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzoxNzk4Olx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzBdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNzk5LVx0XHRcdCAgSEVMUEVSX05BTUUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTgwMS1cdFx0XHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjE4MDI6XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMV0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE4MDMtXHRcdFx0ICBIRUxQRVJfTkFNRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM9NTE9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NubXBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYzo1NTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMtNTYtXHRcdFx0ICBcJiMzNDtzbm1wXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYz0xMDU9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM6MTExOlx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTExMi1cdFx0XHQgIEhFTFBFUl9OQU1FLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgSGVscGVyIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCB0aGUgYG5mX2N0X2hlbHBlcl9pbml0YCBmdW5jdGlvbiBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgbG93LWxldmVsIGNoYW5nZXMgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgYXJlYSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogaXQmIzM5O3MgYmVlbiBhbHRlcmVkIGFuZCB3aGF0IHRoYXQgc2lnbmlmaWVzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHpvb20gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5LiBJdOKAmXMgcHJldHR5IGNsZWFyIHRoYXQgaXTigJlzIGFsdGVyaW5nIHdoYXQgaGFwcGVucyB3aGVuIHdlIHJlZ2lzdGVyIHRob3NlIGhlbHBlcnMsIGFuZCBsb29raW5nIGF0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyB3aWxsIG1ha2UgaXQgY2xlYXIgZXhhY3RseSBob3cgdGhleSYjMzk7cmUgYmVpbmcgY2hhbmdlZC4gSSB3aWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBkZXRhaWwsIHNvIGl0JiMzOTtzIGJlc3QgdG8gaGF2ZSBib3RoIGluIG1pbmQgYXQgdGhlIHNhbWUgdGltZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQmIzM5O3MgZGlmZmVyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYz01NzE9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2Z0cF9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTgzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM6NTg0Olx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZmdHAsIFx1MDAyNmZ0cF9wdHIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzMxOlx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMyLVx0XHRcdFx0XHQgICBcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zNjY9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNjg6aW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwNi19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQwOTppbnQgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTAtXHRcdFx0XHQgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKipoZWxwZXJfcHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQyMjpcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMy1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDMzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz01MDY9aW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTIyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTIzOlx0XHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MjQtXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYz0yNTY9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjgzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM6Mjg0Olx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZpcmMsIFx1MDAyNmlyY19wdHIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjg1LVx0aWYgKHJldCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYz00OT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbmV0Ymlvc19uc19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jLTU3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jOjU4Olx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2aGVscGVyLCBcdTAwMjZoZWxwZXJfcHRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01OS19XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jPTUzOD1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTU0OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzo1NTA6XHRyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZwcHRwLCBcdTAwMjZwcHRwX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTUxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9MTgwPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTkwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jOjE5MTpcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c2FuZSwgXHUwMDI2c2FuZV9wdHIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE5Mi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM9NTE9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NubXBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYzo2MDpcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmhlbHBlciwgXHUwMDI2aGVscGVyX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMtNjEtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYz0xMDU9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM6MTE2Olx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZ0ZnRwLCBcdTAwMjZ0ZnRwX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMtMTE3LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MjIwPW5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgxLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyODI6XHRyZXQgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgzLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNoYW5nZXMuCgoqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmZfY3RfaGVscGVyX2luaXRgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYW5kIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBzbyB1bmRlcnN0YW5kaW5nIGFueSBtb2RpZmljYXRpb25zIHRoZXJlIGlzIGtleSB0byBncmFzcGluZyB0aGUgY29yZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gY2hhbmdlZCBpbiB0aGF0IGZ1bmN0aW9uOyBpdCB3aWxsIGxpa2VseSBnaXZlIHRoZSBiZXN0IG92ZXJ2aWV3IG9mIGhvdyBjb25udHJhY2sgaGVscGVyIGJlaGF2aW9yIGhhcyBiZWVuIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTU9c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTY6X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy03NS19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo3NjpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy03Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz03OT1uZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtODQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo4NTpcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtODYtI2lmZGVmIENPTkZJR19NT0RVTEVTXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtOTAtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6OTE6XHRcdFx0aCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKG5hbWUsIGwzbnVtLCBwcm90b251bSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy05Mi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xMzQ9bmZfbmF0X2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE0MS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE0MjpcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTQzLVx0aWYgKCFoKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE5MjY9c3RhdGljIGludCBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5NTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTk1NjpcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTk1Ny1cdFx0XHRcdFx0ICAgIG5mX2N0X3Byb3RvbnVtKGN0KSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTIyMjI9Y3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjUwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjIyNTE6XHRcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI1Mi1cdFx0XHRcdFx0XHQgICAgbmZfY3RfcHJvdG9udW0oY3QpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI2MS1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjI2MjpcdFx0XHRoZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChoZWxwbmFtZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjYzLVx0XHRcdFx0XHRcdFx0ICAgIG5mX2N0X2wzbnVtKGN0KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4MC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODgxOlx0XHRhc3NpZ25faGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Mi1cdFx0XHRcdFx0XHRcdCAgIG5mX2N0X2wzbnVtKGN0KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29ubnRyYWNrIEhlbHBlciBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgdG91Y2hpbmcgb24gdGhlIGZ1bmN0aW9uYWwgYXNwZWN0cyBhbmQgc2hvdWxkIGJlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB3aXRoIHRob3NlIGBuZm5ldGxpbmtfY3RoZWxwZXJgIGFuZCBgY3RuZXRsaW5rYCBpbnRlcmZhY2VzLiBBbmQgb2YgY291cnNlLCB0aGUgbG9hZGluZyBvZiB0aGUgY29ubnRyYWNrIGhlbHBlciBtb2R1bGVzIHdpbGwgYmUga2V5LgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRob3NlIGNvcmUgZnVuY3Rpb25zOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGFzIHdlbGwgYXMgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIG9wZXJhdGlvbnM6IGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGFuZCBgbmZubF9jdGhlbHBlcl9kZWxgLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGlzIGhlbHBlciBzeXN0ZW0uCgpBbmQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zOiBgTkZfQ09OTlRSQUNLYCwgbmF0dXJhbGx5LCBhbmQgYE5GX0NUX05FVExJTktfSEVMUEVSYCB3aGljaCBJIHN1c3BlY3QgaXMgdGhlIGNvbmZpZyByZXF1aXJlZCBmb3IgbmV0bGluaywgYW5kIHRoZW4gYWxsIHRob3NlIGhlbHBlci1zcGVjaWZpYyBvcHRpb25zIGZvciBwcm90b2NvbHMgc3VjaCBhcyBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBhbmQgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLgoKV2FpdCBhIG1pbnV0ZSwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGlzIHZlcnkgbGlrZWx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVkIHRvIGBuZm5ldGxpbmtfY3RoZWxwZXIuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZyBvcHRpb24gdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5ldGxpbmtfY3RoZWxwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBqdW1wIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZmlsZSBmb3IgdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0sIGFuZCB0aGUgcGxhY2Ugd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBJIG5lZWQgdG8gZXhhbWluZS4gSSYjMzk7bGwgc3RhcnQgaGVyZSwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIG9mdGVuIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgdG8gbG9vayBmb3IgZGVlcGVyIGNvZGUgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19jdGhlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM5Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIE5ldGZpbHRlciBjb25maWd1cmF0aW9ucy4gWWVzLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLgoKTm93LCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGNvbmNlcm5pbmcgY29ubmVjdGlvbiB0cmFja2luZywgYXMgdGhlc2UgYXJlIG9mdGVuIGludGVyY29ubmVjdGVkLiBSaWdodCwgaGVyZSB3ZSBnbzogYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1RGVFBgLCBgTkZfQ09OTlRSQUNLX1NOTVBgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBhbmQgZmluYWxseSwgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2Ugc2V0dGluZ3MsIGFuZCB0aGVpciByZXNwZWN0aXZlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGlzIHdpbGwgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2Z0cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgJiM0Mzs9IG5mX2Nvbm50cmFja19hbWFuZGEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19mdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICYjNDM7PSBuZl9jb25udHJhY2tfaDMyMy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhlIGBORl9DT05OVFJBQ0tgIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgbGlzdDogYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19URlRQYCwgYE5GX0NPTk5UUkFDS19TTk1QYCwgYW5kIGZpbmFsbHksIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYC4gUmlnaHQsIGdvdCBpdC4KCkhtbSwgd2FpdCBhIHNlY29uZC4gVGhhdCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgZW50cnkgZmVlbHMgb3V0IG9mIHBsYWNlIGluIHRoYXQgbGlzdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0JiMzOTtzIG9mdGVuIGltcGxpY2l0bHkgYWN0aXZhdGVkIHdoZW4gZWl0aGVyIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2Agb3IgYE5GX0NPTk5UUkFDS19TTk1QYCBpcyBlbmFibGVkLCBhbmQgdHlwaWNhbGx5IHNob3VsZG4mIzM5O3QgYmUgbGlzdGVkIGluZGVwZW5kZW50bHkuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19CUk9BRENBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTI1OD1jb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mjc3PWNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzk6XHRzZWxlY3QgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI4MC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mjk2PWNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTgtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5OTpcdHNlbGVjdCBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzAwLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlN0cmVhbWxpbmluZyB0aGUgTmV0ZmlsdGVyIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIGl0IHNlZW1zIHVubmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkgZW51bWVyYXRlIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYC4gSSBjYW4gaW5mZXIgdGhhdCBiYXNlZCBvbiB0aGUgY29udGV4dCwgc28gdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgdGhhdCBvdmVyaGVhZC4gTGV0JiMzOTtzIG1vdmUgb24gYW5kIGVuc3VyZSB3ZSYjMzk7cmUgdGhvcm91Z2guIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGUgdXNhZ2UgYW5kIGNvbnRleHQgb2YgYE5GX0NPTk5UUkFDS19TTk1QYCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGVgIGZpbGUuIENoZWNraW5nIHRoYXQgTWFrZWZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfbmF0X3NubXBfYmFzaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19ORl9OQVRfUFBUUCkgJiM0Mzs9IG5mX25hdF9wcHRwLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0xOC1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxOTpuZl9uYXRfc25tcF9iYXNpYy15IDo9IG5mX25hdF9zbm1wX2Jhc2ljLmFzbjEubyBuZl9uYXRfc25tcF9iYXNpY19tYWluLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyMDokKG9iaikvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vOiAkKG9iaikvbmZfbmF0X3NubXBfYmFzaWMuYXNuMS5oXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05GX05BVF9TTk1QX0JBU0lDKSAmIzQzOz0gbmZfbmF0X3NubXBfYmFzaWMub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTTk1QIE5BVCBNb2R1bGUqKgoKUmlnaHQsIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5mX25hdF9zbm1wX2Jhc2ljX21haW4uY2AuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCB0aGUgYmFzaWMgU05NUCBOQVQgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBjb21waWxlZCBjb25kaXRpb25hbGx5IHVuZGVyIGBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGUgb2JqZWN0IGZpbGUuIFdoZXJlIGRvZXMgYG5mX2Nvbm50cmFja19zbm1wLm9gIGxpdmU/IEl0JiMzOTtzIGxpa2VseSBidWlsdCBhcyBwYXJ0IG9mIHRoZSBtYWluIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGF0JiMzOTtsbCBjb25maXJtIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBsaW5raW5nIGlzc3Vlcy4gSXQmIzM5O3MgZ29vZCB0byBrZWVwIHRyYWNrIG9mIHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX3NubXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDk9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGJpb3NfbnMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICYjNDM7PSBuZl9jb25udHJhY2tfc25tcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTUxLW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19wcHRwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3R1ZmYsIHNwZWNpZmljYWxseSB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSBkb3duIHRvIGBORl9OQVRfU05NUF9CQVNJQ2AuIENsZWFybHksIHRoZXNlIGFsbCByZWxhdGUgdG8gZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIHZhcmlvdXMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLiBJIHNlZSBhIGJyb2FkIGFycmF5LCBpbmNsdWRpbmcgcHJvdG9jb2xzIGxpa2UgRlRQLCBILjMyMywgSVJDLCBhbmQgZXZlbiBTTk1QLiBHb29kLCBJIGxpa2UgdGhhdCB0aGUgbW9kdWxlcyBhcmUgc2VwYXJhdGVkIGJ5IHNwZWNpZmljIG5lZWRzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaGVscGVyIG1hbmFnZW1lbnQ6IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYW5kIGBuZm5sX2N0aGVscGVyX2RlbGAuIFRoZXNlIGNsZWFybHkgZGVhbCB3aXRoIHJlZ2lzdGVyaW5nLCB1bnJlZ2lzdGVyaW5nLCBmaW5kaW5nLCBhbmQgbWFuYWdpbmcgdGhlIGhlbHBlciBtb2R1bGVzIHRoZW1zZWx2ZXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgYG5mbmxfKmAgZnVuY3Rpb25zIGluZGljYXRlIHRoZSB1c2Ugb2YgTmV0bGluayBmb3IgY29tbXVuaWNhdGlvbi4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbmZuZXRsaW5rX2N0aGVscGVyLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIHRoYXQmIzM5O3MgYmVlbiB0b3VjaGVkIGluIHRoYXQgZmlsZS4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBmaWxlIGl0c2VsZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlbiYjMzk7dCBpbmNsdWRlZCBpbiB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggY291bGQgcmV2ZWFsIGltcG9ydGFudCBjb250ZXh0IHRoYXQgbWlnaHQgZ2V0IG1pc3NlZCBpZiBJIG9ubHkgbG9va2VkIGF0IHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9jdGhlbHBlcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzM9c3RydWN0IG5mbmxfY3RoZWxwZXIge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzctXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjM4OnN0YXRpYyBMSVNUX0hFQUQobmZubF9jdGhlbHBlcl9saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzktXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00MT1uZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY4LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYJiM0MzsxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzAtXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzU6bmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtODEtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1RVUExFX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6ODI6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl90dXBsZV9wb2wsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy04My1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz05OD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjk5Om5mbmxfY3RoZWxwZXJfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xMDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTE4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTE5Om5mbmxfY3RoZWxwZXJfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTIwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEzNy1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xbTkZDVEhfUE9MSUNZX01BWCYjNDM7MV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEzOS1cdFtORkNUSF9QT0xJQ1lfTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xNDU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNDY6bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTQ3LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTUyLVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfTUFYLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNTM6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9sLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTU0LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc2Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgmIzQzOzFdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzctXHRbTkZDVEhfUE9MSUNZX1NFVF9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxODE6bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE4Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE4OC1cdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfUE9MSUNZX1NFVF9NQVgsIGF0dHIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE4OTpcdFx0XHRcdFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xOTAtXHRcdFx0XHRcdCAgTlVMTCk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDYtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjIwNzpcdFx0cmV0ID0gbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDgtXHRcdFx0XHRcdFx0ICB0YltORkNUSF9QT0xJQ1lfU0VUJiM0MztpXSk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yMTk9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMjA6bmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIyMS1cdFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjQzOlx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KGhlbHBlciwgdGJbTkZDVEhfUE9MSUNZXSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yNjEtXHRoZWxwZXItXHUwMDNlaGVscCA9IG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyNjI6XHRoZWxwZXItXHUwMDNlZnJvbV9ubGF0dHIgPSBuZm5sX2N0aGVscGVyX2Zyb21fbmxhdHRyO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyNjM6XHRoZWxwZXItXHUwMDNldG9fbmxhdHRyID0gbmZubF9jdGhlbHBlcl90b19ubGF0dHI7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI2NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI4NS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mjg2Olx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZmN0aC1cdTAwM2VsaXN0LCBcdTAwMjZuZm5sX2N0aGVscGVyX2xpc3QpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODctXHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTI5NT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI5NjpuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcG9saWN5LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yOTctXHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMDMtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9NQVgsIGF0dHIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjMwNDpcdFx0XHRcdFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMDUtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzI2LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyOC1cdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM0Ny1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzQ4Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNDktXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bmV3X3BvbGljeVtpXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzY3OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2OC1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzc0LVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfU0VUX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc1Olx0XHRcdFx0XHQgIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ni1cdFx0XHRcdFx0ICBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM4Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzg3Olx0cmV0dXJuIG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwodGIsIGhlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM4OC19XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0zOTA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozOTE6bmZubF9jdGhlbHBlcl91cGRhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM5Mi1cdFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDAzLVx0aWYgKHRiW05GQ1RIX1BPTElDWV0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDA0Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3koaGVscGVyLCB0YltORkNUSF9QT0xJQ1ldKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDA1LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI1LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjctXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDQzOlx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShcdTAwMjZ0dXBsZSwgdGJbTkZDVEhfVFVQTEVdKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQ0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDQ3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShubGN0aCwgXHUwMDI2bmZubF9jdGhlbHBlcl9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ0OC1cdFx0Y3VyID0gbmxjdGgtXHUwMDNlaGVscGVyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDY0LVx0aWYgKGhlbHBlciA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0NjU6XHRcdHJldCA9IG5mbmxfY3RoZWxwZXJfY3JlYXRlKHRiLCBcdTAwMjZ0dXBsZSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ2Ni1cdGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDY3Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZSh0YiwgaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDY4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9NDcyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDczOm5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00NzQtXHRcdFx0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00OTY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0OTc6bmZubF9jdGhlbHBlcl9kdW1wX3BvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00OTgtXHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTUzNz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjUzODpuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCB1MzIgdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTM5LVx0XHRcdGludCBldmVudCwgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTU3Olx0aWYgKG5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShza2IsIGhlbHBlcikgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTYwOlx0aWYgKG5mbmxfY3RoZWxwZXJfZHVtcF9wb2xpY3koc2tiLCBoZWxwZXIpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy01NjEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9NTgzPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTg0Om5mbmxfY3RoZWxwZXJfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU4NS17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MDYtXHRcdFx0fVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2MDc6XHRcdFx0aWYgKG5mbmxfY3RoZWxwZXJfZmlsbF9pbmZvKHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjA4LVx0XHRcdFx0XHQgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTYyNS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjI2OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjI3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NDEtXHRcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2NDI6XHRcdFx0LmR1bXAgPSBuZm5sX2N0aGVscGVyX2R1bXBfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY0My1cdFx0fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY1MC1cdGlmICh0YltORkNUSF9UVVBMRV0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjUxOlx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3BhcnNlX3R1cGxlKFx1MDAyNnR1cGxlLCB0YltORkNUSF9UVVBMRV0pO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTItXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTctXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjY1ODpcdGxpc3RfZm9yX2VhY2hfZW50cnkobmxjdGgsIFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTktXHRcdGN1ciA9IG5sY3RoLVx1MDAzZWhlbHBlcjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY3NC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Njc1Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhza2IyLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NzYtXHRcdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY5MC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjkxOnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjkyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MDctXHRpZiAodGJbTkZDVEhfVFVQTEVdKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjcwODpcdFx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShcdTAwMjZ0dXBsZSwgdGJbTkZDVEhfVFVQTEVdKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzA5LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzE1LVx0cmV0ID0gLUVOT0VOVDtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzE2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5sY3RoLCBuLCBcdTAwMjZuZm5sX2N0aGVscGVyX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzE3LVx0XHRjdXIgPSBubGN0aC1cdTAwM2VoZWxwZXI7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MzktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc0MDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl9wb2xpY3lbTkZDVEhfTUFYJiM0MzsxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQxLVx0W05GQ1RIX05BTUVdID0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mbmxfY3RoZWxwZXJfY2JbTkZOTF9NU0dfQ1RIRUxQRVJfTUFYXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ5LVx0W05GTkxfTVNHX0NUSEVMUEVSX05FV11cdD0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTA6XHRcdC5jYWxsXHRcdD0gbmZubF9jdGhlbHBlcl9uZXcsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc1MS1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX01VVEVYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTItXHRcdC5hdHRyX2NvdW50XHQ9IE5GQ1RIX01BWCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzUzOlx0XHQucG9saWN5XHRcdD0gbmZubF9jdGhlbHBlcl9wb2xpY3lcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU0LVx0fSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU1LVx0W05GTkxfTVNHX0NUSEVMUEVSX0dFVF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1NjpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX2dldCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU3LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc1OC1cdFx0LmF0dHJfY291bnRcdD0gTkZDVEhfTUFYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTk6XHRcdC5wb2xpY3lcdFx0PSBuZm5sX2N0aGVscGVyX3BvbGljeVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjAtXHR9LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjEtXHRbTkZOTF9NU0dfQ1RIRUxQRVJfREVMXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc2MjpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX2RlbCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYzLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc2NC1cdFx0LmF0dHJfY291bnRcdD0gTkZDVEhfTUFYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NjU6XHRcdC5wb2xpY3lcdFx0PSBuZm5sX2N0aGVscGVyX3BvbGljeVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjYtXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzY4LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5mbmxfY3RoZWxwZXJfc3Vic3lzID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NzAtXHQubmFtZVx0XHRcdFx0PSBcJiMzNDtjdGhlbHBlclwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc3Mi1cdC5jYl9jb3VudFx0XHRcdD0gTkZOTF9NU0dfQ1RIRUxQRVJfTUFYLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NzM6XHQuY2JcdFx0XHRcdD0gbmZubF9jdGhlbHBlcl9jYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc0LX07XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz03NzY9TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0NUSEVMUEVSKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3Nzg6c3RhdGljIGludCBfX2luaXQgbmZubF9jdGhlbHBlcl9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc3OS17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03ODEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc4MjpcdHJldCA9IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoXHUwMDI2bmZubF9jdGhlbHBlcl9zdWJzeXMpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03ODMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03OTEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc5MjpzdGF0aWMgdm9pZCBfX2V4aXQgbmZubF9jdGhlbHBlcl9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc5My17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03OTYtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc5NzpcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZuZm5sX2N0aGVscGVyX3N1YnN5cyk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc5OC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzk5Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5sY3RoLCBuLCBcdTAwMjZuZm5sX2N0aGVscGVyX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtODAwLVx0XHRjdXIgPSBubGN0aC1cdTAwM2VoZWxwZXI7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy04MDYtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjgwNzptb2R1bGVfaW5pdChuZm5sX2N0aGVscGVyX2luaXQpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo4MDg6bW9kdWxlX2V4aXQobmZubF9jdGhlbHBlcl9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQ29ubnRyYWNrIEhlbHBlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oZWxwZXIuY2AgZmlsZS4gVGhlIGNvcmUgb25lcyB0byBmb2N1cyBvbiBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uIGFyZTogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBhbmQgYG5mbmxfY3RoZWxwZXJfZGVsYC4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgcmVnaXN0cmF0aW9uLCBsb29rdXAsIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gbWVjaGFuaXNtcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgc3dlZXAgb2YgdGhhdCBmaWxlLiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBmdW5jdGlvbiB0aGF0IHdhcyB0b3VjaGVkIGR1cmluZyB0aGUgY2hhbmdlcy4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oZWxwZXIuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgYGhlbHBlcl9oYXNoYCBpbiBgbmZfY29ubnRyYWNrX2hlbHBlci5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29ubnRyYWNrIGhlbHBlciBpc3N1ZS4uLiBXaGVyZSBzaG91bGQgSSBzdGFydCBteSBpbnZlc3RpZ2F0aW9uPyBUaGUga2VybmVsJiMzOTtzIGNvbm50cmFjayBoZWxwZXIgaW1wbGVtZW50YXRpb24gaXMgY29tcGxleC4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCByZXZpZXcgc3VnZ2VzdHMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0byBpbnZvbHZlIHRoZSBoZWxwZXIgaGFzaCB0YWJsZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIHN0b3JlcyB0aGVzZSBoZWxwZXJzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgYW5kIHNwZWNpZmljYWxseSBncmVwIGZvciBgaGVscGVyX2hhc2hgLiBJdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgY29kZSB0aGF0IG1hbmFnZXMgdGhlIGhlbHBlciYjMzk7cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaW4gdGhhdCBtb2R1bGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCBpbml0aWFsIGNvbnRleHQgSSBuZWVkIHRvIHB1cnN1ZSB0aGlzIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGVscGVyX2hhc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zMz1zdGF0aWMgREVGSU5FX01VVEVYKG5mX2N0X2hlbHBlcl9tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNDpzdHJ1Y3QgaGxpc3RfaGVhZCAqbmZfY3RfaGVscGVyX2hhc2ggX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9oYXNoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2LXVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfaHNpemUgX19yZWFkX21vc3RseTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MT1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MzpzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTU2PV9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo2MTpcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02Mi1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjY0Olx0aSA9IGhlbHBlcl9oYXNoKG5hbWUsIHByb3RvbnVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTY1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NjY6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02Ny1cdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTM2OD1pbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNzYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNzc6XHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzc4LVx0XHRyZXR1cm4gLUVOT0VOVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zODctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozODg6XHRoID0gaGVscGVyX2hhc2gobWUtXHUwMDNlbmFtZSwgbWUtXHUwMDNlbDRwcm90byk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zODktXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozOTA6XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzkxLVx0XHRpZiAoIXN0cmNtcChjdXItXHUwMDNlbmFtZSwgbWUtXHUwMDNlbmFtZSkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDAwLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lLVx1MDAzZWN0X3JlZmNudCwgMSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDE6XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2bWUtXHUwMDNlaG5vZGUsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwMi1cdG5mX2N0X2hlbHBlcl9jb3VudCYjNDM7JiM0Mzs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTY2PWludCBuZl9jb25udHJhY2tfaGVscGVyX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01NjgtXHRuZl9jdF9oZWxwZXJfaHNpemUgPSAxOyAvKiBnZXRzIHJvdW5kZWQgdXAgdG8gdXNlIG9uZSBwYWdlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1Njk6XHRuZl9jdF9oZWxwZXJfaGFzaCA9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01NzAtXHRcdG5mX2N0X2FsbG9jX2hhc2h0YWJsZShcdTAwMjZuZl9jdF9oZWxwZXJfaHNpemUsIDApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTcxOlx0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3Mi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTc4PXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9maW5pKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01Nzkte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTgwOlx0a3ZmcmVlKG5mX2N0X2hlbHBlcl9oYXNoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjU4MTpcdG5mX2N0X2hlbHBlcl9oYXNoID0gTlVMTDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU4Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBJbmZyYXN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IgdW5kZXJ3YXkuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYWRvcHRpb24gb2YgYGpoYXNoYCB3aXRoaW4gdGhlIGBoZWxwZXJfaGFzaGAgZnVuY3Rpb24sIHdoaWNoIHJlcGxhY2VzIHRoZSBzaW1wbGVyIGJpdHdpc2Ugb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBnb29kIHRvIHNlZS4KCkJleW9uZCB0aGUgaGFzaGluZywgdGhlIHNpZ25hdHVyZSBvZiB0aGUgYG5mX2N0X2hlbHBlcl9pbml0YCBmdW5jdGlvbiBoYXMgYWxzbyBiZWVuIHR3ZWFrZWQuIEFuZCB0aGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIGNvcmUgaGVscGVyIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2VzIHRvIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBuZXcgaGFzaCBmdW5jdGlvbiBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbmZwcm90b2AgYW5kIGBsNHByb3RvYCBmaWVsZHMgYXJlIGJlaW5nIGludGVncmF0ZWQgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGltcGFjdCBvdmVyYWxsIHBlcmZvcm1hbmNlLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYG5mbmV0bGlua19jdGhlbHBlci5jYCBmaWxlLiBUaGUgY2hhbmdlcyB0aGVyZSwgd2l0aGluIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGFuZCBgbmZubF9jdGhlbHBlcl9jcmVhdGVgLCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmaWVsZHMgdG9vLCBpbmRpY2F0aW5nIHRoYXQgdGhleeKAmXJlIGJlaW5nIGhhcm1vbml6ZWQgd2l0aCB0aGUgdXBkYXRlZCBoZWxwZXIgbW9kZWwsIHdoaWNoIGlzIG5lY2Vzc2FyeS4gSSBleHBlY3Qgc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvciBidWcgZml4ZXMgaGVyZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIGltcGFjdGVkLiBPa2F5LCBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCB0aGVuIHRoZSBtb3JlIHNwZWNpZmljIGhlbHBlcnM6IGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19URlRQYCwgYE5GX0NPTk5UUkFDS19TTk1QYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyBgTkZfTkFUX1NOTVBfQkFTSUNgIGludGVyYWN0cyB3aXRoIGFsbCBvZiB0aGlzLiBBaCwgYW5kIGl0JiMzOTtzIGZvciBgbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jYCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWZmZWN0ZWQgaGVyZS4gQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBieSBsb29raW5nIGF0IHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE9rYXksIGdvb2QuIFRoYXQgc2hvdWxkIGJlIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mzg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKQWxyaWdodCwgY29uZmlybWluZyB0aGF0IGBORl9OQVRfU05NUF9CQVNJQ2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZsYWcgdG8gYmUgZm9jdXNpbmcgb24uIEdpdmVuIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0byBmaWxlcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY2AsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBjb25uZWN0aW9uIHRyYWNraW5nIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQga2VybmVsIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZXhhY3QgZmlsZW5hbWUuIEl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYW4gYG9wZW52c3dpdGNoYCBtb2R1bGUsIHNvIEkgc2hvdWxkIGNoYW5nZSBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19vdnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0PW5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTKSAmIzQzOz0gbmZfY29ubnRyYWNrX292cy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2LW5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DVF9QUk9UT19TQ1RQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDc2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfTkZfQ09OTlRSQUNLX09WU2Agb3B0aW9uLi4uIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyB0aGF0JiMzOTtzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIE5ldGZpbHRlci1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIGl0cyByZWxldmFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19PVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTE4OD1jb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA0MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYSBCb29sZWFuIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYm9vbGVhbiBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIHRoaW5nLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGV2YWx1YXRlZCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgaWYgaXQmIzM5O3MgdG9nZ2xlZC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHF1aWNrbHkgaWRlbnRpZnlpbmcgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRvd25zdHJlYW0gaW1wbGljYXRpb25zLiBJJiMzOTttIGVzc2VudGlhbGx5IHRyYWNpbmcgaXRzIHVzYWdlIOKAkyB3aGljaCBtb2R1bGVzLCBmdW5jdGlvbnMsIG9yIGV2ZW4gb3RoZXIgY29uZmlncyByZWZlcmVuY2Ugb3IgZGVwZW5kIG9uIGl0cyBzdGF0ZT8gSXMgaXQganVzdCBhIHNpbXBsZSBmbGFnLCBvciBkb2VzIGl0cyB2YWx1ZSBkaXJlY3RseSBpbmZsdWVuY2UgY3JpdGljYWwgY2FsY3VsYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIG5vdCBiZSBqdXN0IGEgc2ltcGxlIHNpbmdsZSBsaW5lIG9mIHVzYWdlLiBTbyBJJiMzOTtsbCBnbyB0aHJvdWdoIGFuZCBjaGVjayB0aGlzIGl0ZW0gZm9yIGFsbCByZWZlcmVuY2VzIHRvIHRoZSB2YWx1ZSB0aGlzIGNvbmZpZyByZXByZXNlbnRzIGFuZCB1bmRlcnN0YW5kIHRoZSB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWc9Nj1jb25maWcgT1BFTlZTV0lUQ0hcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xOC1cdHNlbGVjdCBORVRfTlNIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzoxOTpcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xubmV0L29wZW52c3dpdGNoL0tjb25maWctMjAtXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MTktXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbm5ldC9zY2hlZC9LY29uZmlnOjkyMDpcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvc2NoZWQvS2NvbmZpZy05MjEtXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0OTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZXkgcmVsYXRlIHRvIE9wZW4gdlN3aXRjaC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAgc2VlbSBsaWtlIHRoZSBrZXkgZHJpdmVycyBoZXJlLCBhbmQgZW5hYmxpbmcgdGhlbSBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwganVzdCBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjb25maWdzIHRoZW1zZWx2ZXM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBhbmQgdGhlIHZhcmlvdXMgYXBwbGljYXRpb24tc3BlY2lmaWMgaGVscGVyczogYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0ZUUGAsIGV0Yy4gUmlnaHQgbm93IGl0JiMzOTtzIGp1c3QgYSByYXcgbGlzdC4KCldhaXQgYSBzZWNvbmTigKYgYE5GX0NPTk5UUkFDS19PVlNgIGlzIGEgYm9vbGVhbi4gSWYgSSBlbmFibGUgYE9QRU5WU1dJVENIYCBhbmQgYE5FVF9BQ1RfQ1RgLCB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBgTkZfQ09OTlRSQUNLX09WU2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLCBhcyBpdCByZWR1Y2VzIHRoZSBjb21wbGV4aXR5IG9mIGV4cGxpY2l0bHkgbWFuYWdpbmcgdGhhdCBjb25maWcgc2VwYXJhdGVseS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlncy4gQWhhISBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgIGFuZCBgTkZfQ09OTlRSQUNLX1NOTVBgLiBJbnRlcmVzdGluZy4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgaGVscGVyIGZ1bmN0aW9uczogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAsIGFuZCBgbmZfY3RfaGVscGVyX2luaXRgLgoKQWgsIGhlcmUmIzM5O3MgYSBnb29kIG9uZTogYG5mX2N0X2hlbHBlcl9pbml0YC4gSXQgc2VlbXMgbGlrZSAqYWxsKiB0aGUgaGVscGVyIG1vZHVsZXMgYXJlIGNhbGxpbmcgdGhpcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoYXTigJlzIGEga2V5IGludGVncmF0aW9uIHBvaW50LgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgYGhlbHBlcl9oYXNoYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCBkaXJlY3RseSB1c2UgaXQgYXMgYSBzeW1ib2wgdG8gYW5hbHl6ZSB0aGUgY29kZS4gSG93ZXZlciwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBzbyB0aG9zZSBhcmUgc3RpbGwgZ29vZCBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKV2FpdCwgdGhlcmUgaXMgYWxzbyBgbmZfY3RfaGVscGVyYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTExLS8qICYjMzk7c2tiJiMzOTsgc2hvdWxkIGFscmVhZHkgYmUgcHVsbGVkIHRvIG5oX29mcy4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjEyOmludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtMTMtXHRcdCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywgdTE2IHByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTgyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjgzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy04NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jPTg1PWludCBuZl9jdF9hZGRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqbmFtZSwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTk1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM6OTY6XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtOTctXHRpZiAoIWhlbHApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4ODMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBgbmZfY3RfaGVscGVyYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbmZfY3RfaGVscGVyYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kLCBjcnVjaWFsbHksICptb2RpZmllZCouIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSB3YXkgaXQgd29ya3MsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgY2hlY2tpbmcgYGhlbHBlci0mZ3Q7bmZwcm90b2AgYW5kIGBoZWxwZXItJmd0O2w0cHJvdG9gLiBUaGlzIG1ha2VzIGBuZl9jdF9oZWxwZXJgIGEgc3Ryb25nIGNhbmRpZGF0ZSAtIGEgZ29vZCBzeW1ib2wgdG8gY29uY2VudHJhdGUgb24uIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtMTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYzoxODppbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0xOS1cdFx0XHRcdHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy04OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYzo4OTpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3Mjc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Nvbm50cmFja2AgQnJvYWRjYXN0IEhlbHBlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhleSByZW1vdmVkIHRoYXQgbGluZSwgYGV4cC0mZ3Q7dHVwbGUuc3JjLnUudWRwLnBvcnQgPSBoZWxwZXItJmd0O3R1cGxlLnNyYy51LnVkcC5wb3J0O2AsIGZyb20gYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbXBhY3QuIEkgY2FuIGNlcnRhaW5seSBzZWUgd2h5IHRoaXMgY2hhbmdlIG1pZ2h0IGJlIHNpZ25pZmljYW50LCBhbmQgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGZvY3VzLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoaXMgaGFzIGltcGxpY2F0aW9ucyBlbHNld2hlcmUuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBuZl9jb25udHJhY2tfYW1hbmRhLmNgIGFuZCBzZWUgaWYgdGhlIEFtYW5kYSBtb2R1bGUgaXMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBwb3J0IGFzc2lnbm1lbnQsIGFuZCBob3cgaXTigJlzIGJlaW5nIGhhbmRsZWQgb3IgY2lyY3VtdmVudGVkIG5vdy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBoYXMgdGhlIGRlc2lyZWQgb3V0Y29tZSBvciBpZiBpdCBoYXMgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24uIEkgd2lsbCBwcm9jZWVkIHdpdGggY2F1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1hbmRhX2hlbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz01Mj1zdGF0aWMgc3RydWN0IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjgzOnN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTg0LVx0XHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMTA3LVx0aWYgKGRhdGFvZmYgXHUwMDNlPSBza2ItXHUwMDNlbGVuKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxMDg6XHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7YW1hbmRhX2hlbHA6IHNrYmxlbiA9ICV1XFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTEwOS1cdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBhbWFuZGFfZXhwX3BvbGljeSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxNzI6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGFtYW5kYV9oZWxwZXJbMl0gX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE3MzpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmFtYW5kYV9oZWxwZXJfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xNzU9c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19hbWFuZGFfZmluaSh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE3OTpcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoYW1hbmRhX2hlbHBlcl9wdHIsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxODA6XHRcdFx0XHRcdEFSUkFZX1NJWkUoYW1hbmRhX2hlbHBlcl9wdHIpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2VhcmNoKTsgaSYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTg1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwMTpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAyLVx0XHRcdCAgSEVMUEVSX05BTUUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDM6XHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwNDpcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNS1cdFx0XHQgIEhFTFBFUl9OQU1FLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA2Olx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDg6XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA5Olx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShhbWFuZGFfaGVscGVyKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIxMDpcdFx0XHRcdFx0ICAgIGFtYW5kYV9oZWxwZXJfcHRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIxMS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6aW5nIEVmZm9ydDogQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXJzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5mX2N0X2hlbHBlcl9pbml0YCBpbiBhIGJ1bmNoIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlc2UgbW9kdWxlcywgb3IgcGVyaGFwcyBqdXN0IGBuZl9jdF9oZWxwZXJfaW5pdGAgYW5kIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGRpcmVjdGx5LiBIb3dldmVyLCBzaW5jZSB0aGUgaW5pdGlhbGl6YXRpb24gaGFwcGVucyBvbmx5IG9uY2UgZHVyaW5nIG1vZHVsZSBsb2FkLCBmdXp6aW5nIHRob3NlIGRpcmVjdGx5IHByb2JhYmx5IHdvbiYjMzk7dCBiZSBhcyBmcnVpdGZ1bCBhcyB0YXJnZXRpbmcgdGhpbmdzIHRoYXQgYXJlIGNvbnN0YW50bHkgaW4gdXNlLgoKVGhlIHJlYWwgbWVhdCB3aWxsIGxpa2VseSBiZSBpbiB0aGUgbmV0bGluayBpbnRlcmZhY2Ug4oCTIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAg4oCTIGFuZCwgY3J1Y2lhbGx5LCB0aGUgcGFja2V0IHBhdGggaXRzZWxmOiBgbmZfY3RfaGVscGVyYCBhbmQgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAuIERvbiYjMzk7dCBmb3JnZXQsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBwYWNrZXQgbWF0Y2hlcyBhIGhlbHBlciBvciB3aGVuIG9uZSBpcyBhc3NpZ25lZCB2aWEgbmV0bGluayBvciBuZnRhYmxlcy4KClNvLCBsZXQgbWUgc3VtbWFyaXplIHRoZSBrZXkgZm9jdXMgc3ltYm9sczoKKiAgIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgCiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgCiogICBgbmZfY3RfaGVscGVyX2luaXRgCiogICBgbmZubF9jdGhlbHBlcl9uZXdgCiogICBgbmZubF9jdGhlbHBlcl9nZXRgCiogICBgbmZubF9jdGhlbHBlcl9kZWxgCiogICBgbmZubF9jdGhlbHBlcl9jcmVhdGVgCiogICBgbmZfY3RfaGVscGVyYAoqICAgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAKCk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcy4gSSBzZWUgYSBidW5jaCBvZiBvcHRpb25zIGxpc3RlZDogYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19URlRQYCwgYE5GX0NPTk5UUkFDS19TTk1QYCwgYE5GX05BVF9TTk1QX0JBU0lDYCwgYE9QRU5WU1dJVENIYCwgYW5kIGBORVRfQUNUX0NUYC4KCldhaXQsIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBzZWxlY3RlZCBieSBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAsIHNvIEkgY2FuIGp1c3QgaW5jbHVkZSB0aG9zZSB0d28gaW5zdGVhZC4KCkFscmlnaHQsIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCBpcyBzZWxlY3RlZCBieSBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgIGFuZCBgTkZfQ09OTlRSQUNLX1NOTVBgLiBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCkxldCBtZSBjaGVjayBpZiBgTkZfQ09OTlRSQUNLX09WU2AgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBZZXMsIEkgc2VlIHRoZSBlbnRyeTogYG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTKSAmIzQzOz0gbmZfY29ubnRyYWNrX292cy5vYC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmNpZXMuIERvZXMgYE5GX05BVF9TTk1QX0JBU0lDYCByZXF1aXJlIGBORl9OQVRgPyBZZXMsIGl0IGRvZXMuIEluY2x1ZGUgYE5GX05BVGAuCgpEb2VzIGBORl9DT05OVFJBQ0tfU05NUGAgcmVxdWlyZSBgTkVURklMVEVSX0FEVkFOQ0VEYD8gWWVzLCBJIG5lZWQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjaGVjayBvbiB0aGUgb3RoZXJzLiBEb2VzIGBORl9DT05OVFJBQ0tfUFBUUGAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfSDMyM2AgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfU0FORWAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfVEZUUGAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfU0lQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuCkRvZXMgYE5GX0NPTk5UUkFDS19JUkNgIHJlcXVpcmUgYE5GX0NPTk5UUkFDS2A/IFllcy4KRG9lcyBgTkZfQ09OTlRSQUNLX0ZUUGAgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLgpEb2VzIGBORl9DT05OVFJBQ0tfQU1BTkRBYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuCkRvZXMgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuCkRvZXMgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZXF1aXJlIGBORl9DVF9ORVRMSU5LYD8gWWVzLCBpdCBkb2VzLiBJbmNsdWRlIGBORl9DVF9ORVRMSU5LYC4KCk9rYXksIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgbGlzdCBvZiBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE5vdwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNzM9Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBORl9DVF9ORVRMSU5LX0hFTFBFUioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHN1bW1hcml6ZSBhIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgKmRlcGVuZGVuY2llcyogb2YgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuIEkga25vdyBpdCYjMzk7cyBhIGtlcm5lbCBtb2R1bGUsIGxpa2VseSByZWxhdGVkIHRvIG5ldGZpbHRlciBhbmQgY29ubmVjdGlvbiB0cmFja2luZywgYW5kIHRoYXQgJiMzNDtORVRMSU5LJiMzNDsgc3VnZ2VzdHMgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpc3NlY3Qgd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBmdW5jdGlvbnMgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZWxpZXMgdXBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsgbWlnaHQgYmUgaW50ZWdyYXRlZCwgYW55IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvc3NpYmxlIGludGVyYWN0aW9ucyB3aXRoIHVzZXItc3BhY2UgdG9vbHMgYW5kIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBoZWxwZXIgKnByb3ZpZGVzKiBhbmQgZnJvbSB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGl0JiMzOTtzIHVzZWQuIFRoaXMgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBiZSB0aGlua2luZyBpbiB0ZXJtcyBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQgcG90ZW50aWFsIGJ1aWxkIG9yZGVyIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM3Mz1jb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluc3RydWN0aW9uIHNheXMgdG8gbG9vayBhdCB0aGUgbGluZXMgKmFmdGVyKiBgY29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBpcyBhYm91dCBOZXRmaWx0ZXIgYW5kIGxpa2VseSBpdHMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuJiMzNDsgVGhhdCBgY29uZmlnYCBsaW5lIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGUgc3Vic2VxdWVudCBsaW5lcywgd2hlcmV2ZXIgdGhleSBhcmUsIHdpbGwgdGVsbCBtZSBzb21ldGhpbmcgYWJvdXQgaG93IHRoYXQgbW9kdWxlLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBpcyBjb25maWd1cmVkIG9yIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUuIEtub3dpbmcgaG93IHRoYXQgY29tcG9uZW50IGlzIGNvbmZpZ3VyZWQgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBiZWNhdXNlIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIGFuZCBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIHNlZSB3aGF0IG9wdGlvbnMgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBOZXRmaWx0ZXIgaW4gdGVybXMgb2YgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgcG90ZW50aWFsIG5ldGxpbmsgaW50ZXJhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3Igb2YgYW55IGN1c3RvbSBmaXJld2FsbCBydWxlcyBvciBuZXR3b3JrIGFwcGxpY2F0aW9ucyBkZXBlbmRpbmcgb24gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwuIEkgYW50aWNpcGF0ZSBzZWVpbmcgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIG1heWJlIGV2ZW4gZGVzY3JpcHRpb25zIG9mIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSByZWxhdGVkIGZlYXR1cmVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aG9zZSBsaW5lcyByZXZlYWwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODU6XHRjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcbiAzODY6XHRcdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuIDM4NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzg4Olx0XHRkZXBlbmRzIG9uIE5GX0NUX05FVExJTktcbiAzODk6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfUVVFVUVcbiAzOTA6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxuIDM5MTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAzOTI6XHRcdGhlbHBcbiAzOTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgdXNlci1zcGFjZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcbiAzOTQ6XHRcdCAgaW5mcmFzdHJ1Y3R1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy4KCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBOZXRmaWx0ZXIgTmV0bGluayBGdW5jdGlvbmFsaXR5KioKClJpZ2h0LCBzbyB0byBnZXQgdGhpcyBOZXRmaWx0ZXIgTmV0bGluayBmdW5jdGlvbmFsaXR5IHdvcmtpbmcgYXMgaW50ZW5kZWQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGUgY29yZSBkZXBlbmRlbmN5IGhlcmUgc2VlbXMgdG8gaGluZ2Ugb24gYE5GX0NUX05FVExJTktgLCB0aGF04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgb2YgY291cnNlLCB0aGF0JiMzOTtzIG5vdCB0aGUgZW5kIG9mIHRoZSBzdG9yeS4gV2UmIzM5O2xsIGFsc28gbmVlZCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGZvciB0aGUgcXVldWluZyBtZWNoYW5pc20gYW5kIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCAtIHByZXN1bWFibHkgdGhlcmUmIzM5O3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlIGZvciBnbHVlaW5nIHRoaW5ncyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGBjdGAuIEFuZCBsYXN0bHksIGBORVRGSUxURVJfQURWQU5DRURgIGZlZWxzIGxpa2UgYSBwcnVkZW50IGNob2ljZSwgYXMgb2Z0ZW4gdGhlIGFkdmFuY2VkIGZlYXR1cmVzIGVuYWJsZSBvdGhlciBuZWVkZWQgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O2xsIG1ha2UgYSBwb2ludCBvZiBleHBsaWNpdGx5IGluY2x1ZGluZyBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBqdXN0IHRvIGJlIHN1cmUgd2UmIzM5O3JlIGNvdmVyZWQuCgpOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RgIHNwZWNpZmljYWxseSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk5LVx0Ym9vbCBcJiMzNDtORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMDAKCQkJCQkJCW91dHB1dDogMzg3CgkJCQkJCQl0aG91Z2h0czogNDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgZnVuY3Rpb25hbCBhbmQgd2FycmFudHMgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGFuZCB0aGVuIHRoZSB2YXJpb3VzIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbm50cmFjayBoZWxwZXJzIGxpa2UgRlRQLCBIMzIzLCBJUkMsIGV0Yy4gV2UgYWxzbyBoYXZlIGBORl9OQVRgIGFuZCBzb21lIGFzc29jaWF0ZWQgbW9kdWxlcy4gQ3J1Y2lhbGx5LCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAgYXJlIGluIHRoZSBtaXggYXMgd2VsbC4KClRoZSBwYXRjaCBpdHNlbGYgaXMgZm9jdXNpbmcgb24gYSBjb3JlIGFyZWE6IGNvbm50cmFjayBoZWxwZXIgcmVnaXN0cmF0aW9uIGFuZCBtYXRjaGluZy4gSXQmIzM5O3MgbW92aW5nIGF3YXkgZnJvbSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCB0b3dhcmRzIGp1c3QgTDMvTDQgcHJvdG9jb2wgbWF0Y2hpbmcuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGhlbHBlcnMgZ2V0IGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG5ldGZpbHRlciBjb25udHJhY2sgYW5kIGlzIGFuIGFyZWEgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gSSYjMzk7dmUgZmxhZ2dlZCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpczogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAsIGBuZl9jdF9oZWxwZXJgLCBhbmQgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGAuCgpOb3csIGxldCYjMzk7cyBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY29uZmlncy4gV2UgaGF2ZSBhIGZldyBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBhIGRlcGVuZGVuY3kgb2YgYm90aCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAuIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCBpcyBzZWxlY3RlZCBieSBib3RoIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AgYW5kIGBORl9DT05OVFJBQ0tfU05NUGAuIEFuZCBgTkZfTkFUX1NOTVBfQkFTSUNgIGlzIGRlcGVuZGVudCBvbiBgTkZfTkFUYC4KCkkmIzM5O2xsIGNvbnNvbGlkYXRlIHRoaXMgaW5mb3JtYXRpb24gaW50byBhIGNsZWFyIHJlcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NOTVAmIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9nZXQmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9kZWwmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCByZW1vdmVzIHRoZSBwb3J0LWJhc2VkIG1hdGNoaW5nIGFuZCByZXBsYWNlcyBpdCB3aXRoIEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGlzIGFmZmVjdHMgaG93IGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTozMC4zNzA0MTk5NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0NDk5NTU0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfR0xVRV9DVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19JUkNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19ORVRCSU9TX05TXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfUFBUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NBTkVcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19URlRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU05NUFwiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJORl9OQVRfU05NUF9CQVNJQ1wiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfZ2V0XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2RlbFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9jcmVhdGVcIixcbiAgICBcIm5mX2N0X2hlbHBlclwiLFxuICAgIFwibmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgb2YgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXIgcmVnaXN0cmF0aW9uIGFuZCBtYXRjaGluZy4gSXQgcmVtb3ZlcyB0aGUgcG9ydC1iYXNlZCBtYXRjaGluZyBhbmQgcmVwbGFjZXMgaXQgd2l0aCBMMy9MNCBwcm90b2NvbCBtYXRjaGluZy4gVGhpcyBhZmZlY3RzIGhvdyBoZWxwZXJzIGFyZSBhc3NpZ25lZCB0byBjb25uZWN0aW9ucyBhbmQgaG93IHRoZXkgYXJlIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTozMC4zNzA0MjUxNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDY3NzgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5ZGNkNmMzMWM3ZDMyYjc4ZmQ5NDBhMGFiMDA4MDExN2U0MjQwOGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6MDk6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXG5pbmRleCA4MTI4NmM0OTkzMjUyMS4uYjE1ZjM3NjA0Y2RlNGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXG5AQCAtOSw4ICs5LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBSQVNfUE9SVCAxNzE5XFxuLSNkZWZpbmUgUTkzMV9QT1JUIDE3MjBcXG4gI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0XFx0LyogQXVkaW8sIHZpZGVvLCBGQVggYW5kIG90aGVyICovXFxuIFxcbiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmhcXG5pbmRleCBjM2JkYjQzNzA5Mzg0ZC4uYzBiMzA1Y2U3YzNjNmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmhcXG5AQCAtNTAsOCArNTAsNiBAQCBzdHJ1Y3QgbmZfbmF0X3BwdHAge1xcbiBcXHRfX2JlMTYgcGFjX2NhbGxfaWQ7XFx0XFx0XFx0LyogTkFUJ2VkIFBBQyBjYWxsIGlkICovXFxuIH07XFxuIFxcbi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUXFx0MTcyM1xcbi1cXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MXFx0MVxcbiAjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVRcXHQyXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxcbmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxcbkBAIC0zLDggKzMsNiBAQFxcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfU0FORV9IXFxuIC8qIFNBTkUgdHJhY2tpbmcuICovXFxuIFxcbi0jZGVmaW5lIFNBTkVfUE9SVFxcdDY1NjZcXG4tXFxuIGVudW0gc2FuZV9zdGF0ZSB7XFxuIFxcdFNBTkVfU1RBVEVfTk9STUFMLFxcbiBcXHRTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmhcXG5pbmRleCA5MGIzMzRiYmNlM2NlNi4uZTNkMTczOWM1NTdkMTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmhcXG5AQCAtMiw4ICsyLDYgQEBcXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVEZUUF9IXFxuIFxcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxcbi1cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbkBAIC00MywxMSArNDMsMTAgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIge1xcbiBcXG4gXFx0cmVmY291bnRfdCBjdF9yZWZjbnQ7XFxuIFxcbi1cXHQvKiBUdXBsZSBvZiB0aGluZ3Mgd2Ugd2lsbCBoZWxwIChjb21wYXJlZCBhZ2FpbnN0IHNlcnZlciByZXNwb25zZSkgKi9cXG4tXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcXG4rXFx0dTggbmZwcm90bztcXHQvKiBORlBST1RPXyosIGNhbiBiZSBORlBST1RPX1VOU1BFQyAqL1xcbitcXHR1OCBsNHByb3RvO1xcdC8qIElQUFJPVE9fVURQL1RDUCAqL1xcbiBcXG4tXFx0LyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCwgb3IgLTEgdG9cXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xcbitcXHQvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gZGF0YSBwYXNzZXM7IHJldHVybiB2ZXJkaWN0ICovXFxuIFxcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0ICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pO1xcbkBAIC05NCw4ICs5Myw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7XFxuIFxcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLVxcdFxcdCAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tXFx0XFx0ICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCxcXG4rXFx0XFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsXFxuIFxcdFxcdCAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCxcXG4gXFx0XFx0ICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uY1xcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uY1xcbkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NubXBfYmFzaWNfaW5pdCh2b2lkKVxcbiBcXHRSQ1VfSU5JVF9QT0lOVEVSKG5mX25hdF9zbm1wX2hvb2ssIGhlbHApO1xcbiBcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIFxcXCJzbm1wX3RyYXBcXFwiLCBTTk1QX1RSQVBfUE9SVCwgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJzbm1wX3RyYXBcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFxuIFxcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIFxcdTAwMjZzbm1wX3RyYXBfaGVscGVyX3B0cik7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5pbmRleCBkZGFmYmRmYzk2ZGMzNS4uZWRjZWQwMzk5NzBkNDggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xcbkBAIC0xOTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCAxMDA4MCwgMTAwODAsIDEwMDgwLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4gXFx0XFx0XFx0ICBcXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuaW5kZXggYmY3ODgyOGM3NTQ5ZDQuLjZmZjk1NGYxYmZiODdjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcXG5AQCAtNjYsOCArNjYsNiBAQCBpbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGV4cC1cXHUwMDNldHVwbGUgICAgICAgICAgICAgICAgPSBjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XFxuIFxcbiBcXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4tXFx0aWYgKGhlbHBlcilcXG4tXFx0XFx0ZXhwLVxcdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci1cXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQ7XFxuIFxcbiBcXHRleHAtXFx1MDAzZW1hc2suc3JjLnUzLmlwICAgICAgID0gbWFzaztcXG4gXFx0ZXhwLVxcdTAwM2VtYXNrLnNyYy51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcXG5pbmRleCAwODQ3Zjg0NTYxM2Q2YS4uZjM5NDQ1OThjMTcyNmYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xcbkBAIC0zNSwxMSArMzUsNiBAQCBNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja19mdHBcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhuZl9mdHBfbG9jayk7XFxuIFxcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XFxuLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTtcXG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXFx1MDAyNnBvcnRzX2MsIDA0MDApO1xcbi1cXG4gc3RhdGljIGJvb2wgbG9vc2U7XFxuIG1vZHVsZV9wYXJhbShsb29zZSwgYm9vbCwgMDYwMCk7XFxuIFxcbkBAIC01NjAsOCArNTU1LDggQEAgc3RhdGljIGludCBuZl9jdF9mdHBfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cCBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHIgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcdC5tYXhfZXhwZWN0ZWRcXHQ9IDEsXFxuQEAgLTU3MCwzMiArNTY1LDIzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2Z0cF9maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihmdHBfcHRyLCBwb3J0c19jICogMik7XFxuK1xcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihmdHBfcHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2Z0cF9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIpKTtcXG4gXFxuLVxcdGlmIChwb3J0c19jID09IDApXFxuLVxcdFxcdHBvcnRzW3BvcnRzX2MrK10gPSBGVFBfUE9SVDtcXG4tXFxuIFxcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xcbiBcXHRcXHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRzX2M7IGkrKykge1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2ZnRwWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxcbi1cXHRcXHRcXHRcXHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2ZnRwWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgRlRQX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcXG4tXFx0XFx0XFx0XFx0ICBcXHUwMDI2ZnRwX2V4cF9wb2xpY3ksIDAsIGhlbHAsXFxuLVxcdFxcdFxcdFxcdCAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcXG4rXFx0XFx0XFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcXG4gXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGZ0cCwgcG9ydHNfYyAqIDIsIGZ0cF9wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZmdHAsIFxcdTAwMjZmdHBfcHRyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcXG5pbmRleCAyNDkzMWUzNzk5ODViYi4uOThiOTc1M2Q1ZTY1ZTEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xcbkBAIC0xNzEzLDE5ICsxNzEzLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1swXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgXFxcIlJBU1xcXCIsIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcIlJBU1xcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0ICBcXFwiUkFTXFxcIiwgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcXG4rXFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG4gXFx0XFx0XFx0ICBcXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsIEFGX1VOU1BFQywgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgXFxcIkguMjQ1XFxcIiwgMCwgMCwgMCxcXG4rXFx0XFx0XFx0ICBcXFwiSC4yNDVcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZoMjQ1X2V4cF9wb2xpY3ksIDAsIGgyNDVfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJRLjkzMVxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJRLjkzMVxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcXG5pbmRleCA1MDA1MDliMTc2NjNlZC4uNTA2YzU4MDM0NzYxNTUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbkBAIC00MCwxMiArNDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTtcXG4gc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9uYXRfaGVscGVyc19tdXRleCk7XFxuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2N0X25hdF9oZWxwZXJzIF9fcmVhZF9tb3N0bHk7XFxuIFxcbi0vKiBTdHVwaWQgaGFzaCwgYnV0IGNvbGxpc2lvbiBmcmVlIGZvciB0aGUgZGVmYXVsdCByZWdpc3RyYXRpb25zIG9mIHRoZVxcbi0gKiBoZWxwZXJzIGN1cnJlbnRseSBpbiB0aGUga2VybmVsLiAqL1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxcbiB7XFxuLVxcdHJldHVybiAoKCh0dXBsZS1cXHUwMDNlc3JjLmwzbnVtIFxcdTAwM2NcXHUwMDNjIDgpIHwgdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSkgXlxcbi1cXHRcXHQoX19mb3JjZSBfX3UxNil0dXBsZS1cXHUwMDNlc3JjLnUuYWxsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcXG4rXFx0c3RhdGljIHUzMiBzZWVkO1xcbitcXHR1MzIgaW5pdHZhbDtcXG4rXFxuK1xcdGdldF9yYW5kb21fb25jZShcXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcXG4rXFxuK1xcdGluaXR2YWwgPSBzZWVkIF4gcHJvdG9udW07XFxuK1xcbitcXHRyZXR1cm4gamhhc2gobmFtZSwgc3RybGVuKG5hbWUpLCBpbml0dmFsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcXG4gfVxcbiBcXG4gc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxcbkBAIC01NCwxOCArNTgsMTggQEAgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSsrKSB7XFxuLVxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XFxuLVxcdFxcdFxcdGlmIChzdHJjbXAoaC1cXHUwMDNlbmFtZSwgbmFtZSkpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdGlmIChoLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGgtXFx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBsM251bSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdGkgPSBoZWxwZXJfaGFzaChuYW1lLCBwcm90b251bSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaC1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID09IHByb3RvbnVtKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gaDtcXG4tXFx0XFx0fVxcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xcbitcXHRcXHRpZiAoc3RyY21wKGgtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGgtXFx1MDAzZW5mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlbmZwcm90byAhPSBsM251bSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChoLVxcdTAwM2VsNHByb3RvID09IHByb3RvbnVtKVxcbitcXHRcXHRcXHRyZXR1cm4gaDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC0zNjMsOSArMzY3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7XFxuIFxcbiBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgbWFzayA9IHsgLnNyYy51LmFsbCA9IGh0b25zKDB4RkZGRikgfTtcXG4tXFx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcXHUwMDI2bWUtXFx1MDAzZXR1cGxlKTtcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN1cjtcXG4rXFx0dW5zaWduZWQgaW50IGg7XFxuIFxcdGludCByZXQgPSAwLCBpO1xcbiBcXG4gXFx0QlVHX09OKG1lLVxcdTAwM2VleHBlY3RfY2xhc3NfbWF4IFxcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7XFxuQEAgLTM4MiwyOSArMzg1LDE4IEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0aCA9IGhlbHBlcl9oYXNoKG1lLVxcdTAwM2VuYW1lLCBtZS1cXHUwMDNlbDRwcm90byk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xcbi1cXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcXG4tXFx0XFx0XFx0aWYgKCFzdHJjbXAoY3VyLVxcdTAwM2VuYW1lLCBtZS1cXHUwMDNlbmFtZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIChjdXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBORlBST1RPX1VOU1BFQyB8fFxcbi1cXHRcXHRcXHQgICAgIGN1ci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IG1lLVxcdTAwM2V0dXBsZS5zcmMubDNudW0pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBjdXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBtZS1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaF0sIGhub2RlKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKGN1ci1cXHUwMDNlbmFtZSwgbWUtXFx1MDAzZW5hbWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoY3VyLVxcdTAwM2VuZnByb3RvID09IE5GUFJPVE9fVU5TUEVDIHx8XFxuK1xcdFxcdCAgICAgY3VyLVxcdTAwM2VuZnByb3RvID09IG1lLVxcdTAwM2VuZnByb3RvKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY3VyLVxcdTAwM2VsNHByb3RvID09IG1lLVxcdTAwM2VsNHByb3RvKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LyogYXZvaWQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgZm9yIGF1dG9fYXNzaWduX2hlbHBlciAqL1xcbi1cXHRpZiAoIShtZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9DVF9IRUxQRVJfRl9VU0VSU1BBQ0UpKSB7XFxuLVxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xcbi1cXHRcXHRcXHRpZiAobmZfY3RfdHVwbGVfc3JjX21hc2tfY21wKFxcdTAwMjZjdXItXFx1MDAzZXR1cGxlLCBcXHUwMDI2bWUtXFx1MDAzZXR1cGxlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtYXNrKSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm1lLVxcdTAwM2VjdF9yZWZjbnQsIDEpO1xcbiBcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNm1lLVxcdTAwM2Vobm9kZSwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdKTtcXG4gXFx0bmZfY3RfaGVscGVyX2NvdW50Kys7XFxuQEAgLTQ3OSw4ICs0NzEsNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XFxuIFxcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLVxcdFxcdCAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tXFx0XFx0ICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCxcXG4rXFx0XFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsXFxuIFxcdFxcdCAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCxcXG4gXFx0XFx0ICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbkBAIC00OTIsOSArNDgzLDggQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbiB7XFxuIFxcdG1lbXNldChoZWxwZXIsIDAsIHNpemVvZigqaGVscGVyKSk7XFxuIFxcbi1cXHRoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSA9IGwzbnVtO1xcbi1cXHRoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvbnVtO1xcbi1cXHRoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy51LmFsbCA9IGh0b25zKHNwZWNfcG9ydCk7XFxuK1xcdGhlbHBlci1cXHUwMDNlbmZwcm90byA9IGwzbnVtO1xcbitcXHRoZWxwZXItXFx1MDAzZWw0cHJvdG8gPSBwcm90b251bTtcXG4gXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItXFx1MDAzZWhlbHAsIGhlbHApO1xcbiBcXHRoZWxwZXItXFx1MDAzZWZyb21fbmxhdHRyID0gZnJvbV9ubGF0dHI7XFxuQEAgLTUwMiwxMCArNDkyLDcgQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbiBcXHRzbnByaW50ZihoZWxwZXItXFx1MDAzZW5hdF9tb2RfbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmF0X21vZF9uYW1lKSxcXG4gXFx0XFx0IE5GX05BVF9IRUxQRVJfUFJFRklYIFxcXCIlc1xcXCIsIG5hbWUpO1xcbiBcXG4tXFx0aWYgKHNwZWNfcG9ydCA9PSBkZWZhdWx0X3BvcnQpXFxuLVxcdFxcdHNucHJpbnRmKGhlbHBlci1cXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsIG5hbWUpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHNucHJpbnRmKGhlbHBlci1cXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlcy0ldVxcXCIsIG5hbWUsIGlkKTtcXG4rXFx0c25wcmludGYoaGVscGVyLVxcdTAwM2VuYW1lLCBzaXplb2YoaGVscGVyLVxcdTAwM2VuYW1lKSwgXFxcIiVzXFxcIiwgbmFtZSk7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKGV4cGVjdF9jbGFzc19tYXggXFx1MDAzZT0gTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSlcXG4gXFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuaW5kZXggMTkzYWIzNGRiNzk1ZjkuLjRlNmJhZmU0MTQzNzUyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcXG5AQCAtMjEsOSArMjEsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcXG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IG1heF9kY2NfY2hhbm5lbHMgPSA4O1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XFxuIC8qIFRoaXMgaXMgc2xvdywgYnV0IGl0J3Mgc2ltcGxlLiAtLVJSICovXFxuQEAgLTQyLDggKzM5LDYgQEAgTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja19pcmNcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gXFxuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcXHUwMDI2cG9ydHNfYywgMDQwMCk7XFxuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFxcXCJwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnNcXFwiKTtcXG4gbW9kdWxlX3BhcmFtKG1heF9kY2NfY2hhbm5lbHMsIHVpbnQsIDA0MDApO1xcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9kY2NfY2hhbm5lbHMsIFxcXCJtYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXFxcIlxcbiBcXHRcXHRcXHRcXHQgICBcXFwiSVJDIHNlc3Npb25cXFwiKTtcXG5AQCAtMjU0LDEzICsyNDksMTMgQEAgc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaXJjW01BWF9QT1JUU10gX19yZWFkX21vc3RseTtcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyW01BWF9QT1JUU10gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyYyBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmlyY19wdHIgX19yZWFkX21vc3RseTtcXG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xcbiBcXG5AQCAtMjgyLDE3ICsyNzcsMTEgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXFxuIFxcdGlmICghaXJjX2J1ZmZlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHQvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovXFxuLVxcdGlmIChwb3J0c19jID09IDApXFxuLVxcdFxcdHBvcnRzW3BvcnRzX2MrK10gPSBJUkNfUE9SVDtcXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmlyYywgQUZfSU5FVCwgSVBQUk9UT19UQ1AsIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZpcmNfZXhwX3BvbGljeSxcXG4rXFx0XFx0XFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcXG4tXFx0XFx0XFx0XFx0ICBJUkNfUE9SVCwgcG9ydHNbaV0sIGksIFxcdTAwMjZpcmNfZXhwX3BvbGljeSxcXG4tXFx0XFx0XFx0XFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKFxcdTAwMjZpcmNbMF0sIHBvcnRzX2MsIGlyY19wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZpcmMsIFxcdTAwMjZpcmNfcHRyKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxcXG5cXFwiKTtcXG4gXFx0XFx0a2ZyZWUoaXJjX2J1ZmZlcik7XFxuQEAgLTMwNCw3ICsyOTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaXJjX2Zpbmkodm9pZClcXG4ge1xcbi1cXHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKGlyY19wdHIsIHBvcnRzX2MpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoaXJjX3B0cik7XFxuIFxcdGtmcmVlKGlyY19idWZmZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcXG5pbmRleCA4OWQxY2Y3ZDY1MTJlNy4uY2FhMmIxMDFmYTllNWUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBIRUxQRVJfTkFNRVxcdFxcXCJuZXRiaW9zLW5zXFxcIlxcbi0jZGVmaW5lIE5NQkRfUE9SVFxcdDEzN1xcbiBcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGF0cmljayBNY0hhcmR5IFxcdTAwM2NrYWJlckB0cmFzaC5uZXRcXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXFxcIik7XFxuQEAgLTU0LDcgKzUzLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKVxcbiBcXHRleHBfcG9saWN5LnRpbWVvdXQgPSB0aW1lb3V0O1xcbiBcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsIEhFTFBFUl9OQU1FLFxcbi1cXHRcXHRcXHQgIE5NQkRfUE9SVCwgTk1CRF9QT1JULCBOTUJEX1BPUlQsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4gXFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNmhlbHBlciwgXFx1MDAyNmhlbHBlcl9wdHIpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuaW5kZXggNDlkMTUxMWU5OTIxODUuLmI0MDg1YWYzYWQxY2UwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcXG5AQCAtMzEsOCArMzEsOCBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0aWYgKCFoZWxwZXIpXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbi1cXHRpZiAoaGVscGVyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGhlbHBlci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IHByb3RvKVxcbitcXHRpZiAoaGVscGVyLVxcdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoZWxwZXItXFx1MDAzZW5mcHJvdG8gIT0gcHJvdG8pXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzd2l0Y2ggKHByb3RvKSB7XFxuQEAgLTYwLDcgKzYwLDcgQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdFxcdHJldHVybiBORl9EUk9QO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gcHJvdG8pXFxuK1xcdGlmIChoZWxwZXItXFx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVxcdTAwM2VoZWxwKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXFxuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xcbkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxcbiBcXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3RfcHB0cF9tYXN0ZXIpKTtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZwcHRwLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0ICBcXFwicHB0cFxcXCIsIFBQVFBfQ09OVFJPTF9QT1JULCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcInBwdHBcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFxuIFxcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xcbmluZGV4IDM5MDg1YWNmN2E3MTg1Li5hMDY1OGY2OWQ3OGZiYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcXG5AQCAtMzQsMTEgKzM0LDYgQEAgTU9EVUxFX0FVVEhPUihcXFwiTWljaGFsIFNjaG1pZHQgXFx1MDAzY21zY2htaWR0QHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiU0FORSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclxcXCIpO1xcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xcbiBcXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tXFxuIHN0cnVjdCBzYW5lX3JlcXVlc3Qge1xcbiBcXHRfX2JlMzIgUlBDX2NvZGU7XFxuICNkZWZpbmUgU0FORV9ORVRfU1RBUlQgICAgICA3ICAgLyogUlBDIGNvZGUgKi9cXG5AQCAtMTY5LDggKzE2NCw4IEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZVtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2FuZV9wdHIgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xcbiBcXHQubWF4X2V4cGVjdGVkXFx0PSAxLFxcbkBAIC0xNzksMzIgKzE3NCwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHtcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc2FuZV9wdHIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc2FuZV9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NhbmVfbWFzdGVyKSk7XFxuIFxcbi1cXHRpZiAocG9ydHNfYyA9PSAwKVxcbi1cXHRcXHRwb3J0c1twb3J0c19jKytdID0gU0FORV9QT1JUO1xcbi1cXG4tXFx0LyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnNcXG4tXFx0XFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwb3J0c19jOyBpKyspIHtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNhbmVbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcXG4tXFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzYW5lWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcXG4tXFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxcbitcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4gXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNhbmUsIHBvcnRzX2MgKiAyLCBzYW5lX3B0cik7XFxuK1xcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNnNhbmUsIFxcdTAwMjZzYW5lX3B0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcXG5AQCAtMzUsMTIgKzM1LDYgQEAgTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcXFwiKTtcXG4gTU9EVUxFX0FMSUFTKFxcXCJpcF9jb25udHJhY2tfc2lwXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XFxuIFxcbi0jZGVmaW5lIE1BWF9QT1JUU1xcdDhcXG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXFxcInBvcnQgbnVtYmVycyBvZiBTSVAgc2VydmVyc1xcXCIpO1xcbi1cXG4gc3RhdGljIHVuc2lnbmVkIGludCBzaXBfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gU0lQX1RJTUVPVVQ7XFxuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XFxuIE1PRFVMRV9QQVJNX0RFU0Moc2lwX3RpbWVvdXQsIFxcXCJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIFNJUCBzZXNzaW9uXFxcIik7XFxuQEAgLTE3NjQsOCArMTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRyZXR1cm4gcHJvY2Vzc19zaXBfbXNnKHNrYiwgY3QsIHByb3RvZmYsIGRhdGFvZmYsIFxcdTAwMjZkcHRyLCBcXHUwMDI2ZGF0YWxlbik7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTICogNF0gX19yZWFkX21vc3RseTtcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyW01BWF9QT1JUUyAqIDRdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbMl0gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMV0gPSB7XFxuIFxcdFtTSVBfRVhQRUNUX1NJR05BTExJTkddID0ge1xcbkBAIC0xNzkyLDM4ICsxNzg2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggKyAxXFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCBwb3J0c19jICogNCk7XFxuK1xcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgMik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2lwX21hc3RlcikpO1xcbiBcXG4tXFx0aWYgKHBvcnRzX2MgPT0gMClcXG4tXFx0XFx0cG9ydHNbcG9ydHNfYysrXSA9IFNJUF9QT1JUO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRzX2M7IGkrKykge1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzQgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcXG4tXFx0XFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzaXBbNCAqIGkgKyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3RjcCxcXG4tXFx0XFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzaXBbNCAqIGkgKyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXFxuLVxcdFxcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzQgKiBpICsgM10sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxcbi1cXHRcXHRcXHRcXHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxcbi1cXHRcXHRcXHRcXHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4tXFx0fVxcbitcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzBdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsXFxuK1xcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuK1xcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXFxuK1xcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbitcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuK1xcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXFxuK1xcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4tXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7XFxuK1xcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNpcCwgMiwgc2lwX3B0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcXG5pbmRleCBiNmZjZTU3MDNmY2U3Ny4uMTA5OTg2ZDVkNTVlNjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXFxuQEAgLTE0LDggKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmhcXHUwMDNlXFxuIFxcbi0jZGVmaW5lIFNOTVBfUE9SVFxcdDE2MVxcbi1cXG4gTU9EVUxFX0FVVEhPUihcXFwiSmlyaSBPbHNhIFxcdTAwM2Nqb2xzYUByZWRoYXQuY29tXFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNOTVAgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbkBAIC01NSw3ICs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcXG4gXFx0ZXhwX3BvbGljeS50aW1lb3V0ID0gdGltZW91dDtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIFxcXCJzbm1wXFxcIiwgU05NUF9QT1JULCBTTk1QX1BPUlQsIFNOTVBfUE9SVCxcXG4rXFx0XFx0XFx0ICBcXFwic25tcFxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNmV4cF9wb2xpY3ksIDAsIHNubXBfY29ubnRyYWNrX2hlbHAsIE5VTEwsXFxuIFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXFxuaW5kZXggNDM5M2M0MzVhYTM1NDkuLmE2OTU1OWVkZjliMzYzIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xcbkBAIC0yNiwxMiArMjYsNiBAQCBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIE1PRFVMRV9BTElBUyhcXFwiaXBfY29ubnRyYWNrX3RmdHBcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gXFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcXG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXFxcIlBvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnNcXFwiKTtcXG4tXFxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcXG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3RmdHBfaG9vayk7XFxuIFxcbkBAIC05NSw4ICs4OSw4IEBAIHN0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHAgX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0ZnRwX3B0ciBfX3JlYWRfbW9zdGx5O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcdC5tYXhfZXhwZWN0ZWRcXHQ9IDEsXFxuQEAgLTEwNSwzMCArOTksMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKVxcbiB7XFxuLVxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTtcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHRmdHBfcHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKDApO1xcbiBcXG4tXFx0aWYgKHBvcnRzX2MgPT0gMClcXG4tXFx0XFx0cG9ydHNbcG9ydHNfYysrXSA9IFRGVFBfUE9SVDtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwb3J0c19jOyBpKyspIHtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnRmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBcXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2dGZ0cFsyICogaSArIDFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4tXFx0fVxcbitcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcXG4rXFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuIFxcbi1cXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3Rlcih0ZnRwLCBwb3J0c19jICogMiwgdGZ0cF9wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZ0ZnRwLCBcXHUwMDI2dGZ0cF9wdHIpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uNTY2NTVjYjdmZTJhZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtNjcsNyArNjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCsxXSA9IHtcXG4tXFx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXFxuK1xcdFtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLFxcbiBcXHRbTkZDVEhfVFVQTEVfTDRQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1U4LCB9LFxcbiB9O1xcbiBcXG5AQCAtMjU0LDcgKzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRoZWxwZXItXFx1MDAzZWRhdGFfbGVuID0gc2l6ZTtcXG4gXFxuIFxcdGhlbHBlci1cXHUwMDNlZmxhZ3MgfD0gTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFO1xcbi1cXHRtZW1jcHkoXFx1MDAyNmhlbHBlci1cXHUwMDNldHVwbGUsIHR1cGxlLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSkpO1xcbitcXHRoZWxwZXItXFx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cXHUwMDNlc3JjLmwzbnVtO1xcbitcXHRoZWxwZXItXFx1MDAzZWw0cHJvdG8gPSB0dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtO1xcbiBcXG4gXFx0aGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbiBcXHRoZWxwZXItXFx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcXG5AQCAtNDQ5LDggKzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0aWYgKHN0cm5jbXAoY3VyLVxcdTAwM2VuYW1lLCBoZWxwZXJfbmFtZSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSB8fFxcbi1cXHRcXHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXFxuK1xcdFxcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cXHUwMDNlbmZwcm90byB8fFxcbitcXHRcXHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXFx1MDAzZWw0cHJvdG8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX2ZsYWdzIFxcdTAwMjYgTkxNX0ZfRVhDTClcXG5AQCAtNDc5LDEwICs0ODAsMTAgQEAgbmZubF9jdGhlbHBlcl9kdW1wX3R1cGxlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIE5GQ1RIX1RVUExFX0wzUFJPVE9OVU0sXFxuLVxcdFxcdFxcdCBodG9ucyhoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSkpKVxcbitcXHRcXHRcXHQgaHRvbnMoaGVscGVyLVxcdTAwM2VuZnByb3RvKSkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXFxuK1xcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVxcdTAwM2VsNHByb3RvKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQoc2tiLCBuZXN0X3Bhcm1zKTtcXG5AQCAtNjYxLDggKzY2Miw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAodHVwbGVfc2V0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XFxuLVxcdFxcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcXG4rXFx0XFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVxcdTAwM2VuZnByb3RvIHx8XFxuK1xcdFxcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cXHUwMDNlbDRwcm90bykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbkBAIC03MjEsOCArNzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICh0dXBsZV9zZXQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcXG4tXFx0XFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxcbitcXHRcXHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXFx1MDAzZW5mcHJvdG8gfHxcXG4rXFx0XFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVxcdTAwM2VsNHByb3RvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRmb3VuZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjMwLjk5NTg1MTk3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4ODI0NTEzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS19BTUFOREFcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSVJDXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTkVUQklPU19OU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1BQVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TQU5FXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVEZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NOTVBcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRfQUNUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZFwiLFxuICAgIFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2dldFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9kZWxcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfY3JlYXRlXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJcIixcbiAgICBcIm5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG9mIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVyIHJlZ2lzdHJhdGlvbiBhbmQgbWF0Y2hpbmcuIEl0IHJlbW92ZXMgdGhlIHBvcnQtYmFzZWQgbWF0Y2hpbmcgYW5kIHJlcGxhY2VzIGl0IHdpdGggTDMvTDQgcHJvdG9jb2wgbWF0Y2hpbmcuIFRoaXMgYWZmZWN0cyBob3cgaGVscGVycyBhcmUgYXNzaWduZWQgdG8gY29ubmVjdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIHZpYSBuZXRsaW5rLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5OWRjZDZjMzFjN2QzMmI3OGZkOTQwYTBhYjAwODAxMTdlNDI0MDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6MDk6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuaW5kZXggODEyODZjNDk5MzI1MjEuLmIxNWYzNzYwNGNkZTRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuQEAgLTksOCArOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmhcdTAwM2VcbiBcbi0jZGVmaW5lIFJBU19QT1JUIDE3MTlcbi0jZGVmaW5lIFE5MzFfUE9SVCAxNzIwXG4gI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0XHQvKiBBdWRpbywgdmlkZW8sIEZBWCBhbmQgb3RoZXIgKi9cbiBcbiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuaW5kZXggYzNiZGI0MzcwOTM4NGQuLmMwYjMwNWNlN2MzYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuQEAgLTUwLDggKzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcbiBcdF9fYmUxNiBwYWNfY2FsbF9pZDtcdFx0XHQvKiBOQVQnZWQgUEFDIGNhbGwgaWQgKi9cbiB9O1xuIFxuLSNkZWZpbmUgUFBUUF9DT05UUk9MX1BPUlRcdDE3MjNcbi1cbiAjZGVmaW5lIFBQVFBfUEFDS0VUX0NPTlRST0xcdDFcbiAjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVRcdDJcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuaW5kZXggNDZjN2FjZDFiNGE3MGYuLjg1MDEwMzVkNzMzNTU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuQEAgLTMsOCArMyw2IEBAXG4gI2RlZmluZSBfTkZfQ09OTlRSQUNLX1NBTkVfSFxuIC8qIFNBTkUgdHJhY2tpbmcuICovXG4gXG4tI2RlZmluZSBTQU5FX1BPUlRcdDY1NjZcbi1cbiBlbnVtIHNhbmVfc3RhdGUge1xuIFx0U0FORV9TVEFURV9OT1JNQUwsXG4gXHRTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuaW5kZXggOTBiMzM0YmJjZTNjZTYuLmUzZDE3MzljNTU3ZDE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuQEAgLTIsOCArMiw2IEBAXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxuICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0hcbiBcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC00MywxMSArNDMsMTAgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIge1xuIFxuIFx0cmVmY291bnRfdCBjdF9yZWZjbnQ7XG4gXG4tXHQvKiBUdXBsZSBvZiB0aGluZ3Mgd2Ugd2lsbCBoZWxwIChjb21wYXJlZCBhZ2FpbnN0IHNlcnZlciByZXNwb25zZSkgKi9cbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XG4rXHR1OCBuZnByb3RvO1x0LyogTkZQUk9UT18qLCBjYW4gYmUgTkZQUk9UT19VTlNQRUMgKi9cbitcdHU4IGw0cHJvdG87XHQvKiBJUFBST1RPX1VEUC9UQ1AgKi9cbiBcbi1cdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xuK1x0LyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCAqL1xuIFx0aW50IF9fcmN1ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0ICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0ICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pO1xuQEAgLTk0LDggKzkzLDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSxcbiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpO1xuIFxuIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbi1cdFx0ICAgICAgIHUxNiBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLFxuLVx0XHQgICAgICAgdTE2IGRlZmF1bHRfcG9ydCwgdTE2IHNwZWNfcG9ydCwgdTMyIGlkLFxuK1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NubXBfYmFzaWNfaW5pdCh2b2lkKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZl9uYXRfc25tcF9ob29rLCBoZWxwKTtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJzbm1wX3RyYXBcIiwgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCxcbitcdFx0XHQgIFwic25tcF90cmFwXCIsXG4gXHRcdFx0ICBcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXHUwMDI2c25tcF90cmFwX2hlbHBlcl9wdHIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbmluZGV4IGRkYWZiZGZjOTZkYzM1Li5lZGNlZDAzOTk3MGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuQEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuIFx0fVxuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2YW1hbmRhX2hlbHBlclswXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZhbWFuZGFfaGVscGVyWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTY2LDggKzY2LDYgQEAgaW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuLVx0aWYgKGhlbHBlcilcbi1cdFx0ZXhwLVx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0ID0gaGVscGVyLVx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0O1xuIFxuIFx0ZXhwLVx1MDAzZW1hc2suc3JjLnUzLmlwICAgICAgID0gbWFzaztcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xuaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXG5AQCAtMzUsMTEgKzM1LDYgQEAgTU9EVUxFX0FMSUFTKFwiaXBfY29ubnRyYWNrX2Z0cFwiKTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfZnRwX2xvY2spO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1cbiBzdGF0aWMgYm9vbCBsb29zZTtcbiBtb2R1bGVfcGFyYW0obG9vc2UsIGJvb2wsIDA2MDApO1xuIFxuQEAgLTU2MCw4ICs1NTUsOCBAQCBzdGF0aWMgaW50IG5mX2N0X2Z0cF9mcm9tX25sYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqZnRwX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGZ0cF9leHBfcG9saWN5ID0ge1xuIFx0Lm1heF9leHBlY3RlZFx0PSAxLFxuQEAgLTU3MCwzMiArNTY1LDIzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBGVFBfUE9SVDtcbi1cbiBcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xuIFx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2ZnRwWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdH1cbitcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcbitcdFx0XHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoZnRwLCBwb3J0c19jICogMiwgZnRwX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmZ0cCwgXHUwMDI2ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcbmluZGV4IDI0OTMxZTM3OTk4NWJiLi45OGI5NzUzZDVlNjVlMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xuQEAgLTE3MTMsMTkgKzE3MTMsMTkgQEAgc3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuIFx0aW50IHJldDtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwiUkFTXCIsIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsXG4rXHRcdFx0ICBcIlJBU1wiLFxuIFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJSQVNcIiwgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcbitcdFx0XHQgIFwiUkFTXCIsXG4gXHRcdFx0ICBcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwiSC4yNDVcIiwgMCwgMCwgMCxcbitcdFx0XHQgIFwiSC4yNDVcIixcbiBcdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdCAgXCJRLjkzMVwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuK1x0XHRcdCAgXCJRLjkzMVwiLFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxuLVx0XHRcdCAgXCJRLjkzMVwiLCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuK1x0XHRcdCAgXCJRLjkzMVwiLFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2VkLi41MDZjNTgwMzQ3NjE1NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQwLDEyICs0MCwxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X2hlbHBlcl9jb3VudCBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyBERUZJTkVfTVVURVgobmZfY3RfbmF0X2hlbHBlcnNfbXV0ZXgpO1xuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2N0X25hdF9oZWxwZXJzIF9fcmVhZF9tb3N0bHk7XG4gXG4tLyogU3R1cGlkIGhhc2gsIGJ1dCBjb2xsaXNpb24gZnJlZSBmb3IgdGhlIGRlZmF1bHQgcmVnaXN0cmF0aW9ucyBvZiB0aGVcbi0gKiBoZWxwZXJzIGN1cnJlbnRseSBpbiB0aGUga2VybmVsLiAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBoZWxwZXJfaGFzaChjb25zdCBjaGFyICpuYW1lLCB1OCBwcm90b251bSlcbiB7XG4tXHRyZXR1cm4gKCgodHVwbGUtXHUwMDNlc3JjLmwzbnVtIFx1MDAzY1x1MDAzYyA4KSB8IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bSkgXlxuLVx0XHQoX19mb3JjZSBfX3UxNil0dXBsZS1cdTAwM2VzcmMudS5hbGwpICUgbmZfY3RfaGVscGVyX2hzaXplO1xuK1x0c3RhdGljIHUzMiBzZWVkO1xuK1x0dTMyIGluaXR2YWw7XG4rXG4rXHRnZXRfcmFuZG9tX29uY2UoXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcbitcbitcdGluaXR2YWwgPSBzZWVkIF4gcHJvdG9udW07XG4rXG4rXHRyZXR1cm4gamhhc2gobmFtZSwgc3RybGVuKG5hbWUpLCBpbml0dmFsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcbiB9XG4gXG4gc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxuQEAgLTU0LDE4ICs1OCwxOCBAQCBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSsrKSB7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbi1cdFx0XHRpZiAoc3RyY21wKGgtXHUwMDNlbmFtZSwgbmFtZSkpXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXG4rXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaC1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gbDNudW0pXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdGkgPSBoZWxwZXJfaGFzaChuYW1lLCBwcm90b251bSk7XG4gXG4tXHRcdFx0aWYgKGgtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID09IHByb3RvbnVtKVxuLVx0XHRcdFx0cmV0dXJuIGg7XG4tXHRcdH1cbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbitcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaC1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5mcHJvdG8gIT0gbDNudW0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChoLVx1MDAzZWw0cHJvdG8gPT0gcHJvdG9udW0pXG4rXHRcdFx0cmV0dXJuIGg7XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMzYzLDkgKzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xuIFxuIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9O1xuLVx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcdTAwMjZtZS1cdTAwM2V0dXBsZSk7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3VyO1xuK1x0dW5zaWduZWQgaW50IGg7XG4gXHRpbnQgcmV0ID0gMCwgaTtcbiBcbiBcdEJVR19PTihtZS1cdTAwM2VleHBlY3RfY2xhc3NfbWF4IFx1MDAzZT0gTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKTtcbkBAIC0zODIsMjkgKzM4NSwxOCBAQCBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGggPSBoZWxwZXJfaGFzaChtZS1cdTAwM2VuYW1lLCBtZS1cdTAwM2VsNHByb3RvKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSsrKSB7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4tXHRcdFx0aWYgKCFzdHJjbXAoY3VyLVx1MDAzZW5hbWUsIG1lLVx1MDAzZW5hbWUpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBORlBST1RPX1VOU1BFQyB8fFxuLVx0XHRcdCAgICAgY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBtZS1cdTAwM2V0dXBsZS5zcmMubDNudW0pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBjdXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID09IG1lLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkge1xuLVx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcbitcdFx0aWYgKCFzdHJjbXAoY3VyLVx1MDAzZW5hbWUsIG1lLVx1MDAzZW5hbWUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGN1ci1cdTAwM2VuZnByb3RvID09IE5GUFJPVE9fVU5TUEVDIHx8XG4rXHRcdCAgICAgY3VyLVx1MDAzZW5mcHJvdG8gPT0gbWUtXHUwMDNlbmZwcm90bykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjdXItXHUwMDNlbDRwcm90byA9PSBtZS1cdTAwM2VsNHByb3RvKSB7XG4rXHRcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBmb3IgYXV0b19hc3NpZ25faGVscGVyICovXG4tXHRpZiAoIShtZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xuLVx0XHRcdGlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoXHUwMDI2Y3VyLVx1MDAzZXR1cGxlLCBcdTAwMjZtZS1cdTAwM2V0dXBsZSxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1hc2spKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZtZS1cdTAwM2VjdF9yZWZjbnQsIDEpO1xuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XG4gXHRuZl9jdF9oZWxwZXJfY291bnQrKztcbkBAIC00NzksOCArNDcxLDcgQEAgdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4rXHRcdCAgICAgICB1OCBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBfcG9sLFxuIFx0XHQgICAgICAgdTMyIGV4cGVjdF9jbGFzc19tYXgsXG4gXHRcdCAgICAgICBpbnQgKCpoZWxwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbkBAIC00OTIsOSArNDgzLDggQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuIHtcbiBcdG1lbXNldChoZWxwZXIsIDAsIHNpemVvZigqaGVscGVyKSk7XG4gXG4tXHRoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID0gbDNudW07XG4tXHRoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG9udW07XG4tXHRoZWxwZXItXHUwMDNldHVwbGUuc3JjLnUuYWxsID0gaHRvbnMoc3BlY19wb3J0KTtcbitcdGhlbHBlci1cdTAwM2VuZnByb3RvID0gbDNudW07XG4rXHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHByb3RvbnVtO1xuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlbHBlci1cdTAwM2VoZWxwLCBoZWxwKTtcbiBcdGhlbHBlci1cdTAwM2Vmcm9tX25sYXR0ciA9IGZyb21fbmxhdHRyO1xuQEAgLTUwMiwxMCArNDkyLDcgQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuIFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hdF9tb2RfbmFtZSwgc2l6ZW9mKGhlbHBlci1cdTAwM2VuYXRfbW9kX25hbWUpLFxuIFx0XHQgTkZfTkFUX0hFTFBFUl9QUkVGSVggXCIlc1wiLCBuYW1lKTtcbiBcbi1cdGlmIChzcGVjX3BvcnQgPT0gZGVmYXVsdF9wb3J0KVxuLVx0XHRzbnByaW50ZihoZWxwZXItXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cdTAwM2VuYW1lKSwgXCIlc1wiLCBuYW1lKTtcbi1cdGVsc2Vcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwiJXMtJXVcIiwgbmFtZSwgaWQpO1xuK1x0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwiJXNcIiwgbmFtZSk7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGV4cGVjdF9jbGFzc19tYXggXHUwMDNlPSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuaW5kZXggMTkzYWIzNGRiNzk1ZjkuLjRlNmJhZmU0MTQzNzUyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG5AQCAtMjEsOSArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaFx1MDAzZVxuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4gc3RhdGljIHVuc2lnbmVkIGludCBtYXhfZGNjX2NoYW5uZWxzID0gODtcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XG4gLyogVGhpcyBpcyBzbG93LCBidXQgaXQncyBzaW1wbGUuIC0tUlIgKi9cbkBAIC00Miw4ICszOSw2IEBAIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9BTElBUyhcImlwX2Nvbm50cmFja19pcmNcIik7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCJwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnNcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9kY2NfY2hhbm5lbHMsIHVpbnQsIDA0MDApO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2RjY19jaGFubmVscywgXCJtYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXCJcbiBcdFx0XHRcdCAgIFwiSVJDIHNlc3Npb25cIik7XG5AQCAtMjU0LDEzICsyNDksMTMgQEAgc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyW01BWF9QT1JUU10gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaXJjIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0O1xuK1x0aW50IHJldDtcbiBcbiBcdG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChIRUxQRVJfTkFNRSk7XG4gXG5AQCAtMjgyLDE3ICsyNzcsMTEgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4gXHRpZiAoIWlyY19idWZmZXIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0LyogSWYgbm8gcG9ydCBnaXZlbiwgZGVmYXVsdCB0byBzdGFuZGFyZCBpcmMgcG9ydCAqL1xuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYysrXSA9IElSQ19QT1JUO1xuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2aXJjLCBBRl9JTkVULCBJUFBST1RPX1RDUCwgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbitcdFx0XHQgIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHRcdCAgSVJDX1BPUlQsIHBvcnRzW2ldLCBpLCBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbi1cdFx0XHRcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0fVxuLVxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoXHUwMDI2aXJjWzBdLCBwb3J0c19jLCBpcmNfcHRyKTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2aXJjLCBcdTAwMjZpcmNfcHRyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXG5cIik7XG4gXHRcdGtmcmVlKGlyY19idWZmZXIpO1xuQEAgLTMwNCw3ICsyOTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2lyY19maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihpcmNfcHRyLCBwb3J0c19jKTtcbitcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihpcmNfcHRyKTtcbiBcdGtmcmVlKGlyY19idWZmZXIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcbmluZGV4IDg5ZDFjZjdkNjUxMmU3Li5jYWEyYjEwMWZhOWU1ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXG5AQCAtMjEsNyArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBIRUxQRVJfTkFNRVx0XCJuZXRiaW9zLW5zXCJcbi0jZGVmaW5lIE5NQkRfUE9SVFx0MTM3XG4gXG4gTU9EVUxFX0FVVEhPUihcIlBhdHJpY2sgTWNIYXJkeSBcdTAwM2NrYWJlckB0cmFzaC5uZXRcdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCIpO1xuQEAgLTU0LDcgKzUzLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKVxuIFx0ZXhwX3BvbGljeS50aW1lb3V0ID0gdGltZW91dDtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsIEhFTFBFUl9OQU1FLFxuLVx0XHRcdCAgTk1CRF9QT1JULCBOTUJEX1BPUlQsIE5NQkRfUE9SVCxcbiBcdFx0XHQgIFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFxuIFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2aGVscGVyLCBcdTAwMjZoZWxwZXJfcHRyKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXG5pbmRleCA0OWQxNTExZTk5MjE4NS4uYjQwODVhZjNhZDFjZTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbkBAIC0zMSw4ICszMSw4IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0aWYgKCFoZWxwZXIpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4tXHRpZiAoaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdCAgICBoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IHByb3RvKVxuK1x0aWYgKGhlbHBlci1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhlbHBlci1cdTAwM2VuZnByb3RvICE9IHByb3RvKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c3dpdGNoIChwcm90bykge1xuQEAgLTYwLDcgKzYwLDcgQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFx0fVxuIFxuLVx0aWYgKGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gcHJvdG8pXG4rXHRpZiAoaGVscGVyLVx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVx1MDAzZWhlbHApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyKSk7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZwcHRwLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwicHB0cFwiLCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULFxuK1x0XHRcdCAgXCJwcHRwXCIsXG4gXHRcdFx0ICBcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXG5pbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xuQEAgLTM0LDExICszNCw2IEBAIE1PRFVMRV9BVVRIT1IoXCJNaWNoYWwgU2NobWlkdCBcdTAwM2Ntc2NobWlkdEByZWRoYXQuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlNBTkUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcIik7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XG4tc3RhdGljIHVfaW50MTZfdCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tXG4gc3RydWN0IHNhbmVfcmVxdWVzdCB7XG4gXHRfX2JlMzIgUlBDX2NvZGU7XG4gI2RlZmluZSBTQU5FX05FVF9TVEFSVCAgICAgIDcgICAvKiBSUEMgY29kZSAqL1xuQEAgLTE2OSw4ICsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0ciBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFx0Lm1heF9leHBlY3RlZFx0PSAxLFxuQEAgLTE3OSwzMiArMTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHNhbmVfcHRyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBpLCByZXQgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2FuZV9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBTQU5FX1BPUlQ7XG4tXG4tXHQvKiBGSVhNRSBzaG91bGQgYmUgY29uZmlndXJhYmxlIHdoZXRoZXIgSVB2NCBhbmQgSVB2NiBjb25uZWN0aW9uc1xuLVx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmVbMiAqIGkgKyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcbi1cdFx0XHRcdCAgVEhJU19NT0RVTEUpO1xuLVx0fVxuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2FuZSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXG4rXHRcdFx0ICBUSElTX01PRFVMRSk7XG4gXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzYW5lLCBwb3J0c19jICogMiwgc2FuZV9wdHIpO1xuK1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZzYW5lLCBcdTAwMjZzYW5lX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5kMGI4NWI4YWQxZTZkOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuQEAgLTM1LDEyICszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTihcIlNJUCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclwiKTtcbiBNT0RVTEVfQUxJQVMoXCJpcF9jb25udHJhY2tfc2lwXCIpO1xuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XG4gXG4tI2RlZmluZSBNQVhfUE9SVFNcdDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwicG9ydCBudW1iZXJzIG9mIFNJUCBzZXJ2ZXJzXCIpO1xuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUO1xuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzaXBfdGltZW91dCwgXCJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIFNJUCBzZXNzaW9uXCIpO1xuQEAgLTE3NjQsOCArMTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCBcdTAwMjZkcHRyLCBcdTAwMjZkYXRhbGVuKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbMl0gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNpcF9wdHJbMl0gX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMV0gPSB7XG4gXHRbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHtcbkBAIC0xNzkyLDM4ICsxNzg2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggKyAxXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19zaXBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgcG9ydHNfYyAqIDQpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbitcdGludCByZXQ7XG4gXG4gXHRORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2lwX21hc3RlcikpO1xuIFxuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYysrXSA9IFNJUF9QT1JUO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgKyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSArIDJdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSArIDNdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHR9XG4rXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMF0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXG4rXHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4rXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMV0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4rXHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzaXAsIHBvcnRzX2MgKiA0LCBzaXBfcHRyKTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNpcCwgMiwgc2lwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xuaW5kZXggYjZmY2U1NzAzZmNlNzcuLjEwOTk4NmQ1ZDU1ZTY5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcbkBAIC0xNCw4ICsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuaFx1MDAzZVxuIFxuLSNkZWZpbmUgU05NUF9QT1JUXHQxNjFcbi1cbiBNT0RVTEVfQVVUSE9SKFwiSmlyaSBPbHNhIFx1MDAzY2pvbHNhQHJlZGhhdC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiU05NUCBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbkBAIC01NSw3ICs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJzbm1wXCIsIFNOTVBfUE9SVCwgU05NUF9QT1JULCBTTk1QX1BPUlQsXG4rXHRcdFx0ICBcInNubXBcIixcbiBcdFx0XHQgIFx1MDAyNmV4cF9wb2xpY3ksIDAsIHNubXBfY29ubnRyYWNrX2hlbHAsIE5VTEwsXG4gXHRcdFx0ICBUSElTX01PRFVMRSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXG5pbmRleCA0MzkzYzQzNWFhMzU0OS4uYTY5NTU5ZWRmOWIzNjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xuQEAgLTI2LDEyICsyNiw2IEBAIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9BTElBUyhcImlwX2Nvbm50cmFja190ZnRwXCIpO1xuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XG4gXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxuLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCJQb3J0IG51bWJlcnMgb2YgVEZUUCBzZXJ2ZXJzXCIpO1xuLVxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfdGZ0cF9ob29rKTtcbiBcbkBAIC05NSw4ICs4OSw4IEBAIHN0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cCBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC0xMDUsMzAgKzk5LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfdGZ0cF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3Rlcih0ZnRwX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHRmdHBfcHRyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBpLCByZXQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTigwKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBURlRQX1BPUlQ7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpKyspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cFsyICogaSArIDFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBURlRQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcbi1cdFx0XHRcdCAgVEhJU19NT0RVTEUpO1xuLVx0fVxuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcbitcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHRmdHAsIHBvcnRzX2MgKiAyLCB0ZnRwX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNnRmdHAsIFx1MDAyNnRmdHBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXG5cIik7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC02Nyw3ICs2Nyw3IEBAIG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYKzFdID0ge1xuLVx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXG4rXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbiBcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4gfTtcbiBcbkBAIC0yNTQsNyArMjU0LDggQEAgbmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4gXHRoZWxwZXItXHUwMDNlZGF0YV9sZW4gPSBzaXplO1xuIFxuIFx0aGVscGVyLVx1MDAzZWZsYWdzIHw9IE5GX0NUX0hFTFBFUl9GX1VTRVJTUEFDRTtcbi1cdG1lbWNweShcdTAwMjZoZWxwZXItXHUwMDNldHVwbGUsIHR1cGxlLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSkpO1xuK1x0aGVscGVyLVx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cdTAwM2VzcmMubDNudW07XG4rXHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bTtcbiBcbiBcdGhlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xuIFx0aGVscGVyLVx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcbkBAIC00NDksOCArNDUwLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRpZiAoc3RybmNtcChjdXItXHUwMDNlbmFtZSwgaGVscGVyX25hbWUsIE5GX0NUX0hFTFBFUl9OQU1FX0xFTikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9FWENMKVxuQEAgLTQ3OSwxMCArNDgwLDEwIEBAIG5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORkNUSF9UVVBMRV9MM1BST1RPTlVNLFxuLVx0XHRcdCBodG9ucyhoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtKSkpXG4rXHRcdFx0IGh0b25zKGhlbHBlci1cdTAwM2VuZnByb3RvKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbitcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVx1MDAzZWw0cHJvdG8pKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdG5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpO1xuQEAgLTY2MSw4ICs2NjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICh0dXBsZV9zZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuQEAgLTcyMSw4ICs3MjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICh0dXBsZV9zZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Zm91bmQgPSB0cnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6MzAuOTk1ODUzNDUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwODY5MDgwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIENvbm50cmFjayBIZWxwZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyBtZXNzaW5nIHdpdGggbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkncmUgZGVmaW5lZCBhbmQgcmVnaXN0ZXJlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZWxpbWluYXRpbmcgdGhlIGB0dXBsZWAgZmllbGQgaW4gYHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyYCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggaW5kaXZpZHVhbCBwcm90b2NvbCBpZGVudGlmaWVycyAoYG5mcHJvdG9gIGFuZCBgbDRwcm90b2ApLiAgVGhleSd2ZSBhbHNvIGNoYW5nZWQgYG5mX2N0X2hlbHBlcl9pbml0YCB0byB0YWtlIGFuIGB1OCBsM251bWAgaW5zdGVhZCBvZiBgdTE2IGwzbnVtYCwgYW5kIHJlbW92ZWQgc29tZSBvZiB0aGUgbm93IG9ic29sZXRlIGluaXRpYWxpc2Vycy4gSXQgZmVlbHMgbGlrZSB0aGV5J3JlIHN0cmVhbWxpbmluZyB0aGUgaGVscGVyIHN0cnVjdHVyZS5cblxuTXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcmVmYWN0b3IgdG8gYWxpZ24gd2l0aCBhIG1vcmUgcnVsZS1iYXNlZCBoZWxwZXIgYXNzaWdubWVudCwgbGlrZSB3aGF0IHlvdSdkIHNlZSB3aXRoIG5mdGFibGVzIG9yIHRoZSBjb25udHJhY2sgdGFyZ2V0IGluIGlwdGFibGVzLiBUaGUgcmVtb3ZhbCBvZiBwb3J0LWJhc2VkIG1hdGNoaW5nIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzOyBpdCBzdHJvbmdseSBzdWdnZXN0cyB0aGUgc3lzdGVtIGlzIG5vIGxvbmdlciByZWx5aW5nIG9uIGF1dG9tYXRpYyBoZWxwZXIgc2VsZWN0aW9uIGJ5IHBvcnQsIHdoaWNoIEkgc2VlbSB0byByZWNhbGwgd2FzIGRlcHJlY2F0ZWQgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW55d2F5LiBUaGUgcmVtb3ZhbCBvZiB0aGUgdHVwbGVzIGFuZCBwb3J0IGFycmF5cyBmcm9tIHRoZSBoZWxwZXJzIHRoZW1zZWx2ZXMgY2xpbmNoZXMgdGhhdCBwb2ludC5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBoZWxwZXIgbW9kdWxlcywgSSdtIHRoaW5raW5nIGEgdGhvcm91Z2ggcmV2aWV3IGlzIGluIG9yZGVyLiBUaGUgZmlsZXMgbW9kaWZpZWQgaW5jbHVkZSBib3RoIGhlYWRlciBmaWxlcyBhbmQgdGhlIGNvcmUgaGVscGVyIGxvZ2ljLCBwbHVzIHNwZWNpZmljIGhlbHBlciBpbXBsZW1lbnRhdGlvbnMgbGlrZSBGVFAsIElSQywgU0lQLCBhbmQgVEZUUC4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkuXG5cblRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyBldmVyeXRoaW5nLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX05GX0NPTk5UUkFDS2AgYW5kIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBoZWxwZXIgb3B0aW9ucywgYXMgd2VsbCBhcyBgQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSYC4gSSdsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGVgLCBhbmQgYG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyYC4gIEknbGwgc3RhcnQgdGhlcmUuIE5vdyBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTo0Mi4wODI3NjQwNjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4MTcyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTg1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwMTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2YW1hbmRhX2hlbHBlclswXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAyLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjAzLVxcdFxcdFxcdCAgXFx1MDAyNmFtYW5kYV9leHBfcG9saWN5LCAwLCBhbWFuZGFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjIwNDpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2YW1hbmRhX2hlbHBlclsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNS1cXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM9NTcxPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19mdHBfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTc4LVxcdFxcdCBhcmUgdHJhY2tlZCBvciBub3QgLSBZSyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jOjU3OTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2ZnRwLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTgwLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcxNTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTYtXFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE3LVxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3MTg6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcxOS1cXHRcXHRcXHQgIFxcXCJSQVNcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjAtXFx0XFx0XFx0ICBcXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcyMTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjItXFx0XFx0XFx0ICBcXFwiSC4yNDVcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjMtXFx0XFx0XFx0ICBcXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI0OlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjUtXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjYtXFx0XFx0XFx0ICBcXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI3OlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzI4LVxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTQ3MT1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0NzM6dm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ3NC1cXHRcXHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUwMy19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTA0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MDUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYz0yNTY9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yNzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM6MjgwOlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yODEtXFx0XFx0XFx0ICBcXHUwMDI2aXJjX2V4cF9wb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmM9NDk9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jLTU0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYzo1NTpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2aGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCwgSEVMUEVSX05BTUUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jLTU2LVxcdFxcdFxcdCAgXFx1MDAyNmV4cF9wb2xpY3ksIDAsIG5ldGJpb3NfbnNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jPTUzOD1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzo1NDI6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnBwdHAsIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy01NDMtXFx0XFx0XFx0ICBcXFwicHB0cFxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9MTgwPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYy0xODUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jOjE4NjpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2FuZSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYy0xODctXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTE3OTI9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNzk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjE3OTg6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNpcFswXSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE3OTktXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTE4MDEtXFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTgwMjpcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTgwMy1cXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM6NTU6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmhlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jLTU2LVxcdFxcdFxcdCAgXFxcInNubXBcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jPTEwNT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMtMTEwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYzoxMTE6XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnRmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMtMTEyLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjQyLjE0MjU4NjI0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDcwMzkwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgSGVscGVyIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIHRoZSBgbmZfY3RfaGVscGVyX2luaXRgIGZ1bmN0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBzb21lIGxvdy1sZXZlbCBjaGFuZ2VzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciByZWdpc3RyYXRpb24gcHJvY2Vzcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGFyZWEsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogaXQncyBiZWVuIGFsdGVyZWQgYW5kIHdoYXQgdGhhdCBzaWduaWZpZXMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gem9vbSBpbiBvbiB0aG9zZSBmdW5jdGlvbnMgZGlyZWN0bHkuIEl04oCZcyBwcmV0dHkgY2xlYXIgdGhhdCBpdOKAmXMgYWx0ZXJpbmcgd2hhdCBoYXBwZW5zIHdoZW4gd2UgcmVnaXN0ZXIgdGhvc2UgaGVscGVycywgYW5kIGxvb2tpbmcgYXQgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHdpbGwgbWFrZSBpdCBjbGVhciBleGFjdGx5IGhvdyB0aGV5J3JlIGJlaW5nIGNoYW5nZWQuIEkgd2lsbCBzdGFydCBieSBleGFtaW5pbmcgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAgYW5kIGBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG1pZ2h0IHByb3ZpZGUgc29tZSB1c2VmdWwgZGV0YWlsLCBzbyBpdCdzIGJlc3QgdG8gaGF2ZSBib3RoIGluIG1pbmQgYXQgdGhlIHNhbWUgdGltZS4gTGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aGF0J3MgZGlmZmVyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjQ1Ljg0OTYyODM2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg3NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jPTU3MT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jLTU4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYzo1ODQ6XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2ZnRwLCBcXHUwMDI2ZnRwX3B0cik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTg1LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MzAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTczMTpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTczMi1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zNjY9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2xvZyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM2ODppbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjkte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDA2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MDgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDA5OmludCBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTAtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoqaGVscGVyX3B0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MjI6XFx0ZXJyID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKG5ld19oZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyMy1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzMy19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDM0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTUwNj1pbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUyMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1MjM6XFx0XFx0ZXJyID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKG5ld19oZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUyNC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM9MjU2PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jOjI4NDpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZpcmMsIFxcdTAwMjZpcmNfcHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yODUtXFx0aWYgKHJldCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmM6NTg6XFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNmhlbHBlciwgXFx1MDAyNmhlbHBlcl9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYy01OS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM9NTM4PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy01NDktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjU1MDpcXHRyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2cHB0cCwgXFx1MDAyNnBwdHBfcHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNTUxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYz0xODA9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE5MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM6MTkxOlxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNnNhbmUsIFxcdTAwMjZzYW5lX3B0cik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy01OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmM6NjA6XFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNmhlbHBlciwgXFx1MDAyNmhlbHBlcl9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYy02MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM9MTA1PXN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja190ZnRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jOjExNjpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZ0ZnRwLCBcXHUwMDI2dGZ0cF9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy0xMTctXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MjIwPW5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODEtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyODI6XFx0cmV0ID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKGhlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjA5OjQ1LjkxMTUxMTMyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDMyNjYxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBjaGFuZ2VzLlxuXG4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBhbmQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gdW5kZXJzdGFuZGluZyBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZSBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGNvcmUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVlbiBjaGFuZ2VkIGluIHRoYXQgZnVuY3Rpb247IGl0IHdpbGwgbGlrZWx5IGdpdmUgdGhlIGJlc3Qgb3ZlcnZpZXcgb2YgaG93IGNvbm50cmFjayBoZWxwZXIgYmVoYXZpb3IgaGFzIGJlZW4gbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6NTAuNjU0Nzc5ODEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjE2NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTU1PXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1NjpfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTc1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo3NjpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz03OT1uZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo4NTpcXHRoID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04Ni0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTkwLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo5MTpcXHRcXHRcXHRoID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy05Mi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTM0PW5mX25hdF9oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE0MS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTQyOlxcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE0My1cXHRpZiAoIWgpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xOTI2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5NTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE5NTY6XFx0aGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTk1Ny1cXHRcXHRcXHRcXHRcXHQgICAgbmZfY3RfcHJvdG9udW0oY3QpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMjIyPWN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMjUxOlxcdFxcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIyNTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mX2N0X3Byb3RvbnVtKGN0KSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI2MS1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjIyNjI6XFx0XFx0XFx0aGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIyNjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mX2N0X2wzbnVtKGN0KSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yODU2PWN0bmV0bGlua19nbHVlX2F0dGFjaF9leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4ODAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI4ODE6XFx0XFx0YXNzaWduX2hlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5mX2N0X2wzbnVtKGN0KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6NTAuNzI5MDAxMzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxNjE4NDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29ubnRyYWNrIEhlbHBlciBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgdG91Y2hpbmcgb24gdGhlIGZ1bmN0aW9uYWwgYXNwZWN0cyBhbmQgc2hvdWxkIGJlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB3aXRoIHRob3NlIGBuZm5ldGxpbmtfY3RoZWxwZXJgIGFuZCBgY3RuZXRsaW5rYCBpbnRlcmZhY2VzLiBBbmQgb2YgY291cnNlLCB0aGUgbG9hZGluZyBvZiB0aGUgY29ubnRyYWNrIGhlbHBlciBtb2R1bGVzIHdpbGwgYmUga2V5LlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2UgY29yZSBmdW5jdGlvbnM6IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYXMgd2VsbCBhcyB0aGUgbmV0bGluayBpbnRlcmZhY2Ugb3BlcmF0aW9uczogYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYW5kIGBuZm5sX2N0aGVscGVyX2RlbGAuIFRoZXNlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgaGVscGVyIHN5c3RlbS5cblxuQW5kIHRoZW4gdGhlcmUncyB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zOiBgTkZfQ09OTlRSQUNLYCwgbmF0dXJhbGx5LCBhbmQgYE5GX0NUX05FVExJTktfSEVMUEVSYCB3aGljaCBJIHN1c3BlY3QgaXMgdGhlIGNvbmZpZyByZXF1aXJlZCBmb3IgbmV0bGluaywgYW5kIHRoZW4gYWxsIHRob3NlIGhlbHBlci1zcGVjaWZpYyBvcHRpb25zIGZvciBwcm90b2NvbHMgc3VjaCBhcyBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBhbmQgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLlxuXG5XYWl0IGEgbWludXRlLCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgaXMgdmVyeSBsaWtlbHkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZWQgdG8gYG5mbmV0bGlua19jdGhlbHBlci5jYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgY29uZmlnIG9wdGlvbiB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODowOTo1OC4wNDUxODgwMzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjE0OTQ1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX2N0aGVscGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MDk6NTguMzM3MzQ2NzgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDk2NjM5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBJdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIGZpbGUgZm9yIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLCBhbmQgdGhlIHBsYWNlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgSSBuZWVkIHRvIGV4YW1pbmUuIEknbGwgc3RhcnQgaGVyZSwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIG9mdGVuIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgdG8gbG9vayBmb3IgZGVlcGVyIGNvZGUgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDowMS41NDcwMTM1MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NzIzNDM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5ldGxpbmtfY3RoZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM4PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSArPSBuZm5ldGxpbmtfY3RoZWxwZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjAzLjIyNDI1MzY1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjA4MzM4MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIE5ldGZpbHRlciBjb25maWd1cmF0aW9ucy4gWWVzLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQuIEl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2UuXG5cbk5vdywgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGNvbmNlcm5pbmcgY29ubmVjdGlvbiB0cmFja2luZywgYXMgdGhlc2UgYXJlIG9mdGVuIGludGVyY29ubmVjdGVkLiBSaWdodCwgaGVyZSB3ZSBnbzogYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1RGVFBgLCBgTkZfQ09OTlRSQUNLX1NOTVBgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBhbmQgZmluYWxseSwgYE5GX0NPTk5UUkFDS19CUk9BRENBU1RgLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBzZXR0aW5ncywgYW5kIHRoZWlyIHJlc3BlY3RpdmUgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZWAuIFRoaXMgd2lsbCBwcm92aWRlIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoxMi40MzI1OTQ2NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTM3OTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfZnRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgKz0gbmZfY29ubnRyYWNrX2FtYW5kYS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgKz0gbmZfY29ubnRyYWNrX2Z0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICs9IG5mX2Nvbm50cmFja19oMzIzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MTIuODYxOTc4Njk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTM3OTgyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIGBORl9DT05OVFJBQ0tgIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgc28gbGV0J3Mgc3RhcnQgd2l0aCBhIGxpc3Q6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS19JUkNgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAsIGFuZCBmaW5hbGx5LCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAuIFJpZ2h0LCBnb3QgaXQuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4gVGhhdCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgZW50cnkgZmVlbHMgb3V0IG9mIHBsYWNlIGluIHRoYXQgbGlzdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3Mgb2Z0ZW4gaW1wbGljaXRseSBhY3RpdmF0ZWQgd2hlbiBlaXRoZXIgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBvciBgTkZfQ09OTlRSQUNLX1NOTVBgIGlzIGVuYWJsZWQsIGFuZCB0eXBpY2FsbHkgc2hvdWxkbid0IGJlIGxpc3RlZCBpbmRlcGVuZGVudGx5LiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjE3LjY1NTc3OTQ5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwODU3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTI1OD1jb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTI3Nz1jb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzk6XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjgwLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yOTY9Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk4LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5OTpcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDAtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoxNy43MTA4NzEzNTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDQxMTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU3RyZWFtbGluaW5nIHRoZSBOZXRmaWx0ZXIgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBpdCBzZWVtcyB1bm5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGVudW1lcmF0ZSBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAuIEkgY2FuIGluZmVyIHRoYXQgYmFzZWQgb24gdGhlIGNvbnRleHQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgdGhhdCBvdmVyaGVhZC4gTGV0J3MgbW92ZSBvbiBhbmQgZW5zdXJlIHdlJ3JlIHRob3JvdWdoLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIHVzYWdlIGFuZCBjb250ZXh0IG9mIGBORl9DT05OVFJBQ0tfU05NUGAgd2l0aGluIHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlYCBmaWxlLiBDaGVja2luZyB0aGF0IE1ha2VmaWxlIHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MjAuODg1Mjg0OTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDI2MzIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfc25tcF9iYXNpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19ORl9OQVRfUFBUUCkgKz0gbmZfbmF0X3BwdHAub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0xOC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfbmF0X3NubXBfYmFzaWMteSA6PSBuZl9uYXRfc25tcF9iYXNpYy5hc24xLm8gbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwOiQob2JqKS9uZl9uYXRfc25tcF9iYXNpY19tYWluLm86ICQob2JqKS9uZl9uYXRfc25tcF9iYXNpYy5hc24xLmhcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05GX05BVF9TTk1QX0JBU0lDKSArPSBuZl9uYXRfc25tcF9iYXNpYy5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoyMC45Njk1NTUxNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NjU4Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU05NUCBOQVQgTW9kdWxlKipcblxuUmlnaHQsIHNvIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIGJhc2ljIFNOTVAgTkFUIGltcGxlbWVudGF0aW9uLCBhbmQgaXQncyBjb21waWxlZCBjb25kaXRpb25hbGx5IHVuZGVyIGBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGUgb2JqZWN0IGZpbGUuIFdoZXJlIGRvZXMgYG5mX2Nvbm50cmFja19zbm1wLm9gIGxpdmU/IEl0J3MgbGlrZWx5IGJ1aWx0IGFzIHBhcnQgb2YgdGhlIG1haW4gYG5ldGZpbHRlcmAgc3Vic3lzdGVtLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCdsbCBjb25maXJtIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBsaW5raW5nIGlzc3Vlcy4gSXQncyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjI0LjQxNjE0NTI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNTIwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3NubXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQ5PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUykgKz0gbmZfY29ubnRyYWNrX25ldGJpb3NfbnMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TTk1QKSArPSBuZl9jb25udHJhY2tfc25tcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS01MS1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFApICs9IG5mX2Nvbm50cmFja19wcHRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MjQuNDg4NTAxNTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTk1OTUzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIHN0dWZmLCBzcGVjaWZpY2FsbHkgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0ZUUGAsIGFuZCBzbyBvbiwgYWxsIHRoZSB3YXkgZG93biB0byBgTkZfTkFUX1NOTVBfQkFTSUNgLiBDbGVhcmx5LCB0aGVzZSBhbGwgcmVsYXRlIHRvIGVuYWJsaW5nIGFuZCBjb25maWd1cmluZyB2YXJpb3VzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycy4gSSBzZWUgYSBicm9hZCBhcnJheSwgaW5jbHVkaW5nIHByb3RvY29scyBsaWtlIEZUUCwgSC4zMjMsIElSQywgYW5kIGV2ZW4gU05NUC4gR29vZCwgSSBsaWtlIHRoYXQgdGhlIG1vZHVsZXMgYXJlIHNlcGFyYXRlZCBieSBzcGVjaWZpYyBuZWVkcy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBoZWxwZXIgbWFuYWdlbWVudDogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBhbmQgYG5mbmxfY3RoZWxwZXJfZGVsYC4gVGhlc2UgY2xlYXJseSBkZWFsIHdpdGggcmVnaXN0ZXJpbmcsIHVucmVnaXN0ZXJpbmcsIGZpbmRpbmcsIGFuZCBtYW5hZ2luZyB0aGUgaGVscGVyIG1vZHVsZXMgdGhlbXNlbHZlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFRoZSBgbmZubF8qYCBmdW5jdGlvbnMgaW5kaWNhdGUgdGhlIHVzZSBvZiBOZXRsaW5rIGZvciBjb21tdW5pY2F0aW9uLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgYG5mbmV0bGlua19jdGhlbHBlci5jYCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIHRoYXQncyBiZWVuIHRvdWNoZWQgaW4gdGhhdCBmaWxlLiBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgZmlsZSBpdHNlbGYuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlbid0IGluY2x1ZGVkIGluIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBjb3VsZCByZXZlYWwgaW1wb3J0YW50IGNvbnRleHQgdGhhdCBtaWdodCBnZXQgbWlzc2VkIGlmIEkgb25seSBsb29rZWQgYXQgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDoyOS42NDgwOTk5OTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODQyMjYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzM9c3RydWN0IG5mbmxfY3RoZWxwZXIge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjM4OnN0YXRpYyBMSVNUX0hFQUQobmZubF9jdGhlbHBlcl9saXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM5LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00MT1uZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYKzFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzAtXFx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMTYsIE5GUFJPVE9fSVBWNiksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1Om5mbmxfY3RoZWxwZXJfcGFyc2VfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTgxLVxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfVFVQTEVfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6ODI6XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy04My1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9OTg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6OTk6bmZubF9jdGhlbHBlcl9mcm9tX25sYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xMDAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xMTg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTE5Om5mbmxfY3RoZWxwZXJfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEyMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTEzNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjEzODpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9sW05GQ1RIX1BPTElDWV9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xMzktXFx0W05GQ1RIX1BPTElDWV9OQU1FXSA9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTQ1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE0NjpuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTQ3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNTItXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTUzOlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9sLCBOVUxMKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE1NC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc2Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzctXFx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTgxOm5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTgyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTg4LVxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfUE9MSUNZX1NFVF9NQVgsIGF0dHIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxODk6XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTkwLVxcdFxcdFxcdFxcdFxcdCAgTlVMTCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIwNi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjIwNzpcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koXFx1MDAyNmhlbHBlci1cXHUwMDNlZXhwZWN0X3BvbGljeVtpXSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIwOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHRiW05GQ1RIX1BPTElDWV9TRVQraV0pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yMTk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjIwOm5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjIxLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0Mi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI0MzpcXHRyZXQgPSBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3koaGVscGVyLCB0YltORkNUSF9QT0xJQ1ldKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI0NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjYxLVxcdGhlbHBlci1cXHUwMDNlaGVscCA9IG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjYyOlxcdGhlbHBlci1cXHUwMDNlZnJvbV9ubGF0dHIgPSBuZm5sX2N0aGVscGVyX2Zyb21fbmxhdHRyO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjYzOlxcdGhlbHBlci1cXHUwMDNldG9fbmxhdHRyID0gbmZubF9jdGhlbHBlcl90b19ubGF0dHI7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yNjQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI4NS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI4NjpcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuZmN0aC1cXHUwMDNlbGlzdCwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTI5NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyOTY6bmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI5Ny1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMwMy1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9NQVgsIGF0dHIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMDQ6XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzA1LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMjYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zMjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzQ3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzQ4OlxcdFxcdHJldCA9IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmUoXFx1MDAyNmhlbHBlci1cXHUwMDNlZXhwZWN0X3BvbGljeVtpXSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM0OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmV3X3BvbGljeVtpXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzY3OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNjgtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3NC1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc1OlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ni1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zODYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozODc6XFx0cmV0dXJuIG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwodGIsIGhlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zODgtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0zOTA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzkxOm5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzkyLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDAzLVxcdGlmICh0YltORkNUSF9QT0xJQ1ldKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MDQ6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KGhlbHBlciwgdGJbTkZDVEhfUE9MSUNZXSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MDUtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQyNS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjQyNjpzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfbmV3KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjctXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDQzOlxcdHJldCA9IG5mbmxfY3RoZWxwZXJfcGFyc2VfdHVwbGUoXFx1MDAyNnR1cGxlLCB0YltORkNUSF9UVVBMRV0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQ0LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00NDYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0NDc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShubGN0aCwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDQ4LVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ2NC1cXHRpZiAoaGVscGVyID09IE5VTEwpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0NjU6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9jcmVhdGUodGIsIFxcdTAwMjZ0dXBsZSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00NjYtXFx0ZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDY3OlxcdFxcdHJldCA9IG5mbmxfY3RoZWxwZXJfdXBkYXRlKHRiLCBoZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDY4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00NzI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDczOm5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDc0LVxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz00OTY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDk3Om5mbmxfY3RoZWxwZXJfZHVtcF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQ5OC1cXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz01Mzc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTM4Om5mbmxfY3RoZWxwZXJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIHUzMiB0eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTM5LVxcdFxcdFxcdGludCBldmVudCwgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTU2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTU3OlxcdGlmIChuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGUoc2tiLCBoZWxwZXIpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTU1OS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjU2MDpcXHRpZiAobmZubF9jdGhlbHBlcl9kdW1wX3BvbGljeShza2IsIGhlbHBlcikgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNTYxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz01ODM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NTg0Om5mbmxfY3RoZWxwZXJfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy01ODUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MDYtXFx0XFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjA3OlxcdFxcdFxcdGlmIChuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MDgtXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02MjUtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjI3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY0MS1cXHRcXHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjY0MjpcXHRcXHRcXHQuZHVtcCA9IG5mbmxfY3RoZWxwZXJfZHVtcF90YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY0My1cXHRcXHR9O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTAtXFx0aWYgKHRiW05GQ1RIX1RVUExFXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NjUxOlxcdFxcdHJldCA9IG5mbmxfY3RoZWxwZXJfcGFyc2VfdHVwbGUoXFx1MDAyNnR1cGxlLCB0YltORkNUSF9UVVBMRV0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjUyLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02NTctXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2NTg6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShubGN0aCwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjU5LVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTY3NC1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjY3NTpcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX2ZpbGxfaW5mbyhza2IyLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjc2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy02OTAtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo2OTE6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNjkyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTcwNy1cXHRpZiAodGJbTkZDVEhfVFVQTEVdKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3MDg6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9wYXJzZV90dXBsZShcXHUwMDI2dHVwbGUsIHRiW05GQ1RIX1RVUExFXSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MDktXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTcxNS1cXHRyZXQgPSAtRU5PRU5UO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzE2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShubGN0aCwgbiwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzE3LVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTczOS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc0MDpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl9wb2xpY3lbTkZDVEhfTUFYKzFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQxLVxcdFtORkNUSF9OQU1FXSA9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzQ4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZm5sX2N0aGVscGVyX2NiW05GTkxfTVNHX0NUSEVMUEVSX01BWF0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NDktXFx0W05GTkxfTVNHX0NUSEVMUEVSX05FV11cXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MDpcXHRcXHQuY2FsbFxcdFxcdD0gbmZubF9jdGhlbHBlcl9uZXcsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTEtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfTVVURVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTItXFx0XFx0LmF0dHJfY291bnRcXHQ9IE5GQ1RIX01BWCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MzpcXHRcXHQucG9saWN5XFx0XFx0PSBuZm5sX2N0aGVscGVyX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU0LVxcdH0sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTUtXFx0W05GTkxfTVNHX0NUSEVMUEVSX0dFVF0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTY6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfZ2V0LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU3LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzU4LVxcdFxcdC5hdHRyX2NvdW50XFx0PSBORkNUSF9NQVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTk6XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZubF9jdGhlbHBlcl9wb2xpY3lcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc2MC1cXHR9LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYxLVxcdFtORk5MX01TR19DVEhFTFBFUl9ERUxdXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NjI6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfZGVsLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzYzLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzY0LVxcdFxcdC5hdHRyX2NvdW50XFx0PSBORkNUSF9NQVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NjU6XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZubF9jdGhlbHBlcl9wb2xpY3lcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc2Ni1cXHR9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NjgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5mbmxfY3RoZWxwZXJfc3Vic3lzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzcwLVxcdC5uYW1lXFx0XFx0XFx0XFx0PSBcXFwiY3RoZWxwZXJcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NzItXFx0LmNiX2NvdW50XFx0XFx0XFx0PSBORk5MX01TR19DVEhFTFBFUl9NQVgsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NzM6XFx0LmNiXFx0XFx0XFx0XFx0PSBuZm5sX2N0aGVscGVyX2NiLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc0LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc3Nj1NT0RVTEVfQUxJQVNfTkZOTF9TVUJTWVMoTkZOTF9TVUJTWVNfQ1RIRUxQRVIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzc4OnN0YXRpYyBpbnQgX19pbml0IG5mbmxfY3RoZWxwZXJfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzc5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzgyOlxcdHJldCA9IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoXFx1MDAyNm5mbmxfY3RoZWxwZXJfc3Vic3lzKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc4My1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03OTEtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3OTI6c3RhdGljIHZvaWQgX19leGl0IG5mbmxfY3RoZWxwZXJfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzkzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzk3OlxcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcXHUwMDI2bmZubF9jdGhlbHBlcl9zdWJzeXMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzk4LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Nzk5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShubGN0aCwgbiwgXFx1MDAyNm5mbmxfY3RoZWxwZXJfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtODAwLVxcdFxcdGN1ciA9IG5sY3RoLVxcdTAwM2VoZWxwZXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTgwNi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjgwNzptb2R1bGVfaW5pdChuZm5sX2N0aGVscGVyX2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6ODA4Om1vZHVsZV9leGl0KG5mbmxfY3RoZWxwZXJfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjI5Ljk5NjUyNzg2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUwMTc3MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIENvbm50cmFjayBIZWxwZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oZWxwZXIuY2AgZmlsZS4gVGhlIGNvcmUgb25lcyB0byBmb2N1cyBvbiBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uIGFyZTogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBhbmQgYG5mbmxfY3RoZWxwZXJfZGVsYC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgY3J1Y2lhbCByZWdpc3RyYXRpb24sIGxvb2t1cCwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiBtZWNoYW5pc21zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBpdCdzIHdvcnRoIGEgcXVpY2sgc3dlZXAgb2YgdGhhdCBmaWxlLiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGZ1bmN0aW9uIHRoYXQgd2FzIHRvdWNoZWQgZHVyaW5nIHRoZSBjaGFuZ2VzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjMzLjk0NjcwODg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIxMjM2NzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oZWxwZXIuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6MzQuMDQ4ODQzNjk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDEwNTE0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBgaGVscGVyX2hhc2hgIGluIGBuZl9jb25udHJhY2tfaGVscGVyLmNgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ubnRyYWNrIGhlbHBlciBpc3N1ZS4uLiBXaGVyZSBzaG91bGQgSSBzdGFydCBteSBpbnZlc3RpZ2F0aW9uPyBUaGUga2VybmVsJ3MgY29ubnRyYWNrIGhlbHBlciBpbXBsZW1lbnRhdGlvbiBpcyBjb21wbGV4LiBMZXQncyBzZWUuLi4gYSBxdWljayBtZW50YWwgcmV2aWV3IHN1Z2dlc3RzIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBsaWtlbHkgdG8gaW52b2x2ZSB0aGUgaGVscGVyIGhhc2ggdGFibGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBzdG9yZXMgdGhlc2UgaGVscGVycy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgYW5kIHNwZWNpZmljYWxseSBncmVwIGZvciBgaGVscGVyX2hhc2hgLiBJdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgY29kZSB0aGF0IG1hbmFnZXMgdGhlIGhlbHBlcidzIGludGVybmFsIHN0cnVjdHVyZSBpbiB0aGF0IG1vZHVsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgYW5kIGluaXRpYWwgY29udGV4dCBJIG5lZWQgdG8gcHVyc3VlIHRoaXMgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjM5LjE0OTg5NzgwNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MDY0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGVscGVyX2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MzM9c3RhdGljIERFRklORV9NVVRFWChuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM0OnN0cnVjdCBobGlzdF9oZWFkICpuZl9jdF9oZWxwZXJfaGFzaCBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9oYXNoKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNi11bnNpZ25lZCBpbnQgbmZfY3RfaGVscGVyX2hzaXplIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MT1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzOnN0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3QgY2hhciAqbmFtZSwgdTggcHJvdG9udW0pXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTY9X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjYxOlxcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNjItXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NjQ6XFx0aSA9IGhlbHBlcl9oYXNoKG5hbWUsIHByb3RvbnVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy02NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo2NjpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTY3LVxcdFxcdGlmIChzdHJjbXAoaC1cXHUwMDNlbmFtZSwgbmFtZSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0zNjg9aW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNzYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6Mzc3OlxcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzc4LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM4ODpcXHRoID0gaGVscGVyX2hhc2gobWUtXFx1MDAzZW5hbWUsIG1lLVxcdTAwM2VsNHByb3RvKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zODktXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozOTA6XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaF0sIGhub2RlKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzkxLVxcdFxcdGlmICghc3RyY21wKGN1ci1cXHUwMDNlbmFtZSwgbWUtXFx1MDAzZW5hbWUpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MDAtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZS1cXHUwMDNlY3RfcmVmY250LCAxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MDE6XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZtZS1cXHUwMDNlaG5vZGUsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDAyLVxcdG5mX2N0X2hlbHBlcl9jb3VudCsrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTY2PWludCBuZl9jb25udHJhY2tfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU2OC1cXHRuZl9jdF9oZWxwZXJfaHNpemUgPSAxOyAvKiBnZXRzIHJvdW5kZWQgdXAgdG8gdXNlIG9uZSBwYWdlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTY5OlxcdG5mX2N0X2hlbHBlcl9oYXNoID1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01NzAtXFx0XFx0bmZfY3RfYWxsb2NfaGFzaHRhYmxlKFxcdTAwMjZuZl9jdF9oZWxwZXJfaHNpemUsIDApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjU3MTpcXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3Mi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTU3OD12b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZmluaSh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTU3OS17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTgwOlxcdGt2ZnJlZShuZl9jdF9oZWxwZXJfaGFzaCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTgxOlxcdG5mX2N0X2hlbHBlcl9oYXNoID0gTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01ODItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDozOS4yMjQ3MTAzMTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYyODM2ODg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHNpZ25pZmljYW50IHJlZmFjdG9yIHVuZGVyd2F5LiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkb3B0aW9uIG9mIGBqaGFzaGAgd2l0aGluIHRoZSBgaGVscGVyX2hhc2hgIGZ1bmN0aW9uLCB3aGljaCByZXBsYWNlcyB0aGUgc2ltcGxlciBiaXR3aXNlIG9wZXJhdGlvbi4gVGhhdCdzIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBnb29kIHRvIHNlZS5cblxuQmV5b25kIHRoZSBoYXNoaW5nLCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBgbmZfY3RfaGVscGVyX2luaXRgIGZ1bmN0aW9uIGhhcyBhbHNvIGJlZW4gdHdlYWtlZC4gQW5kIHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaCB0aGUgY29yZSBoZWxwZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyB0byBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCBhbmQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYC4gSXQncyBjbGVhciB0aGF0IHRoZSBuZXcgaGFzaCBmdW5jdGlvbiBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbmZwcm90b2AgYW5kIGBsNHByb3RvYCBmaWVsZHMgYXJlIGJlaW5nIGludGVncmF0ZWQgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlc2UgaW1wYWN0IG92ZXJhbGwgcGVyZm9ybWFuY2UuXG5cblRoZW4gdGhlcmUncyB0aGUgYG5mbmV0bGlua19jdGhlbHBlci5jYCBmaWxlLiBUaGUgY2hhbmdlcyB0aGVyZSwgd2l0aGluIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGFuZCBgbmZubF9jdGhlbHBlcl9jcmVhdGVgLCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmaWVsZHMgdG9vLCBpbmRpY2F0aW5nIHRoYXQgdGhleeKAmXJlIGJlaW5nIGhhcm1vbml6ZWQgd2l0aCB0aGUgdXBkYXRlZCBoZWxwZXIgbW9kZWwsIHdoaWNoIGlzIG5lY2Vzc2FyeS4gSSBleHBlY3Qgc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvciBidWcgZml4ZXMgaGVyZS5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgaW1wYWN0ZWQuIE9rYXksIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgdGhlbiB0aGUgbW9yZSBzcGVjaWZpYyBoZWxwZXJzOiBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS19JUkNgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyBgTkZfTkFUX1NOTVBfQkFTSUNgIGludGVyYWN0cyB3aXRoIGFsbCBvZiB0aGlzLiBBaCwgYW5kIGl0J3MgZm9yIGBuZl9uYXRfc25tcF9iYXNpY19tYWluLmNgIHNvIGl0J3MgcHJvYmFibHkgbm90IGRpcmVjdGx5IGFmZmVjdGVkIGhlcmUuIEFscmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSBieSBsb29raW5nIGF0IHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE9rYXksIGdvb2QuIFRoYXQgc2hvdWxkIGJlIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjQ2Ljg1MzA4MjU5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTg1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTAwOmNvbmZpZyBORl9OQVRfU05NUF9CQVNJQ1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiQmFzaWMgU05NUC1BTEcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6NDYuOTEzMzA2MjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTAxNjc3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTmV0d29yayBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgY29uZmlybWluZyB0aGF0IGBORl9OQVRfU05NUF9CQVNJQ2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZsYWcgdG8gYmUgZm9jdXNpbmcgb24uIEdpdmVuIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0byBmaWxlcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY2AsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBjb25uZWN0aW9uIHRyYWNraW5nIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQga2VybmVsIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZXhhY3QgZmlsZW5hbWUuIEl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBhbiBgb3BlbnZzd2l0Y2hgIG1vZHVsZSwgc28gSSBzaG91bGQgY2hhbmdlIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDo1MS41MjM0NzY0MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzY3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19vdnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xND1uZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgKz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX09WUykgKz0gbmZfY29ubnRyYWNrX292cy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNi1uZl9jb25udHJhY2stJChDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCkgKz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDo1MS42MTQ4NDk2NTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzk0ODg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBgQ09ORklHX05GX0NPTk5UUkFDS19PVlNgIG9wdGlvbi4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyB0aGF0J3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgTmV0ZmlsdGVyLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG9wdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGtleSB0byBhc3Nlc3NpbmcgaXRzIHJlbGV2YW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3NjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMDo1NC44NDI4MDE3NzhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjcwNzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9DT05OVFJBQ0tfT1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTg4PWNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTA6NTUuMTI1NTE0MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1OTU5OTM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBhIEJvb2xlYW4gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYm9vbGVhbiBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5ICp1c2luZyogdGhpcyB0aGluZy5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCB3aGVyZSBpdCdzIGJlaW5nIGV2YWx1YXRlZCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgaWYgaXQncyB0b2dnbGVkLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcXVpY2tseSBpZGVudGlmeWluZyBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMuIEknbSBlc3NlbnRpYWxseSB0cmFjaW5nIGl0cyB1c2FnZSDigJMgd2hpY2ggbW9kdWxlcywgZnVuY3Rpb25zLCBvciBldmVuIG90aGVyIGNvbmZpZ3MgcmVmZXJlbmNlIG9yIGRlcGVuZCBvbiBpdHMgc3RhdGU/IElzIGl0IGp1c3QgYSBzaW1wbGUgZmxhZywgb3IgZG9lcyBpdHMgdmFsdWUgZGlyZWN0bHkgaW5mbHVlbmNlIGNyaXRpY2FsIGNhbGN1bGF0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHJlc291cmNlIGFsbG9jYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIG5vdCBiZSBqdXN0IGEgc2ltcGxlIHNpbmdsZSBsaW5lIG9mIHVzYWdlLiBTbyBJJ2xsIGdvIHRocm91Z2ggYW5kIGNoZWNrIHRoaXMgaXRlbSBmb3IgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHZhbHVlIHRoaXMgY29uZmlnIHJlcHJlc2VudHMgYW5kIHVuZGVyc3RhbmQgdGhlIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA0MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEwOjU5LjQ4NTExNzAzN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MTc4MDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWc9Nj1jb25maWcgT1BFTlZTV0lUQ0hcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTE4LVxcdHNlbGVjdCBORVRfTlNIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTk6XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctMjAtXFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1RcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOS1cXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiAoIU5GX05BVCB8fCBORl9OQVQpIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5uZXQvc2NoZWQvS2NvbmZpZzo5MjA6XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvc2NoZWQvS2NvbmZpZy05MjEtXFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjExOjAxLjc1NjkwNjg3OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjY3MzMwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbm50cmFjayBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSByZWxhdGUgdG8gT3BlbiB2U3dpdGNoLiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBPUEVOVlNXSVRDSGAgYW5kIGBORVRfQUNUX0NUYCBzZWVtIGxpa2UgdGhlIGtleSBkcml2ZXJzIGhlcmUsIGFuZCBlbmFibGluZyB0aGVtIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIGp1c3Qga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNvbmZpZ3MgdGhlbXNlbHZlczogYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGFuZCB0aGUgdmFyaW91cyBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoZWxwZXJzOiBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgZXRjLiBSaWdodCBub3cgaXQncyBqdXN0IGEgcmF3IGxpc3QuXG5cbldhaXQgYSBzZWNvbmTigKYgYE5GX0NPTk5UUkFDS19PVlNgIGlzIGEgYm9vbGVhbi4gSWYgSSBlbmFibGUgYE9QRU5WU1dJVENIYCBhbmQgYE5FVF9BQ1RfQ1RgLCB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBgTkZfQ09OTlRSQUNLX09WU2AuIFRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIsIGFzIGl0IHJlZHVjZXMgdGhlIGNvbXBsZXhpdHkgb2YgZXhwbGljaXRseSBtYW5hZ2luZyB0aGF0IGNvbmZpZyBzZXBhcmF0ZWx5LlxuXG5MZXQncyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlncy4gQWhhISBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgIGFuZCBgTkZfQ09OTlRSQUNLX1NOTVBgLiBJbnRlcmVzdGluZy5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBmb2N1cyBzeW1ib2xzLiBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgaGVscGVyIGZ1bmN0aW9uczogYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAsIGFuZCBgbmZfY3RfaGVscGVyX2luaXRgLlxuXG5BaCwgaGVyZSdzIGEgZ29vZCBvbmU6IGBuZl9jdF9oZWxwZXJfaW5pdGAuIEl0IHNlZW1zIGxpa2UgKmFsbCogdGhlIGhlbHBlciBtb2R1bGVzIGFyZSBjYWxsaW5nIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGF04oCZcyBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgYGhlbHBlcl9oYXNoYC4gSXQncyBzdGF0aWMsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgdXNlIGl0IGFzIGEgc3ltYm9sIHRvIGFuYWx5emUgdGhlIGNvZGUuIEhvd2V2ZXIsIGl0J3MgY2FsbGVkIGJ5IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBzbyB0aG9zZSBhcmUgc3RpbGwgZ29vZCBzeW1ib2xzIHRvIGZvY3VzIG9uLlxuXG5XYWl0LCB0aGVyZSBpcyBhbHNvIGBuZl9jdF9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY2AuIExldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ5MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxMC40MjQyNDAwNzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODYzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy0xMS0vKiAnc2tiJyBzaG91bGQgYWxyZWFkeSBiZSBwdWxsZWQgdG8gbmhfb2ZzLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjEyOmludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTEzLVxcdFxcdCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywgdTE2IHByb3RvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtODItfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjgzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtODQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9ODU9aW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy05NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYzo5NjpcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTk3LVxcdGlmICghaGVscCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxMC40ODIxMDg5NjJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2ODcyMDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBgbmZfY3RfaGVscGVyYCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYG5mX2N0X2hlbHBlcmAgaXMgaW5kZWVkIGV4cG9ydGVkIGFuZCwgY3J1Y2lhbGx5LCAqbW9kaWZpZWQqLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSB3YXkgaXQgd29ya3MsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgY2hlY2tpbmcgYGhlbHBlci1cdTAwM2VuZnByb3RvYCBhbmQgYGhlbHBlci1cdTAwM2VsNHByb3RvYC4gVGhpcyBtYWtlcyBgbmZfY3RfaGVscGVyYCBhIHN0cm9uZyBjYW5kaWRhdGUgLSBhIGdvb2Qgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYG5mX2Nvbm50cmFja19icm9hZGNhc3QuY2AuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4ODMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxNC40NTA4MzI4OTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4Mzk2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0xNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYzoxODppbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtMTktXFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtODgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jOjg5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMtOTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjExOjE0LjUyOTIzNDg5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3MTU5NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbmZfY29ubnRyYWNrYCBCcm9hZGNhc3QgSGVscGVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXkgcmVtb3ZlZCB0aGF0IGxpbmUsIGBleHAtXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQgPSBoZWxwZXItXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQ7YCwgZnJvbSBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW1wYWN0LiBJIGNhbiBjZXJ0YWlubHkgc2VlIHdoeSB0aGlzIGNoYW5nZSBtaWdodCBiZSBzaWduaWZpY2FudCwgYW5kIGl0J3MgYSBnb29kIHBsYWNlIHRvIGZvY3VzLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgdGhpcyBoYXMgaW1wbGljYXRpb25zIGVsc2V3aGVyZS4gTGV0J3MgZGVsdmUgaW50byBgbmZfY29ubnRyYWNrX2FtYW5kYS5jYCBhbmQgc2VlIGlmIHRoZSBBbWFuZGEgbW9kdWxlIGlzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBwb3J0IGFzc2lnbm1lbnQsIGFuZCBob3cgaXTigJlzIGJlaW5nIGhhbmRsZWQgb3IgY2lyY3VtdmVudGVkIG5vdy4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGlzIGhhcyB0aGUgZGVzaXJlZCBvdXRjb21lIG9yIGlmIGl0IGhhcyBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbi4gSSB3aWxsIHByb2NlZWQgd2l0aCBjYXV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzI3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjExOjE4Ljg3NjM5Njk1NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwODIwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1hbmRhX2hlbHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9NTI9c3RhdGljIHN0cnVjdCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzo4MzpzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtODQtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMTA3LVxcdGlmIChkYXRhb2ZmIFxcdTAwM2U9IHNrYi1cXHUwMDNlbGVuKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTA4OlxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcImFtYW5kYV9oZWxwOiBza2JsZW4gPSAldVxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTEwOS1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgYW1hbmRhX2V4cF9wb2xpY3kgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTcyOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBhbWFuZGFfaGVscGVyWzJdIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTczOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYW1hbmRhX2hlbHBlcl9wdHJbMl0gX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTc1PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfYW1hbmRhX2Zpbmkodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxNzk6XFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihhbWFuZGFfaGVscGVyX3B0cixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxODA6XFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShhbWFuZGFfaGVscGVyX3B0cikpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzZWFyY2gpOyBpKyspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xODU9c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjAxOlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZhbWFuZGFfaGVscGVyWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMDItXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDM6XFx0XFx0XFx0ICBcXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA0OlxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZhbWFuZGFfaGVscGVyWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjA1LVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjA2OlxcdFxcdFxcdCAgXFx1MDAyNmFtYW5kYV9leHBfcG9saWN5LCAwLCBhbWFuZGFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTIwNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDg6XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoYW1hbmRhX2hlbHBlcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMDk6XFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoYW1hbmRhX2hlbHBlciksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjEwOlxcdFxcdFxcdFxcdFxcdCAgICBhbWFuZGFfaGVscGVyX3B0cik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjExLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMToxOC45NjA0ODM2NDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MTIwODkzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0OiBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZl9jdF9oZWxwZXJfaW5pdGAgaW4gYSBidW5jaCBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBtb2R1bGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZSBnb2luZyB0byBiZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG9mIHRoZXNlIG1vZHVsZXMsIG9yIHBlcmhhcHMganVzdCBgbmZfY3RfaGVscGVyX2luaXRgIGFuZCBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCBkaXJlY3RseS4gSG93ZXZlciwgc2luY2UgdGhlIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgb25seSBvbmNlIGR1cmluZyBtb2R1bGUgbG9hZCwgZnV6emluZyB0aG9zZSBkaXJlY3RseSBwcm9iYWJseSB3b24ndCBiZSBhcyBmcnVpdGZ1bCBhcyB0YXJnZXRpbmcgdGhpbmdzIHRoYXQgYXJlIGNvbnN0YW50bHkgaW4gdXNlLlxuXG5UaGUgcmVhbCBtZWF0IHdpbGwgbGlrZWx5IGJlIGluIHRoZSBuZXRsaW5rIGludGVyZmFjZSDigJMgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYG5mbmxfY3RoZWxwZXJfZGVsYCwgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYCDigJMgYW5kLCBjcnVjaWFsbHksIHRoZSBwYWNrZXQgcGF0aCBpdHNlbGY6IGBuZl9jdF9oZWxwZXJgIGFuZCBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwYC4gRG9uJ3QgZm9yZ2V0LCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgcGFja2V0IG1hdGNoZXMgYSBoZWxwZXIgb3Igd2hlbiBvbmUgaXMgYXNzaWduZWQgdmlhIG5ldGxpbmsgb3IgbmZ0YWJsZXMuXG5cblNvLCBsZXQgbWUgc3VtbWFyaXplIHRoZSBrZXkgZm9jdXMgc3ltYm9sczpcbiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYFxuKiAgIGBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZGBcbiogICBgbmZfY3RfaGVscGVyX2luaXRgXG4qICAgYG5mbmxfY3RoZWxwZXJfbmV3YFxuKiAgIGBuZm5sX2N0aGVscGVyX2dldGBcbiogICBgbmZubF9jdGhlbHBlcl9kZWxgXG4qICAgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYFxuKiAgIGBuZl9jdF9oZWxwZXJgXG4qICAgYG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscGBcblxuTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGV0J3MgbmFpbCBkb3duIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMuIEkgc2VlIGEgYnVuY2ggb2Ygb3B0aW9ucyBsaXN0ZWQ6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS19JUkNgLCBgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNgLCBgTkZfQ09OTlRSQUNLX1BQVFBgLCBgTkZfQ09OTlRSQUNLX1NBTkVgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9DT05OVFJBQ0tfU05NUGAsIGBORl9OQVRfU05NUF9CQVNJQ2AsIGBPUEVOVlNXSVRDSGAsIGFuZCBgTkVUX0FDVF9DVGAuXG5cbldhaXQsIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBzZWxlY3RlZCBieSBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAsIHNvIEkgY2FuIGp1c3QgaW5jbHVkZSB0aG9zZSB0d28gaW5zdGVhZC5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAgaXMgc2VsZWN0ZWQgYnkgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCBhbmQgYE5GX0NPTk5UUkFDS19TTk1QYC4gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuTGV0IG1lIGNoZWNrIGlmIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBpbiBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIFllcywgSSBzZWUgdGhlIGVudHJ5OiBgb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19PVlMpICs9IG5mX2Nvbm50cmFja19vdnMub2AuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGRlcGVuZGVuY2llcy4gRG9lcyBgTkZfTkFUX1NOTVBfQkFTSUNgIHJlcXVpcmUgYE5GX05BVGA/IFllcywgaXQgZG9lcy4gSW5jbHVkZSBgTkZfTkFUYC5cblxuRG9lcyBgTkZfQ09OTlRSQUNLX1NOTVBgIHJlcXVpcmUgYE5FVEZJTFRFUl9BRFZBTkNFRGA/IFllcywgSSBuZWVkIGBORVRGSUxURVJfQURWQU5DRURgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSBvdGhlcnMuIERvZXMgYE5GX0NPTk5UUkFDS19QUFRQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfSDMyM2AgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLlxuRG9lcyBgTkZfQ09OTlRSQUNLX1NBTkVgIHJlcXVpcmUgYE5GX0NPTk5UUkFDS2A/IFllcy5cbkRvZXMgYE5GX0NPTk5UUkFDS19URlRQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfU0lQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfSVJDYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfRlRQYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfQU1BTkRBYCByZXF1aXJlIGBORl9DT05OVFJBQ0tgPyBZZXMuXG5Eb2VzIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AgcmVxdWlyZSBgTkZfQ09OTlRSQUNLYD8gWWVzLlxuRG9lcyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIHJlcXVpcmUgYE5GX0NUX05FVExJTktgPyBZZXMsIGl0IGRvZXMuIEluY2x1ZGUgYE5GX0NUX05FVExJTktgLlxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgZ290IGEgc29saWQgbGlzdCBvZiBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE5vd1xuXG4iLCJJbnB1dFRva2VucyI6Mzg2MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTE6MzEuMzcyNTc1MjNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjI4NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0NUX05FVExJTktfSEVMUEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzczPWNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM4NTpjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVxcdHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluaydcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTE6MzEuNDM3ODA5NTM4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODQyNzU3MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgTkZfQ1RfTkVUTElOS19IRUxQRVIqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHN1bW1hcml6ZSBhIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgKmRlcGVuZGVuY2llcyogb2YgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuIEkga25vdyBpdCdzIGEga2VybmVsIG1vZHVsZSwgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgdGhhdCBcIk5FVExJTktcIiBzdWdnZXN0cyBjb21tdW5pY2F0aW9uIHdpdGggdXNlcnNwYWNlLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlzc2VjdCB3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIHJlbGllcyB1cG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrIG1pZ2h0IGJlIGludGVncmF0ZWQsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyLXNwYWNlIHRvb2xzIGFuZCBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBoZWxwZXIgKnByb3ZpZGVzKiBhbmQgZnJvbSB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGl0J3MgdXNlZC4gVGhpcyBkZXBlbmRlbmN5IGFuYWx5c2lzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEknbGwgYmUgdGhpbmtpbmcgaW4gdGVybXMgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIHBvdGVudGlhbCBidWlsZCBvcmRlciBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3NDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMjowNy4yODA1NzAyM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5Njk5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM3Mz1jb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjEyOjA3LjU3MDI3NDM4M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ0NTI1ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBzYXlzIHRvIGxvb2sgYXQgdGhlIGxpbmVzICphZnRlciogYGNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoaXMgaXMgYWJvdXQgTmV0ZmlsdGVyIGFuZCBsaWtlbHkgaXRzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLlwiIFRoYXQgYGNvbmZpZ2AgbGluZSBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgdGhlIHN1YnNlcXVlbnQgbGluZXMsIHdoZXJldmVyIHRoZXkgYXJlLCB3aWxsIHRlbGwgbWUgc29tZXRoaW5nIGFib3V0IGhvdyB0aGF0IG1vZHVsZSwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgaXMgY29uZmlndXJlZCBvciB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBLbm93aW5nIGhvdyB0aGF0IGNvbXBvbmVudCBpcyBjb25maWd1cmVkIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgYmVjYXVzZSBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBOZXRmaWx0ZXIgbW9kdWxlcyBhbmQga2VybmVsIHN1YnN5c3RlbXMuIEkgd2FudCB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgTmV0ZmlsdGVyIGluIHRlcm1zIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHBvdGVudGlhbCBuZXRsaW5rIGludGVyYWN0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yIG9mIGFueSBjdXN0b20gZmlyZXdhbGwgcnVsZXMgb3IgbmV0d29yayBhcHBsaWNhdGlvbnMgZGVwZW5kaW5nIG9uIHRoYXQgcGFydCBvZiB0aGUga2VybmVsLiBJIGFudGljaXBhdGUgc2VlaW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBtYXliZSBldmVuIGRlc2NyaXB0aW9ucyBvZiBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgcmVsYXRlZCBmZWF0dXJlcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aG9zZSBsaW5lcyByZXZlYWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTI6MTIuMzE0ODAyODFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODU6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxuIDM4NjpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuIDM4NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xcbiAzODk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAzOTA6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxuIDM5MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAzOTI6XFx0XFx0aGVscFxcbiAzOTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB1c2VyLXNwYWNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xcbiAzOTQ6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTI6MTIuMzE0OTEyOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgyOTcyNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy5cblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIE5ldGZpbHRlciBOZXRsaW5rIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gdG8gZ2V0IHRoaXMgTmV0ZmlsdGVyIE5ldGxpbmsgZnVuY3Rpb25hbGl0eSB3b3JraW5nIGFzIGludGVuZGVkLCBpdCdzIHByZXR0eSBjbGVhciB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGUgY29yZSBkZXBlbmRlbmN5IGhlcmUgc2VlbXMgdG8gaGluZ2Ugb24gYE5GX0NUX05FVExJTktgLCB0aGF04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgb2YgY291cnNlLCB0aGF0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHN0b3J5LiBXZSdsbCBhbHNvIG5lZWQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBmb3IgdGhlIHF1ZXVpbmcgbWVjaGFuaXNtIGFuZCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAgLSBwcmVzdW1hYmx5IHRoZXJlJ3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlIGZvciBnbHVlaW5nIHRoaW5ncyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGBjdGAuIEFuZCBsYXN0bHksIGBORVRGSUxURVJfQURWQU5DRURgIGZlZWxzIGxpa2UgYSBwcnVkZW50IGNob2ljZSwgYXMgb2Z0ZW4gdGhlIGFkdmFuY2VkIGZlYXR1cmVzIGVuYWJsZSBvdGhlciBuZWVkZWQgZnVuY3Rpb25hbGl0eS5cblxuSSdsbCBtYWtlIGEgcG9pbnQgb2YgZXhwbGljaXRseSBpbmNsdWRpbmcgYE5GX0NUX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwganVzdCB0byBiZSBzdXJlIHdlJ3JlIGNvdmVyZWQuXG5cbk5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAgc3BlY2lmaWNhbGx5IGFuZCBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMjoxNi41OTc4ODg2MDlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzUxNjM5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zODU9Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTg6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk5LVxcdGJvb2wgXFxcIk5GUVVFVUUgYW5kIE5GTE9HIGludGVncmF0aW9uIHdpdGggQ29ubmVjdGlvbiBUcmFja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTI6MTcuNzczMDYyNTI4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTY4Nzg3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kIHdhcnJhbnRzIGZ1enppbmcuIEkndmUgZ290IGEgbGlzdCBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGFuZCB0aGVuIHRoZSB2YXJpb3VzIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbm50cmFjayBoZWxwZXJzIGxpa2UgRlRQLCBIMzIzLCBJUkMsIGV0Yy4gV2UgYWxzbyBoYXZlIGBORl9OQVRgIGFuZCBzb21lIGFzc29jaWF0ZWQgbW9kdWxlcy4gQ3J1Y2lhbGx5LCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAgYXJlIGluIHRoZSBtaXggYXMgd2VsbC5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBmb2N1c2luZyBvbiBhIGNvcmUgYXJlYTogY29ubnRyYWNrIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nLiBJdCdzIG1vdmluZyBhd2F5IGZyb20gcG9ydC1iYXNlZCBtYXRjaGluZyBhbmQgdG93YXJkcyBqdXN0IEwzL0w0IHByb3RvY29sIG1hdGNoaW5nLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGhlbHBlcnMgZ2V0IGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG5ldGZpbHRlciBjb25udHJhY2sgYW5kIGlzIGFuIGFyZWEgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gSSd2ZSBmbGFnZ2VkIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYG5mX2N0X2hlbHBlcl9pbml0YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYG5mbmxfY3RoZWxwZXJfZ2V0YCwgYG5mbmxfY3RoZWxwZXJfZGVsYCwgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYCwgYG5mX2N0X2hlbHBlcmAsIGFuZCBgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwYC5cblxuTm93LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY29uZmlncy4gV2UgaGF2ZSBhIGZldyBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuIGBORl9DT05OVFJBQ0tfT1ZTYCBpcyBhIGRlcGVuZGVuY3kgb2YgYm90aCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVUX0FDVF9DVGAuIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCBpcyBzZWxlY3RlZCBieSBib3RoIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AgYW5kIGBORl9DT05OVFJBQ0tfU05NUGAuIEFuZCBgTkZfTkFUX1NOTVBfQkFTSUNgIGlzIGRlcGVuZGVudCBvbiBgTkZfTkFUYC5cblxuSSdsbCBjb25zb2xpZGF0ZSB0aGlzIGluZm9ybWF0aW9uIGludG8gYSBjbGVhciByZXBvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTAwLCJPdXRwdXRUb2tlbnMiOjM4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoxMjoyOS43NDE4NTM0NDJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUwNzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfR0xVRV9DVFwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19JUkNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19ORVRCSU9TX05TXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfUFBUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NBTkVcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19URlRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU05NUFwiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJORl9OQVRfU05NUF9CQVNJQ1wiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfZ2V0XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2RlbFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9jcmVhdGVcIixcbiAgICBcIm5mX2N0X2hlbHBlclwiLFxuICAgIFwibmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgb2YgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXIgcmVnaXN0cmF0aW9uIGFuZCBtYXRjaGluZy4gSXQgcmVtb3ZlcyB0aGUgcG9ydC1iYXNlZCBtYXRjaGluZyBhbmQgcmVwbGFjZXMgaXQgd2l0aCBMMy9MNCBwcm90b2NvbCBtYXRjaGluZy4gVGhpcyBhZmZlY3RzIGhvdyBoZWxwZXJzIGFyZSBhc3NpZ25lZCB0byBjb25uZWN0aW9ucyBhbmQgaG93IHRoZXkgYXJlIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS19BTUFOREFcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSVJDXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTkVUQklPU19OU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1BQVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TQU5FXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVEZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NOTVBcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRfQUNUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZFwiLFxuICAgIFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2dldFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9kZWxcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfY3JlYXRlXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJcIixcbiAgICBcIm5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG9mIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVyIHJlZ2lzdHJhdGlvbiBhbmQgbWF0Y2hpbmcuIEl0IHJlbW92ZXMgdGhlIHBvcnQtYmFzZWQgbWF0Y2hpbmcgYW5kIHJlcGxhY2VzIGl0IHdpdGggTDMvTDQgcHJvdG9jb2wgbWF0Y2hpbmcuIFRoaXMgYWZmZWN0cyBob3cgaGVscGVycyBhcmUgYXNzaWduZWQgdG8gY29ubmVjdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIHZpYSBuZXRsaW5rLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[1] Phase: Succeeded StartedAt: 2026-06-26 18:13:47 +0000 UTC FinishedAt: 2026-06-26 18:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 18:13:47 +0000 UTC FinishedAt: 2026-06-26 18:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2] Phase: Succeeded StartedAt: 2026-06-26 18:13:47 +0000 UTC FinishedAt: 2026-06-26 18:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-26 18:13:47 +0000 UTC FinishedAt: 2026-06-26 18:59:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 18:13:47 +0000 UTC FinishedAt: 2026-06-26 18:14:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 18:13:47 +0000 UTC FinishedAt: 2026-06-26 18:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflowdcjxl/series-workflowdcjxl-convert-artifact-353347587/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 18:14:09 +0000 UTC FinishedAt: 2026-06-26 18:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 18:14:09 +0000 UTC FinishedAt: 2026-06-26 18:40:44 +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:*4cc1f6d3-1392-4fbf-b072-529eda993328,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-workflowdcjxl/series-workflowdcjxl-convert-artifact-353347587/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": "9d40994a-60ef-4d3e-b299-2ff9e85050aa", "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-workflowdcjxl/series-workflowdcjxl-build-action-2739034225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 18:14:09 +0000 UTC FinishedAt: 2026-06-26 18:40:34 +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:*4cc1f6d3-1392-4fbf-b072-529eda993328,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-workflowdcjxl/series-workflowdcjxl-convert-artifact-353347587/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": "9d40994a-60ef-4d3e-b299-2ff9e85050aa", "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-workflowdcjxl/series-workflowdcjxl-build-action-2739034225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 18:40:44 +0000 UTC FinishedAt: 2026-06-26 18:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 18:40:44 +0000 UTC FinishedAt: 2026-06-26 18:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 18:40:44 +0000 UTC FinishedAt: 2026-06-26 18:41:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 18:40:44 +0000 UTC FinishedAt: 2026-06-26 18:40:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflowdcjxl/series-workflowdcjxl-convert-artifact-1798963898/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 18:41:05 +0000 UTC FinishedAt: 2026-06-26 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 18:41:05 +0000 UTC FinishedAt: 2026-06-26 18:42:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9d40994a-60ef-4d3e-b299-2ff9e85050aa,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-workflowdcjxl/series-workflowdcjxl-build-action-2739034225/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-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 18:43:06 +0000 UTC FinishedAt: 2026-06-26 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 18:43:06 +0000 UTC FinishedAt: 2026-06-26 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 18:43:06 +0000 UTC FinishedAt: 2026-06-26 18:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 18:43:06 +0000 UTC FinishedAt: 2026-06-26 18:59:39 +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:*4cc1f6d3-1392-4fbf-b072-529eda993328,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-workflowdcjxl/series-workflowdcjxl-convert-artifact-1798963898/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": "55c6b0d0-ab03-486a-ac71-edc3a295de8c", "success": false },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-workflowdcjxl/series-workflowdcjxl-build-action-4268273950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 18:43:06 +0000 UTC FinishedAt: 2026-06-26 18:59:29 +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:*4cc1f6d3-1392-4fbf-b072-529eda993328,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-workflowdcjxl/series-workflowdcjxl-convert-artifact-1798963898/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": "55c6b0d0-ab03-486a-ac71-edc3a295de8c", "success": false },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-workflowdcjxl/series-workflowdcjxl-build-action-4268273950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-06-26 18:59:39 +0000 UTC FinishedAt: 2026-06-26 18:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdcjxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["__nf_conntrack_helper_register","__nf_conntrack_helper_find","nf_ct_helper_init","nfnl_cthelper_new","nfnl_cthelper_get","nfnl_cthelper_del","nfnl_cthelper_create","nf_ct_helper","nf_conntrack_broadcast_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK_QUEUE","NETFILTER_NETLINK_GLUE_CT","NETFILTER_ADVANCED","NF_CT_NETLINK_HELPER","NF_CONNTRACK_AMANDA","NF_CONNTRACK_FTP","NF_CONNTRACK_H323","NF_CONNTRACK_IRC","NF_CONNTRACK_NETBIOS_NS","NF_CONNTRACK_PPTP","NF_CONNTRACK_SANE","NF_CONNTRACK_SIP","NF_CONNTRACK_TFTP","NF_CONNTRACK_SNMP","NF_NAT","NF_NAT_SNMP_BASIC","OPENVSWITCH","NET_ACT_CT"],"series_id":"f65c315d-b9f9-4dc6-8d2c-387298720db0","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-06-26 18:59:39 +0000 UTC FinishedAt: 2026-06-26 18:59:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}