Name: series-workflowjmcmv Phase: Succeeded StartedAt: 2026-08-07 00:17:11 +0000 UTC FinishedAt: 2026-08-07 04:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[0] Phase: Succeeded StartedAt: 2026-08-07 00:17:11 +0000 UTC FinishedAt: 2026-08-07 00:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 00:17:11 +0000 UTC FinishedAt: 2026-08-07 00:51:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "ca99eedb-67ba-4856-beb2-69efec574e33" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hash_net4_add", "hash_net4_del", "hash_net4_test", "hash_net4_flush", "hash_net6_add", "hash_net6_del", "hash_net6_test", "hash_net6_flush", "hash_netport4_add", "hash_netport4_del", "hash_netport4_test", "hash_netport4_flush", "hash_netport6_add", "hash_netport6_del", "hash_netport6_test", "hash_netport6_flush", "hash_netiface4_add", "hash_netiface4_del", "hash_netiface4_test", "hash_netiface4_flush", "hash_netiface6_add", "hash_netiface6_del", "hash_netiface6_test", "hash_netiface6_flush", "hash_netnet4_add", "hash_netnet4_del", "hash_netnet4_test", "hash_netnet4_flush", "hash_netnet6_add", "hash_netnet6_del", "hash_netnet6_test", "hash_netnet6_flush", "hash_ipportnet4_add", "hash_ipportnet4_del", "hash_ipportnet4_test", "hash_ipportnet4_flush", "hash_ipportnet6_add", "hash_ipportnet6_del", "hash_ipportnet6_test", "hash_ipportnet6_flush", "hash_netportnet4_add", "hash_netportnet4_del", "hash_netportnet4_test", "hash_netportnet4_flush", "hash_netportnet6_add", "hash_netportnet6_del", "hash_netportnet6_test", "hash_netportnet6_flush" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfSVBQT1JUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYXNoX25ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaGFzaCB0eXBlcyB0aGF0IHVzZSBuZXR3b3JrIHByZWZpeGVzIChDSURSKSBieSBpbnRyb2R1Y2luZyBhIHNlcWNvdW50IHRvIGd1YXJkIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgdGhlIHByZWZpeGVzIGFycmF5LiBUaGlzIGFmZmVjdHMgdGhlIGFkZCwgZGVsLCB0ZXN0LCBhbmQgZmx1c2ggb3BlcmF0aW9ucyBmb3Igc2V2ZXJhbCBoYXNoIHR5cGVzIChuZXQsIG5ldHBvcnQsIG5ldGlmYWNlLCBuZXRuZXQsIGlwcG9ydG5ldCwgbmV0cG9ydG5ldCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5ldGZpbHRlciBpcHNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyByZWFkZXIgbG9naWMgYW5kIGFycmF5IHNoaWZ0aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjEyMDY3ODllYjNkMWI1ODY3MDI5NTQwMjE5N2Y3MzA3ZGI2NmI2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDA6NDk6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IGYwMGM4MmFjZDdmMDUuLmVhNzJiOTc5NGY4ODAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VxbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXHUwMDNlXG4gXG5AQCAtOTgsMTQgJiM0Mzs5OSwzNCBAQCBzdHJ1Y3QgaHRhYmxlIHtcbiAjZGVmaW5lIElQU0VUX05FVF9DT1VOVFx0XHQxXG4gI2VuZGlmXG4gXG4tLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgbmV0X3ByZWZpeCAtIFJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBwcmVmaXguXG4mIzQzOyAqIEBjaWRyOiBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoLlxuJiM0MzsgKiBAY291bnQ6IE51bWJlciBvZiBvY2N1cnJlbmNlcy5cbiYjNDM7ICovXG4gc3RydWN0IG5ldF9wcmVmaXgge1xuLVx0dTggY2lkcjtcdFx0XHQvKiB0aGUgY2lkciB2YWx1ZSAqL1xuLVx0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbiYjNDM7XHR1MzIgY2lkcjo4O1xuJiM0MztcdHUzMiBjb3VudDoyNDtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIENJRFJfTUFYX0NPVU5UICgoMSBcdTAwM2NcdTAwM2MgMjQpIC0gMSlcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIC0gQSBjb2xsZWN0aW9uIG9mIG5ldHdvcmsgcHJlZml4ZXMuXG4mIzQzOyAqIEByY3U6IFJDVSBoZWFkXG4mIzQzOyAqIEBzZXE6IFNlcXVlbmNlIGNvdW50ZXIgZ3VhcmRpbmcgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiBAbmV0c1xuJiM0MzsgKiBAbGVuOiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkuXG4mIzQzOyAqIEBuZXRzOiBBcnJheSBvZiBuZXRfcHJlZml4IHN0cnVjdHVyZXMgKHNvcnRlZCBieSBDSURSIGRlc2NlbmRpbmcpLlxuJiM0MzsgKlxuJiM0MzsgKiBAbmV0cyBlbnRyaWVzIGFyZSB1cGRhdGVkIGluIHBsYWNlIHVuZGVyIEBzZXQmIzM5O3MgbG9jay4gQSBzaW5nbGUgZW50cnkmIzM5O3NcbiYjNDM7ICogY2lkci9jb3VudCBwYWlyIGlzIGFsd2F5cyB1cGRhdGVkIGF0b21pY2FsbHkgdmlhIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSxcbiYjNDM7ICogYnV0IHJlbW92aW5nIGFuIGVudHJ5IGFsc28gc2hpZnRzIGV2ZXJ5IGZvbGxvd2luZyBlbnRyeSBkb3duIGJ5IG9uZSBzbG90LlxuJiM0MzsgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlXG4mIzQzOyAqIGluZGV4ZWQgc2xvdCkgbXVzdCB1c2UgQHNlcSB0byBkZXRlY3QgYW5kIHJldHJ5IGFjcm9zcyBzdWNoIGEgc2hpZnQuXG4mIzQzOyAqL1xuIHN0cnVjdCBuZXRfcHJlZml4ZXMge1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiYjNDM7XHRzZXFjb3VudF9zcGlubG9ja190IHNlcTtcbiBcdHU4IGxlbjtcbiBcdHN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXSBfX2NvdW50ZWRfYnkobGVuKTtcbiB9O1xuQEAgLTE0Myw4ICYjNDM7MTY0LDExIEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNlbmRpZlxuIFxuICNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykgKHtcdFx0XHRcdFxcXG4tXHRjb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7XHRcdFxcXG4tXHREQ0lEUl9QVVQoKF9fbiktXHUwMDNlbGVuID8gKF9fbiktXHUwMDNlbmV0c1swXS5jaWRyIDogaG9zdF9tYXNrKTtcXFxuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTtcdFxcXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXggX19wID1cdFx0XHRcdFx0XFxcbiYjNDM7XHRcdF9fbi1cdTAwM2VsZW4gPyBSRUFEX09OQ0UoX19uLVx1MDAzZW5ldHNbMF0pXHRcdFxcXG4mIzQzO1x0XHRcdCA6IChzdHJ1Y3QgbmV0X3ByZWZpeCl7fTtcdFx0XFxcbiYjNDM7XHREQ0lEUl9QVVQoX19wLmNvdW50ID8gX19wLmNpZHIgOiBob3N0X21hc2spO1x0XHRcXFxuIH0pXG4gXG4gI2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xuQEAgLTMxOCwyNyAmIzQzOzM0Miw0MyBAQCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcbiB9O1xuIFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50XG4tICogc2l6ZWQgbmV0d29ya3MuIGNpZHIgPT0gcmVhbCBjaWRyICYjNDM7IDEgdG8gc3VwcG9ydCAvMC5cbiYjNDM7LyoqXG4mIzQzOyAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nXG4mIzQzOyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxuJiM0MzsgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGVcbiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGhcbiYjNDM7ICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byBhZGQgQGNpZHIgdG9cbiYjNDM7ICpcbiYjNDM7ICogUGVyZm9ybXMgYW4gdXBkYXRlIGlmIEBjaWRyIGlzIGZvdW5kLCBvdGhlcndpc2UgcGVyZm9ybXMgQ09XLXN0eWxlXG4mIzQzOyAqIGFsbG9jYXRpb24gYW5kIHJlcGxhY2VtZW50IHZpYSBSQ1UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4gc3RhdGljIGludFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4gXHRpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7XG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeCBucDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbiYjNDM7XHRcdGlmIChucC5jb3VudClcbiBcdFx0XHRsZW4mIzQzOyYjNDM7O1xuIFx0XHRpZiAoZm91bmQgIT0gLTEpIHtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciBcdTAwM2MgY2lkcikge1xuJiM0MztcdFx0fSBlbHNlIGlmIChucC5jaWRyIFx1MDAzYyBjaWRyKSB7XG4gXHRcdFx0Zm91bmQgPSBpO1xuLVx0XHR9IGVsc2UgaWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpIHtcbi1cdFx0XHRuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0fSBlbHNlIGlmIChucC5jaWRyID09IGNpZHIpIHtcbiYjNDM7XHRcdFx0aWYgKG5wLmNvdW50IFx1MDAzYyBDSURSX01BWF9DT1VOVCkge1xuJiM0MztcdFx0XHRcdG5wLmNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tpXSwgbnApO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FT1ZFUkZMT1c7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0fVxuQEAgLTM1MCw2ICYjNDM7MzkwLDcgQEAgbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4gXHR9XG4gXG4gXHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuJiM0MztcdHNlcWNvdW50X3NwaW5sb2NrX2luaXQoXHUwMDI2dG1wLVx1MDAzZXNlcSwgXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuIFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoaSA9PSBmb3VuZCkge1xuIFx0XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBjaWRyO1xuQEAgLTM3MSw0MiAmIzQzOzQxMiw2MCBAQCBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbXR5cGVfZGVsX2NpZHIgLSBSZW1vdmUgQ0lEUiBlbnRyeSBhbmQgbWFpbnRhaW4gYXJyYXkgaW50ZWdyaXR5LlxuJiM0MzsgKiBAc2V0OiBQb2ludGVyIHRvIHRoZSBpcF9zZXQuXG4mIzQzOyAqIEBoOiBQb2ludGVyIHRvIHRoZSBodHlwZS5cbiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGguXG4mIzQzOyAqIEBuOiBUaGUgaW5kZXggb2YgdGhlIG5ldF9wcmVmaXggYXJyYXkgdG8gcmVtb3ZlIEBjaWRyIGZyb21cbiYjNDM7ICpcbiYjNDM7ICogSWYgQ0lEUiBlbnRyeSBjb3VudCBmYWxscyB0byAwLCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgXCYjMzQ7c2hpZnQtbGVmdFwmIzM0O1xuJiM0MzsgKiBvcGVyYXRpb24gb24gYWxsIGZvbGxvd2luZyBlbGVtZW50cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IHJlbWFpbnNcbiYjNDM7ICogY29udGlndW91cyBhbmQgbWFpbnRhaW5zIGl0cyBkZXNjZW5kaW5nIG9yZGVyIGJ5IENJRFIuIFRoZSB2YWNhdGVkIHNsb3RcbiYjNDM7ICogYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgemVyb2VkIG91dCAoY2lkcj0wLCBjb3VudD0wKS5cbiYjNDM7ICovXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuLVx0dTggaSwgaiwgbGVuID0gMDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4IG5wO1xuIFx0aW50IGZvdW5kO1xuJiM0MztcdHU4IGksIGo7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpICE9IHNpemVvZih1MzIpKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuLVx0XHRcdGxlbiYjNDM7JiM0Mzs7XG4tXHRcdGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciA9PSBjaWRyKVxuJiM0MztcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbiYjNDM7XHRcdGlmIChucC5jb3VudCBcdTAwMjZcdTAwMjYgbnAuY2lkciA9PSBjaWRyKSB7XG4mIzQzO1x0XHRcdG5wLmNvdW50LS07XG4gXHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdGlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0bmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudC0tO1xuLVx0aWYgKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuLVx0bGVuLS07XG4tXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghdG1wKVxuLVx0XHQvKiBMZWF2ZSBhIGhvbGUgKi9cbiYjNDM7XHRpZiAobnAuY291bnQpIHtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXSwgbnApO1xuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXG4tXHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuJiM0MztcdHdyaXRlX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5ldHMtXHUwMDNlc2VxKTtcbiBcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQgfHwgaSA9PSBmb3VuZClcbiYjNDM7XHRcdGlmIChpID09IGZvdW5kKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4tXHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiYjNDM7XG4mIzQzO1x0XHRucCA9IFJFQURfT05DRShuZXRzLVx1MDAzZW5ldHNbaV0pO1xuJiM0MztcdFx0aWYgKGkgIT0gailcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShuZXRzLVx1MDAzZW5ldHNbal0sIG5wKTtcbiYjNDM7XHRcdGomIzQzOyYjNDM7O1xuIFx0fVxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbbl0sIHRtcCk7XG4tXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuKVxuJiM0MztcdFx0V1JJVEVfT05DRShuZXRzLVx1MDAzZW5ldHNbaiYjNDM7JiM0MztdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xuJiM0MztcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuIH1cbkBAIC00NTEsNyAmIzQzOzUxMCw3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaHRhYmxlICp0O1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG5AQCAtNDc3LDE3ICYjNDM7NTM2LDE1IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBcdH1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuLVx0XHR0bXAgPSBremFsbG9jX29iaigqdG1wLCBHRlBfQVRPTUlDKTtcbi1cdFx0aWYgKCF0bXApIHtcbi1cdFx0XHR1OCBqO1xuJiM0MztcdFx0dTggajtcbiBcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaiYjNDM7JiM0MzspXG4tXHRcdFx0XHRuZXRzLVx1MDAzZW5ldHNbal0uY291bnQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVx1MDAzZXJuZXRzW2ldLCB0bXApO1xuLVx0XHRcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuLVx0XHR9XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC1cdTAwM2VybmV0c1tpXSk7XG4mIzQzO1x0XHR3cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobmV0cy1cdTAwM2VuZXRzW2pdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xuJiM0MztcdFx0d3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNm5ldHMtXHUwMDNlc2VxKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdH1cbiAjZW5kaWZcbiB9XG5AQCAtMTI1MywzMSAmIzQzOzEzMTAsNDEgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuIFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcTE7XG4gXHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4gXHRpbnQgcmV0LCBpLCBqO1xuICNlbmRpZlxuLVx0dTMyIGtleSwgbXVsdGkgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBzZXEwO1xuJiM0MztcdHUzMiBrZXksIG11bHRpO1xuIFx0dTggcG9zO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7dGVzdCBieSBuZXRzXFxuXCYjMzQ7KTtcbiBcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7cmV0cnk6XG4mIzQzO1x0bXVsdGkgPSAwO1xuIFx0bmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1swXSk7XG4mIzQzO1x0c2VxMCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0czAtXHUwMDNlc2VxKTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMV0pO1xuJiM0MztcdHNlcTEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5ldHMxLVx1MDAzZXNlcSk7XG4gI2VuZGlmXG4gXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaiYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFuZXRzMC1cdTAwM2VuZXRzW2pdLmNvdW50KVxuJiM0MztcdFx0c3RydWN0IG5ldF9wcmVmaXggcDAgPSBSRUFEX09OQ0UobmV0czAtXHUwMDNlbmV0c1tqXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwMC5jb3VudClcbiBcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XG4mIzQzO1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgcDAuY2lkciwgZmFsc2UpO1xuIFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBuZXRzMS1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgayYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAoIW5ldHMxLVx1MDAzZW5ldHNba10uY291bnQpXG4mIzQzO1x0XHRcdHN0cnVjdCBuZXRfcHJlZml4IHAxID0gUkVBRF9PTkNFKG5ldHMxLVx1MDAzZW5ldHNba10pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFwMS5jb3VudClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cdTAwM2VuZXRzW2tdLmNpZHIsIHRydWUpO1xuJiM0MztcdFx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgcDEuY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkcik7XG4mIzQzO1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgcDAuY2lkcik7XG4gI2VuZGlmXG4gXHRcdGtleSA9IEhLRVkoZCwgaC1cdTAwM2Vpbml0dmFsLCB0LVx1MDAzZWh0YWJsZV9iaXRzKTtcbiBcdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xuQEAgLTEzMDIsNiAmIzQzOzEzNjksMTMgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHR9XG4gI2VuZGlmXG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNm5ldHMwLVx1MDAzZXNlcSwgc2VxMCkpXG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MzsjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiYjNDM7XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZuZXRzMS1cdTAwM2VzZXEsIHNlcTEpKVxuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7I2VuZGlmXG4gXHRyZXQgPSAwO1xuIHVubG9jazpcbiBcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuQEAgLTE3MDcsNiAmIzQzOzE3ODEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHRcdFx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcmF3KGgtXHUwMDNlcm5ldHNbLS1pXSkpO1xuIFx0XHRcdGdvdG8gZnJlZV9ocmVnaW9uO1xuIFx0XHR9XG4mIzQzO1x0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNm5ldHMtXHUwMDNlc2VxLCBcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2VybmV0c1tpXSwgbmV0cyk7XG4gXHR9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbkBAIC0zOCw3ICYjNDM7MzgsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LGlmYWNlXCYjMzQ7KTtcbiAjZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0aWZhY2VcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwXG4gXG4gI2RlZmluZSBTVFJTQ1BZKGEsIGIpXHRzdHJzY3B5KGEsIGIsIElGTkFNU0laKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbmluZGV4IDYyOTE1MzJiZTdhNWEuLjYxYWYxY2UyNzEyNzkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbkBAIC0zNiw3ICYjNDM7MzYsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0XCYjMzQ7KTtcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuIFxuIC8qIElQdjQgdmFyaWFudCAqL1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGlwc2V0IGhhc2ggdHlwZXMgdGhhdCB1c2UgbmV0d29yayBwcmVmaXhlcyAoQ0lEUikgYnkgaW50cm9kdWNpbmcgYSBzZXFjb3VudCB0byBndWFyZCBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIHRoZSBwcmVmaXhlcyBhcnJheS4gVGhpcyBhZmZlY3RzIHRoZSBhZGQsIGRlbCwgdGVzdCwgYW5kIGZsdXNoIG9wZXJhdGlvbnMgZm9yIHNldmVyYWwgaGFzaCB0eXBlcyAobmV0LCBuZXRwb3J0LCBuZXRpZmFjZSwgbmV0bmV0LCBpcHBvcnRuZXQsIG5ldHBvcnRuZXQpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZXRmaWx0ZXIgaXBzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3MgcmVhZGVyIGxvZ2ljIGFuZCBhcnJheSBzaGlmdGluZyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIxMjA2Nzg5ZWIzZDFiNTg2NzAyOTU0MDIxOTdmNzMwN2RiNjZiNjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDAwOjQ5OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKaW5kZXggZjAwYzgyYWNkN2YwNS4uZWE3MmI5Nzk0Zjg4MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvamhhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXFsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCZndDsKIApAQCAtOTgsMTQgJiM0Mzs5OSwzNCBAQCBzdHJ1Y3QgaHRhYmxlIHsKICNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UCQkxCiAjZW5kaWYKIAotLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IG5ldF9wcmVmaXggLSBSZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgcHJlZml4LgomIzQzOyAqIEBjaWRyOiBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoLgomIzQzOyAqIEBjb3VudDogTnVtYmVyIG9mIG9jY3VycmVuY2VzLgomIzQzOyAqLwogc3RydWN0IG5ldF9wcmVmaXggewotCXU4IGNpZHI7CQkJLyogdGhlIGNpZHIgdmFsdWUgKi8KLQl1MzIgY291bnQ7CQkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqLwomIzQzOwl1MzIgY2lkcjo4OwomIzQzOwl1MzIgY291bnQ6MjQ7CiB9OwogCiYjNDM7I2RlZmluZSBDSURSX01BWF9DT1VOVCAoKDEgJmx0OyZsdDsgMjQpIC0gMSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIC0gQSBjb2xsZWN0aW9uIG9mIG5ldHdvcmsgcHJlZml4ZXMuCiYjNDM7ICogQHJjdTogUkNVIGhlYWQKJiM0MzsgKiBAc2VxOiBTZXF1ZW5jZSBjb3VudGVyIGd1YXJkaW5nIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgQG5ldHMKJiM0MzsgKiBAbGVuOiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkuCiYjNDM7ICogQG5ldHM6IEFycmF5IG9mIG5ldF9wcmVmaXggc3RydWN0dXJlcyAoc29ydGVkIGJ5IENJRFIgZGVzY2VuZGluZykuCiYjNDM7ICoKJiM0MzsgKiBAbmV0cyBlbnRyaWVzIGFyZSB1cGRhdGVkIGluIHBsYWNlIHVuZGVyIEBzZXQmIzM5O3MgbG9jay4gQSBzaW5nbGUgZW50cnkmIzM5O3MKJiM0MzsgKiBjaWRyL2NvdW50IHBhaXIgaXMgYWx3YXlzIHVwZGF0ZWQgYXRvbWljYWxseSB2aWEgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpLAomIzQzOyAqIGJ1dCByZW1vdmluZyBhbiBlbnRyeSBhbHNvIHNoaWZ0cyBldmVyeSBmb2xsb3dpbmcgZW50cnkgZG93biBieSBvbmUgc2xvdC4KJiM0MzsgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlCiYjNDM7ICogaW5kZXhlZCBzbG90KSBtdXN0IHVzZSBAc2VxIHRvIGRldGVjdCBhbmQgcmV0cnkgYWNyb3NzIHN1Y2ggYSBzaGlmdC4KJiM0MzsgKi8KIHN0cnVjdCBuZXRfcHJlZml4ZXMgewogCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXNlcWNvdW50X3NwaW5sb2NrX3Qgc2VxOwogCXU4IGxlbjsKIAlzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7CiB9OwpAQCAtMTQzLDggJiM0MzsxNjQsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpCiAjZW5kaWYKIAogI2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoewkJCQlcCi0JY29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pOwkJXAotCURDSURSX1BVVCgoX19uKS0mZ3Q7bGVuID8gKF9fbiktJmd0O25ldHNbMF0uY2lkciA6IGhvc3RfbWFzayk7XAomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7CVwKJiM0MzsJc3RydWN0IG5ldF9wcmVmaXggX19wID0JCQkJCVwKJiM0MzsJCV9fbi0mZ3Q7bGVuID8gUkVBRF9PTkNFKF9fbi0mZ3Q7bmV0c1swXSkJCVwKJiM0MzsJCQkgOiAoc3RydWN0IG5ldF9wcmVmaXgpe307CQlcCiYjNDM7CURDSURSX1BVVChfX3AuY291bnQgPyBfX3AuY2lkciA6IGhvc3RfbWFzayk7CQlcCiB9KQogCiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovCkBAIC0zMTgsMjcgJiM0MzszNDIsNDMgQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7CiB9OwogCiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCi0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50Ci0gKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgJiM0MzsgMSB0byBzdXBwb3J0IC8wLgomIzQzOy8qKgomIzQzOyAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nCiYjNDM7ICogQHNldDogUG9pbnRlciB0byB0aGUgaXBfc2V0CiYjNDM7ICogQGg6IFBvaW50ZXIgdG8gdGhlIGh0eXBlCiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGgKJiM0MzsgKiBAbjogVGhlIGluZGV4IG9mIHRoZSBuZXRfcHJlZml4IGFycmF5IHRvIGFkZCBAY2lkciB0bwomIzQzOyAqCiYjNDM7ICogUGVyZm9ybXMgYW4gdXBkYXRlIGlmIEBjaWRyIGlzIGZvdW5kLCBvdGhlcndpc2UgcGVyZm9ybXMgQ09XLXN0eWxlCiYjNDM7ICogYWxsb2NhdGlvbiBhbmQgcmVwbGFjZW1lbnQgdmlhIFJDVS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogewotCXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7CiAJaW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeCBucDsKIAogCXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJbmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC0mZ3Q7cm5ldHNbbl0pOwogCS8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi8KIAlmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpICZsdDsgbmV0cy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykgewotCQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCW5wID0gUkVBRF9PTkNFKG5ldHMtJmd0O25ldHNbaV0pOwomIzQzOwkJaWYgKG5wLmNvdW50KQogCQkJbGVuJiM0MzsmIzQzOzsKIAkJaWYgKGZvdW5kICE9IC0xKSB7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChuZXRzLSZndDtuZXRzW2ldLmNpZHIgJmx0OyBjaWRyKSB7CiYjNDM7CQl9IGVsc2UgaWYgKG5wLmNpZHIgJmx0OyBjaWRyKSB7CiAJCQlmb3VuZCA9IGk7Ci0JCX0gZWxzZSBpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jaWRyID09IGNpZHIpIHsKLQkJCW5ldHMtJmd0O25ldHNbaV0uY291bnQmIzQzOyYjNDM7OwomIzQzOwkJfSBlbHNlIGlmIChucC5jaWRyID09IGNpZHIpIHsKJiM0MzsJCQlpZiAobnAuY291bnQgJmx0OyBDSURSX01BWF9DT1VOVCkgewomIzQzOwkJCQlucC5jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkJCVdSSVRFX09OQ0UobmV0cy0mZ3Q7bmV0c1tpXSwgbnApOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXJldCA9IC1FT1ZFUkZMT1c7CiYjNDM7CQkJfQogCQkJZ290byB1bmxvY2s7CiAJCX0KIAl9CkBAIC0zNTAsNiAmIzQzOzM5MCw3IEBAIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogCX0KIAogCXRtcC0mZ3Q7bGVuID0gbGVuOwomIzQzOwlzZXFjb3VudF9zcGlubG9ja19pbml0KCZhbXA7dG1wLSZndDtzZXEsICZhbXA7c2V0LSZndDtsb2NrKTsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGkgPT0gZm91bmQpIHsKIAkJCXRtcC0mZ3Q7bmV0c1tqXS5jaWRyID0gY2lkcjsKQEAgLTM3MSw0MiAmIzQzOzQxMiw2MCBAQCBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogbXR5cGVfZGVsX2NpZHIgLSBSZW1vdmUgQ0lEUiBlbnRyeSBhbmQgbWFpbnRhaW4gYXJyYXkgaW50ZWdyaXR5LgomIzQzOyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldC4KJiM0MzsgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGUuCiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGguCiYjNDM7ICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byByZW1vdmUgQGNpZHIgZnJvbQomIzQzOyAqCiYjNDM7ICogSWYgQ0lEUiBlbnRyeSBjb3VudCBmYWxscyB0byAwLCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgJiMzNDtzaGlmdC1sZWZ0JiMzNDsKJiM0MzsgKiBvcGVyYXRpb24gb24gYWxsIGZvbGxvd2luZyBlbGVtZW50cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IHJlbWFpbnMKJiM0MzsgKiBjb250aWd1b3VzIGFuZCBtYWludGFpbnMgaXRzIGRlc2NlbmRpbmcgb3JkZXIgYnkgQ0lEUi4gVGhlIHZhY2F0ZWQgc2xvdAomIzQzOyAqIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5IGlzIHplcm9lZCBvdXQgKGNpZHI9MCwgY291bnQ9MCkuCiYjNDM7ICovCiBzdGF0aWMgdm9pZAogbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pCiB7Ci0Jc3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDsKLQl1OCBpLCBqLCBsZW4gPSAwOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeCBucDsKIAlpbnQgZm91bmQ7CiYjNDM7CXU4IGksIGo7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpICE9IHNpemVvZih1MzIpKTsKIAogCXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJbmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC0mZ3Q7cm5ldHNbbl0pOwogCWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChuZXRzLSZndDtuZXRzW2ldLmNvdW50KQotCQkJbGVuJiM0MzsmIzQzOzsKLQkJaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKQomIzQzOwkJbnAgPSBSRUFEX09OQ0UobmV0cy0mZ3Q7bmV0c1tpXSk7CiYjNDM7CQlpZiAobnAuY291bnQgJmFtcDsmYW1wOyBucC5jaWRyID09IGNpZHIpIHsKJiM0MzsJCQlucC5jb3VudC0tOwogCQkJZm91bmQgPSBpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAlpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKQogCQlnb3RvIHVubG9jazsKIAotCW5ldHMtJmd0O25ldHNbZm91bmRdLmNvdW50LS07Ci0JaWYgKG5ldHMtJmd0O25ldHNbZm91bmRdLmNvdW50KQotCQlnb3RvIHVubG9jazsKLQlsZW4tLTsKLQl0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXRtcCkKLQkJLyogTGVhdmUgYSBob2xlICovCiYjNDM7CWlmIChucC5jb3VudCkgewomIzQzOwkJV1JJVEVfT05DRShuZXRzLSZndDtuZXRzW2ZvdW5kXSwgbnApOwogCQlnb3RvIHVubG9jazsKJiM0MzsJfQogCi0JdG1wLSZndDtsZW4gPSBsZW47CiYjNDM7CXdyaXRlX3NlcWNvdW50X2JlZ2luKCZhbXA7bmV0cy0mZ3Q7c2VxKTsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKCFuZXRzLSZndDtuZXRzW2ldLmNvdW50IHx8IGkgPT0gZm91bmQpCiYjNDM7CQlpZiAoaSA9PSBmb3VuZCkKIAkJCWNvbnRpbnVlOwotCQl0bXAtJmd0O25ldHNbal0uY2lkciA9IG5ldHMtJmd0O25ldHNbaV0uY2lkcjsKLQkJdG1wLSZndDtuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtJmd0O25ldHNbaV0uY291bnQ7CiYjNDM7CiYjNDM7CQlucCA9IFJFQURfT05DRShuZXRzLSZndDtuZXRzW2ldKTsKJiM0MzsJCWlmIChpICE9IGopCiYjNDM7CQkJV1JJVEVfT05DRShuZXRzLSZndDtuZXRzW2pdLCBucCk7CiYjNDM7CQlqJiM0MzsmIzQzOzsKIAl9Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGgtJmd0O3JuZXRzW25dLCB0bXApOwotCWtmcmVlX3JjdShuZXRzLCByY3UpOwomIzQzOwomIzQzOwl3aGlsZSAoaiAmbHQ7IG5ldHMtJmd0O2xlbikKJiM0MzsJCVdSSVRFX09OQ0UobmV0cy0mZ3Q7bmV0c1tqJiM0MzsmIzQzO10sIChzdHJ1Y3QgbmV0X3ByZWZpeCl7fSk7CiYjNDM7CXdyaXRlX3NlcWNvdW50X2VuZCgmYW1wO25ldHMtJmd0O3NlcSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwogfQpAQCAtNDUxLDcgJiM0Mzs1MTAsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwotCXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7CiAjZW5kaWYKIAlzdHJ1Y3QgaHRhYmxlICp0OwogCXN0cnVjdCBoYnVja2V0ICpuOwpAQCAtNDc3LDE3ICYjNDM7NTM2LDE1IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIAl9CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiAJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKLQkJbmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC0mZ3Q7cm5ldHNbaV0pOwotCQl0bXAgPSBremFsbG9jX29iaigqdG1wLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCF0bXApIHsKLQkJCXU4IGo7CiYjNDM7CQl1OCBqOwogCi0JCQlmb3IgKGogPSAwOyBqICZsdDsgbmV0cy0mZ3Q7bGVuOyBqJiM0MzsmIzQzOykKLQkJCQluZXRzLSZndDtuZXRzW2pdLmNvdW50ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJjdV9hc3NpZ25fcG9pbnRlcihoLSZndDtybmV0c1tpXSwgdG1wKTsKLQkJCWtmcmVlX3JjdShuZXRzLCByY3UpOwotCQl9CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwkJbmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC0mZ3Q7cm5ldHNbaV0pOwomIzQzOwkJd3JpdGVfc2VxY291bnRfYmVnaW4oJmFtcDtuZXRzLSZndDtzZXEpOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IG5ldHMtJmd0O2xlbjsgaiYjNDM7JiM0MzspCiYjNDM7CQkJV1JJVEVfT05DRShuZXRzLSZndDtuZXRzW2pdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pOwomIzQzOwkJd3JpdGVfc2VxY291bnRfZW5kKCZhbXA7bmV0cy0mZ3Q7c2VxKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKIAl9CiAjZW5kaWYKIH0KQEAgLTEyNTMsMzEgJiM0MzsxMzEwLDQxIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgogCXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxOwogCXN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDsKJiM0MzsJdW5zaWduZWQgaW50IHNlcTE7CiAJaW50IHJldCwgaSwgaiwgazsKICNlbHNlCiAJaW50IHJldCwgaSwgajsKICNlbmRpZgotCXUzMiBrZXksIG11bHRpID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHNlcTA7CiYjNDM7CXUzMiBrZXksIG11bHRpOwogCXU4IHBvczsKIAogCXByX2RlYnVnKCYjMzQ7dGVzdCBieSBuZXRzXG4mIzM0Oyk7CiAJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzO3JldHJ5OgomIzQzOwltdWx0aSA9IDA7CiAJbmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMF0pOwomIzQzOwlzZXEwID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO25ldHMwLSZndDtzZXEpOwogI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyCiAJbmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMV0pOwomIzQzOwlzZXExID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO25ldHMxLSZndDtzZXEpOwogI2VuZGlmCiAJZm9yIChqID0gMDsgaiAmbHQ7IG5ldHMwLSZndDtsZW4gJmFtcDsmYW1wOyAhbXVsdGk7IGomIzQzOyYjNDM7KSB7Ci0JCWlmICghbmV0czAtJmd0O25ldHNbal0uY291bnQpCiYjNDM7CQlzdHJ1Y3QgbmV0X3ByZWZpeCBwMCA9IFJFQURfT05DRShuZXRzMC0mZ3Q7bmV0c1tqXSk7CiYjNDM7CiYjNDM7CQlpZiAoIXAwLmNvdW50KQogCQkJY29udGludWU7CiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKIAkJbXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsICZhbXA7b3JpZyk7Ci0JCW10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC0mZ3Q7bmV0c1tqXS5jaWRyLCBmYWxzZSk7CiYjNDM7CQltdHlwZV9kYXRhX25ldG1hc2soZCwgcDAuY2lkciwgZmFsc2UpOwogCQlmb3IgKGsgPSAwOyBrICZsdDsgbmV0czEtJmd0O2xlbiAmYW1wOyZhbXA7ICFtdWx0aTsgayYjNDM7JiM0MzspIHsKLQkJCWlmICghbmV0czEtJmd0O25ldHNba10uY291bnQpCiYjNDM7CQkJc3RydWN0IG5ldF9wcmVmaXggcDEgPSBSRUFEX09OQ0UobmV0czEtJmd0O25ldHNba10pOwomIzQzOwomIzQzOwkJCWlmICghcDEuY291bnQpCiAJCQkJY29udGludWU7Ci0JCQltdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtJmd0O25ldHNba10uY2lkciwgdHJ1ZSk7CiYjNDM7CQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAxLmNpZHIsIHRydWUpOwogI2Vsc2UKLQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLSZndDtuZXRzW2pdLmNpZHIpOwomIzQzOwkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAwLmNpZHIpOwogI2VuZGlmCiAJCWtleSA9IEhLRVkoZCwgaC0mZ3Q7aW5pdHZhbCwgdC0mZ3Q7aHRhYmxlX2JpdHMpOwogCQluID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7CkBAIC0xMzAyLDYgJiM0MzsxMzY5LDEzIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKIAkJfQogI2VuZGlmCiAJfQomIzQzOwomIzQzOwlpZiAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO25ldHMwLSZndDtzZXEsIHNlcTApKQomIzQzOwkJZ290byByZXRyeTsKJiM0MzsjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKJiM0MzsJaWYgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtuZXRzMS0mZ3Q7c2VxLCBzZXExKSkKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7I2VuZGlmCiAJcmV0ID0gMDsKIHVubG9jazoKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKQEAgLTE3MDcsNiAmIzQzOzE3ODEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJCQkJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLSZndDtybmV0c1stLWldKSk7CiAJCQlnb3RvIGZyZWVfaHJlZ2lvbjsKIAkJfQomIzQzOwkJc2VxY291bnRfc3BpbmxvY2tfaW5pdCgmYW1wO25ldHMtJmd0O3NlcSwgJmFtcDtzZXQtJmd0O2xvY2spOwogCQlSQ1VfSU5JVF9QT0lOVEVSKGgtJmd0O3JuZXRzW2ldLCBuZXRzKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYwppbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCkBAIC0zOCw3ICYjNDM7MzgsNiBAQCBNT0RVTEVfQUxJQVMoJiMzNDtpcF9zZXRfaGFzaDpuZXQsaWZhY2UmIzM0Oyk7CiAjZGVmaW5lIEhUWVBFCQloYXNoX25ldGlmYWNlCiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUUwogI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01VTFRJCi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMAogCiAjZGVmaW5lIFNUUlNDUFkoYSwgYikJc3Ryc2NweShhLCBiLCBJRk5BTVNJWikKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwppbmRleCA2MjkxNTMyYmU3YTVhLi42MWFmMWNlMjcxMjc5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwpAQCAtMzYsNyAmIzQzOzM2LDYgQEAgTU9EVUxFX0FMSUFTKCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0JiMzNDspOwogI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPCiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUUwogI2RlZmluZSBJUFNFVF9ORVRfQ09VTlQgMgotI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVDAKIAogLyogSVB2NCB2YXJpYW50ICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwc2V0IFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGEgZmV3IGZpbGVzIGluIHRoZSBgbmV0ZmlsdGVyL2lwc2V0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AsIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBgc2VxY291bnRfc3BpbmxvY2tfdGAgdG8gcHJvdGVjdCBzb21lIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgYG5ldHNgIHdpdGhpbiBgc3RydWN0IG5ldF9wcmVmaXhlc2AuIFRoYXQgc2lnbmFscyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJuIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcsIHdoaWNoIGlzIHdvcnRoIGtlZXBpbmcgaW4gbWluZC4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgaG93IGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGFuZCBgbXR5cGVfdGVzdF9jaWRyc2AgZnVuY3Rpb24uIEFuZCBpdCBzZWVtcyB0byBiZSByZW1vdmluZyBgI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVDBgIGZyb20gdGhvc2UgbGFzdCB0d28gYC5jYCBmaWxlcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEdpdmVuIHRoYXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgbmV0ZmlsdGVyIGlwc2V0IGluZnJhc3RydWN0dXJlLCBhbmQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGFzaCB0eXBlcyBpbiBwYXJ0aWN1bGFyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIGBpcF9zZXRfaGFzaF9nZW4uaGAgaXMgYSB0ZW1wbGF0ZSBoZWFkZXIsIHNvIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB0aGVyZSB3aWxsIGdldCBpbnN0YW50aWF0ZWQgYWNyb3NzIG11bHRpcGxlIGBpcF9zZXRfaGFzaF8qLmNgIGZpbGVzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYW5kIGBtdHlwZV90ZXN0X2NpZHJzYC4gVGhleSYjMzk7cmUgc3RhdGljIHdpdGhpbiBhIGhlYWRlciwgbWVhbmluZyB0aGV5JiMzOTtsbCBtYW5pZmVzdCBhcyBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXRfYWRkX2NpZHJgLCBgaGFzaF9uZXRwb3J0X2FkZF9jaWRyYCwgZXRjLgoKV2FpdCwgYG10eXBlX2FkZF9jaWRyYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IG10eXBlX2FkZF9jaWRyKC4uLilgLiBTaW5jZSBpdCYjMzk7cyBpbiBhIGhlYWRlciwgaXQmIzM5O3MgaW5jbHVkZWQgaW4gbXVsdGlwbGUgQyBmaWxlcy4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBzZWUgaG93IGBtdHlwZV9hZGRfY2lkcmAgZ2V0cyB1c2VkLiBBaCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgLiBSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBoZWFkZXIgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlIHRoYXQgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkX2NpZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOS0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjEtI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfY2xlYW51cClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMzNT1zdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzQ2OiAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0Ny0gKiBAc2V0OiBQb2ludGVyIHRvIHRoZSBpcF9zZXRcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM1Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM1ODptdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTE0Olx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgSVBTRVQgSW5zdGFudGlhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIElQU0VUIHRva2Vucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5JiMzOTtyZSBpbnN0YW50aWF0ZWQuIFRoZSBjb2RlJiMzOTtzIHVzaW5nIGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgdGhpcyBgTVRZUEVgIGlzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgaGVyZS4gVW5kZXJzdGFuZGluZyBgTVRZUEVgIHdpbGwgZ2l2ZSB1cyB0aGUgY29udGV4dCBmb3IgaG93IHRoaXMgcGFydGljdWxhciBDSURSIGFkZGl0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBicm9hZGVyIElQU0VUIGZyYW1ld29yay4gSXTigJlzIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgcHVycG9zZSBvZiB0aGUgaW5zdGFudGlhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZSBvciB0eXBlIGBNVFlQRWAgcmVwcmVzZW50cy4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI4PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNDojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM1LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjI9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNjktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcwOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzEtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzE9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzktI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI1PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM0OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM1LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMyOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFNldCBIYXNoIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgSVAgc2V0IGhhc2ggdHlwZXMuIEl0IHNlZW1zIGBNVFlQRWAgaXMgYSBwbGFjZWhvbGRlciwgYW5kIGl0IGV4cGFuZHMgdG8gYSBidW5jaCBvZiBkaWZmZXJlbnQgdmFyaWF0aW9uczogYGhhc2hfbmV0NGAsIGBoYXNoX25ldDZgLCBgaGFzaF9uZXRwb3J0NGAsIGBoYXNoX25ldHBvcnQ2YCwgYW5kIHRoZSBsaWtlLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRpZmZlcmVudCBhZGRyZXNzIHR5cGVzIGFuZCBwb3J0IGNvbWJpbmF0aW9ucy4gVGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSBuYW1lZCBhY2NvcmRpbmdseSwgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYW5kIHNvIG9uLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBmYXIuCgpXYWl0LCBJIG5lZWQgdG8gem9vbSBpbiBoZXJlIGZvciBhIG1vbWVudC4uLiBpdCBsb29rcyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoYXQmIzM5O3Mgbm90IGV4cG9zZWQgZXh0ZXJuYWxseSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNvIHRoZSBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgcGFydCBvZiB0aGUgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCwgYXJlIGFjdHVhbGx5IGBoYXNoX25ldDRfa2FkdGAsIGBoYXNoX25ldDRfdWFkdGAsIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCkkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IGBtdHlwZV9hZGRgIGlzIGRlZmluZWQgdG8gY2xhcmlmeSB0aGVzZSBudWFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2FkZFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA0LVx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1Olx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjk4ODptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTg5LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjQxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaXBfc2V0X3R5cGVfdmFyaWFudGAgRXhwb3J0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gZXhwb3J0cyBhc3NvY2lhdGVkIHdpdGggYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gd2hhdCYjMzk7cyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS4gV2hhdCBtZXRob2RzIGFyZSAqbWVhbnQqIHRvIGJlIGNhbGxlZCB0aHJvdWdoIHRoYXQgaW50ZXJmYWNlPyBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgSVAgc2V0IGZyYW1ld29yaywgd2hpY2ggaXMgd2h5IHdlIGFyZSBsb29raW5nIGhlcmUuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZWZpbmluZyB0aGUgYmVoYXZpb3Igb2YgZGlmZmVyZW50IElQIHNldCB0eXBlcywgc28gdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBNeSBmb2N1cyB3aWxsIGJlIHRvIGlkZW50aWZ5IHRoZSBtZXRob2RzIHRoYXQgZW5hYmxlIGRpZmZlcmVudCB0eXBlcyBvZiBJUCBzZXRzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipJbml0aWFsaXphdGlvbiBhbmQgRGVzdHJ1Y3Rpb246KiogSG93IGFyZSB0aGVzZSBJUCBzZXQgdHlwZXMgaW5zdGFudGlhdGVkIGFuZCBjbGVhbmVkIHVwPyBBcmUgdGhlcmUgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgZGlmZmVyZW50IHR5cGVzPwoqICAgKipJbnNlcnRpb24gYW5kIERlbGV0aW9uOioqIEhvdyBhcmUgSVAgYWRkcmVzc2VzIG9yIG5ldHdvcmtzIGFkZGVkIHRvIGFuZCByZW1vdmVkIGZyb20gdGhlc2Ugc2V0cz8gSSYjMzk7bSBiZXR0aW5nIHRoZXJlJiMzOTtzIGEgcG9seW1vcnBoaWMgYXNwZWN0IGhlcmUuCiogICAqKk1lbWJlcnNoaXAgQ2hlY2tpbmc6KiogSXMgdGhlIEFQSSBwcm92aWRlZCB0byBjaGVjayBpZiBhbiBJUCBhZGRyZXNzIG9yIG5ldHdvcmsgaXMgcHJlc2VudCBpbiBhIHNldD8gSG93IGVmZmljaWVudCBpcyB0aGlzPwoqICAgKipJdGVyYXRpb246KiogQ2FuIEkgaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhbiBJUCBzZXQgb2YgdGhpcyB0eXBlPyBXaGF0JiMzOTtzIHRoZSBpbnRlcmZhY2UgZm9yIHRoYXQ/CiogICAqKlBlcnNpc3RlbmNlL1NlcmlhbGl6YXRpb246KiogSG93IGFyZSB0aGUgSVAgc2V0cyBzYXZlZCBhbmQgcmVzdG9yZWQ/IFdoYXQgZGF0YSBmb3JtYXRzIGFyZSB0aGV5IHVzaW5nPwoqICAgKipJbnRlcm5hbCBEZXRhaWxzOioqIEFueSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgbWVtb3J5IG9yIHNwZWNpYWwgdHlwZXMuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IEkgbmVlZCB0byBiZSBhYmxlIHRvIGV2YWx1YXRlIHRoaXMgY29kZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgZWZmaWNpZW5jeS4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIHVzZWQgaW4gdGhlIGtlcm5lbC4gRmluYWxseSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHN0YW5kYXJkIEFQSSwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODYwCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIGBtdHlwZV92YXJpYW50YCBEZWZpbml0aW9uKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYG10eXBlX3ZhcmlhbnRgIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIGZvdW5kYXRpb24sIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgdGhpbmcgKmlzKi4gSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaXRzIHN0cnVjdHVyZSwgaXRzIHByb3BlcnRpZXMsIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgc3lzdGVtIG9yIGNvZGUgYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGNvbXBvbmVudHMuIElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmU/IEFuIGFic3RyYWN0IGNvbmNlcHQ/IEhvdyBkb2VzIGl0IHJlbGF0ZSB0byBvdGhlciAqbXR5cGUqIGRlZmluaXRpb25zLCBvciBvdGhlciB2YXJpYW50cz8gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSAtIGlzIGl0IGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGdlbmVyaWNzIG9yIHBvbHltb3JwaGlzbT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGVmaW5pdGlvbiBpdHNlbGY/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgbXR5cGVfdmFyaWFudGAgRGVmaW5pdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIHRob3VnaHQgcHJvY2VzcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGhlcmUuIFRoZSBjb3JlIG9mIG15IGN1cnJlbnQgd29yayBpbnZvbHZlcyB1bmRlcnN0YW5kaW5nIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBsZXZlcmFnaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGBtdHlwZV92YXJpYW50YC4gU28sIG5hdHVyYWxseSwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBjcnlzdGFsLWNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBpdCAqaXMqLiBUaGF0IG1lYW5zIHRoZSBkZWZpbml0aW9uIGlzIHBhcmFtb3VudC4gSSYjMzk7bSBnb2luZyB0byBwb3JlIG92ZXIgaXQsIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHN0cnVjdHVyZSwgYW55IGFzc29jaWF0ZWQgY29uc3RyYWludHMgb3IgcHJlY29uZGl0aW9ucywgYW5kIGVzcGVjaWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLCBub3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgb3ZlcnZpZXcuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBmb3IgdHlwZSBzYWZldHksIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcGVyZm9ybWFuY2Ugb25jZSBJJiMzOTttIGxvb2tpbmcgYXQgaXQuIFVsdGltYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgbGV2ZWwgb2YgZGV0YWlsIHRoYXQgYWxsb3dzIGZvciBjb25maWRlbnQgZGVjaXNpb24tbWFraW5nIHJlZ2FyZGluZyBpdHMgYXBwbGljYXRpb24gb3IgcG90ZW50aWFsIHJlZmFjdG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbjE2MzM6XHRcdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4xNjM0Olx0XHQudWFkdFx0PSBtdHlwZV91YWR0LFxuMTYzNTpcdFx0LmFkdFx0PSB7XG4xNjM2Olx0XHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxuMTYzNzpcdFx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbjE2Mzg6XHRcdFx0W0lQU0VUX1RFU1RdID0gbXR5cGVfdGVzdCxcbjE2Mzk6XHRcdH0sXG4xNjQwOlx0XHQuZGVzdHJveSA9IG10eXBlX2Rlc3Ryb3ksXG4xNjQxOlx0XHQuZmx1c2hcdD0gbXR5cGVfZmx1c2gsXG4xNjQyOlx0XHQuaGVhZFx0PSBtdHlwZV9oZWFkLFxuMTY0MzpcdFx0Lmxpc3RcdD0gbXR5cGVfbGlzdCxcbjE2NDQ6XHRcdC51cmVmXHQ9IG10eXBlX3VyZWYsXG4xNjQ1Olx0XHQucmVzaXplXHQ9IG10eXBlX3Jlc2l6ZSxcbjE2NDY6XHRcdC5zYW1lX3NldCA9IG10eXBlX3NhbWVfc2V0LFxuMTY0NzpcdFx0LmNhbmNlbF9nYyA9IG10eXBlX2NhbmNlbF9nYyxcbjE2NDg6XHRcdC5yZWdpb25fbG9jayA9IHRydWUsXG4xNjQ5Olx0fTtcbjE2NTA6XHRcbjE2NTE6XHQjaWZkZWYgSVBfU0VUX0VNSVRfQ1JFQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpbXBsZW1lbnRhdGlvbi4uLgoKKipBbmFseXppbmcgdGhlIE1UWVBFIEZ1bmN0aW9uIEluc3RhbnRpYXRpb24qKgoKUmlnaHQsIHNvIHRoZXNlIGBtdHlwZV8qYCBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrczogYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdGAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9rYWR0YCwgYG10eXBlX3VhZHRgLCBhbmQgc28gb24uIFByZXR0eSBzdGFuZGFyZCBzdHVmZiwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIHRoZSBjb250ZXh0IHJpZ2h0LiBUaGVzZSBhcmUgaW5zdGFudGlhdGVkICpwZXIqIGBNVFlQRWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gRWFjaCBgTVRZUEVgIGdldHMgaXRzIG93biBzZXQgb2YgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBpbiBvcmRlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgc2V0LCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0IGBNVFlQRWBzIGRlZmluZSB0aGUgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgdHlwZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLiBJJiMzOTt2ZSBnb3QgdG8gZm9sbG93IHRoZSBkZWZpbml0aW9ucyBhbmQgc2VlIGhvdyB0aGVzZSBsb3ctbGV2ZWwgY2FsbHMgYXJlIHB1dCBpbnRvIG9wZXJhdGlvbiBmb3IgdGhlIGJyb2FkZXIgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6aXAscG9ydCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDQtICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQ1OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00Ni0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMz1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM2LSNkZWZpbmUgSFRZUEVcdFx0aGFzaF9uZXRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Mzc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM1PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQsaWZhY2VcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOC0jZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0aWZhY2Vcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzozOTojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQwLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzI9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzUtI2RlZmluZSBIVFlQRVx0XHRoYXNoX25ldG5ldFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNy0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTM1PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQscG9ydFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzktI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzo0MDojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtNDEtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtNDUtICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzo0NjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQscG9ydCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6Mzc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM4LSNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSGFzaCBNVFlQRXMgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIE1UWVBFczogYGhhc2hfaXBwb3J0bmV0NGAsIGBoYXNoX2lwcG9ydG5ldDZgLCBgaGFzaF9uZXQ0YCwgYGhhc2hfbmV0NmAsIGBoYXNoX25ldGlmYWNlNGAsIGBoYXNoX25ldGlmYWNlNmAsIGBoYXNoX25ldG5ldDRgLCBgaGFzaF9uZXRuZXQ2YCwgYGhhc2hfbmV0cG9ydDRgLCBgaGFzaF9uZXRwb3J0NmAsIGBoYXNoX25ldHBvcnRuZXQ0YCwgYW5kIGBoYXNoX25ldHBvcnRuZXQ2YC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBfYWRkYCwgYF9kZWxgLCBgX3Rlc3RgLCBhbmQgYF9mbHVzaGAgZnVuY3Rpb25zIGZvciBlYWNoIHR5cGUuIEkmIzM5O20gdGhpbmtpbmcsIGZvciBleGFtcGxlLCBhYm91dCBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYW5kIGBoYXNoX25ldDRfZmx1c2hgOyBhbmQgc2ltaWxhcmx5IGZvciBgbmV0NmAsIGBuZXRwb3J0YCwgYG5ldGlmYWNlYCwgYW5kIHRoZSBjb21iaW5lZCB0eXBlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGVhY2ggb2YgdGhvc2UgZnVuY3Rpb25zIG9wZXJhdGVzIHdpdGhpbiBpdHMgcmVzcGVjdGl2ZSBjb250ZXh0LgoKV2FpdCBhIHNlY29uZCwgdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBsaXN0ZWQgaW4gdGhlIGhlYWRlci4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBlaXRoZXIgaW5saW5lZCBvciBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBvYmplY3QgZmlsZSwgYW5kIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBJcyBgbXR5cGVfYWRkX2NpZHJgIG9uZSBvZiB0aGVtPyBBbmQgYG10eXBlX2FkZGA/IEludGVyZXN0aW5nLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGFjdHVhbGx5ICppcyogZXhwb3J0ZWQgYXMgYSBzeW1ib2wsIG9yIGlmIGl0JiMzOTtzIGFsc28gc3RhdGljIGFuZCBwb3RlbnRpYWxseSBpbmxpbmVkIG9yIGhpZGRlbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTc0MD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzQyLVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTc1Mj1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5MDU6XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTg4Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTk2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgbXR5cGVfYWRkYCBhbmQgYG10eXBlX3ZhcmlhbnRgKioKClJpZ2h0LCBzbyBgbXR5cGVfYWRkYC4uLiBJIHJlY2FsbCB0aGF0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYy4gQW5kIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgZWxlbWVudCB3aXRoaW4gYG10eXBlX3ZhcmlhbnQuYWR0YCwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW5kZXhlZCBieSBgSVBTRVRfQUREYC4gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhIGZsYWcuIFNpbmNlIGBtdHlwZV9hZGRgIGlzIHN0YXRpYywgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBmaWxlIG9yIHRyYW5zbGF0aW9uIHVuaXQuIFRoZW4gdGhlcmUmIzM5O3MgYG10eXBlX3ZhcmlhbnRgLCB3aGljaCBpcyAqYWxzbyogc3RhdGljISBUaGF0IHN1Z2dlc3RzIHRoaXMgc3RydWN0dXJlIGlzIGNvcmUgdG8gYSBsaW1pdGVkIHNjb3BlLCBtYXliZSBldmVuIGEgc2luZ2xldG9uIHBhdHRlcm4sIG9yIGF0IGxlYXN0IGEgdGlnaHRseSBjb250cm9sbGVkIGFjY2VzcyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGZhY3QgdGhhdCBib3RoIGFyZSBzdGF0aWMgdGVsbHMgbWUgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBkZXNpZ24uIFdoZXJlLCBhbmQgaG93IGlzIGBtdHlwZV92YXJpYW50YCBhY3R1YWxseSBiZWluZyB1c2VkPyBLbm93aW5nIGl0cyB1c2FnZSB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHN0YXRpYyBhc3NpZ25tZW50LiBMZXQmIzM5O3MgdHJhY2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ1LSN1bmRlZiBtdHlwZV9jYW5jZWxfZ2Ncbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiN1bmRlZiBtdHlwZV92YXJpYW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0Ny0jdW5kZWYgbXR5cGVfZGF0YV9tYXRjaFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjkzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfY2FuY2VsX2djKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyOTQ6I2RlZmluZSBtdHlwZV92YXJpYW50XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdmFyaWFudClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjk1LSNkZWZpbmUgbXR5cGVfZGF0YV9tYXRjaFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX21hdGNoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzMtXHQua2FkdFx0PSBtdHlwZV9rYWR0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBTZXQgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIGBtdHlwZV92YXJpYW50YCBpcyB0aWVkIHRvIGEgc3BlY2lmaWMgaGFzaCB2YXJpYW50LCBpbiB0aGlzIGNhc2UsIGBoYXNoX25ldDRfdmFyaWFudGAgYW5kIHRoZSBsaWtlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjb25uZWN0aW9uLiBOb3cgSSByZWNhbGwgdGhhdCB0aGlzIGBtdHlwZV92YXJpYW50YCBpcyB0aGVuIHBhc3NlZCB0byBgaXBfc2V0X3R5cGVfcmVnaXN0ZXJgLiBIbW0sIEkgc2hvdWxkIHRyYWNlIHRoYXQuCgpUaGlzIGNhbGxzIGZvciBhIGNsb3NlciBsb29rIGF0IGBpcF9zZXRfaGFzaF9uZXQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YXJpYW50cyBhcmUgcmVnaXN0ZXJlZCBhbmQgaG93IHRoZWlyIHNwZWNpZmljIHByb3BlcnRpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBicm9hZGVyIElQIHNldCBmcmFtZXdvcmsuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBgbXR5cGVfdmFyaWFudGAgYXNzb2NpYXRpb24uIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBjYWxscyBpbnZvbHZlZD8gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoaW5nIGxvZ2ljLCB0aGUgY29sbGlzaW9uIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljIHRvIHRoZXNlIG5ldC1iYXNlZCBzZXRzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2hfbmV0NF92YXJpYW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYxMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG10eXBlX3ZhcmlhbnRgIERlZmluaXRpb24qKgoKT2theSwgc28gbGV0IG1lIGp1c3QgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIHRoZSBgbXR5cGVfdmFyaWFudGAgaXMgZGVmaW5lZCBhcyBgSVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KWAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHRoZSBiYXNlIHN0cnVjdHVyZS4gTm93LCBpZiBgTVRZUEVgIGhhcHBlbnMgdG8gYmUgYGhhc2hfbmV0NGAsIHRoZW4sIGFuZCBvbmx5IHRoZW4sIGBtdHlwZV92YXJpYW50YCBiZWNvbWVzIGBoYXNoX25ldDRfdmFyaWFudGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgaGFzaF9uZXQ0YCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgaXBfc2V0X2hhc2hfbmV0LmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVmZXJlbmNlcyBhbmQgaW1wbGVtZW50YXRpb25zIG9mIGBoYXNoX25ldDRgLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNDEtLyogTWVtYmVyIGVsZW1lbnRzICAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo0MjpzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00My1cdF9fYmUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTUxPXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjUyOmhhc2hfbmV0NF9kYXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqaXAxLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MzpcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmlwMixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNTQtXHRcdCAgICAgdTMyICptdWx0aSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTYwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6NjE6aGFzaF9uZXQ0X2RvX2RhdGFfbWF0Y2goY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02Mi17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz02Nj1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2NzpoYXNoX25ldDRfZGF0YV9zZXRfZmxhZ3Moc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTY4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTcyPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjczOmhhc2hfbmV0NF9kYXRhX3Jlc2V0X2ZsYWdzKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggKmZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy03NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz03OD1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo3OTpoYXNoX25ldDRfZGF0YV9uZXRtYXNrKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9ODU9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6ODY6aGFzaF9uZXQ0X2RhdGFfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDI6aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwMzpcdFx0ICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTA4OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwOS0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTExMj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExMzpoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTYte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMTc6XHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExOC1cdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExOTpcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMjAtXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMzY6aGFzaF9uZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMzctXHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzOC17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEzOTpcdHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQwLVx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQxOlx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0Mi1cdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE5Ny1cdFx0aWYgKGkgXHUwMDNlIElQU0VUX01BWF9SQU5HRSkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxOTg6XHRcdFx0aGFzaF9uZXQ0X2RhdGFfbmV4dChcdTAwMjZoLVx1MDAzZW5leHQsIFx1MDAyNmUpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTktXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDgyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgSVAgU2V0IEhhc2ggR2VuZXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHJlZmVyZW5jaW5nIGBtdHlwZV92YXJpYW50YC4gUmlnaHQsIEkgcmVjYWxsIHRoYXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGlwX3NldF9oYXNoX2dlbi5oYCDigJMgdGhhdCYjMzk7cyB0aGUgaGVhZGVyIHdoZXJlIHdlIGhhdmUgYWxsIHRob3NlIHR5cGUtc3BlY2lmaWMgaGVscGVyIG1hY3JvcyBhbmQgc3RydWN0dXJlcyBmb3IgZ2VuZXJhdGluZyB0aGUgaGFzaCBzZXRzLiBBaCwgYW5kIGl0JiMzOTtzIHVzZWQgKndpdGhpbiogdGhhdCBzYW1lIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlOyBwcm9iYWJseSBhIGxvY2FsIHN0cnVjdHVyZS4gSGFuZyBvbi4uLiBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGV0YWlscy4gYG10eXBlX3ZhcmlhbnRgIGlzICpzdGF0aWMgY29uc3QqLCBzbyBpdCBpcyBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSBhbmQgc2NvcGVkIGludGVybmFsbHkuIEl0IGlzIGEgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCwgc28gdGhlIHR5cGUgaXMgY3JpdGljYWwuIEFoYSwgeWVzLCBJJiMzOTttIHNlZWluZyBpdCBub3c6IGBtdHlwZV92YXJpYW50ID0geyAuLi4gfWAuIFRoYXQgY29uZmlybXMgaXQsIGl0JiMzOTtzIGEgY29uc3RhbnQsIGFuZCBpdCBsb29rcyBsaWtlIGEgbG9va3VwIHRhYmxlIG9mIHNvcnRzIGNvbnRhaW5pbmcgZGlmZmVyZW50IHNldHRpbmdzLCBvcHRpb25zLCBvciBtZXRhZGF0YSBmb3IgaGFzaCB0eXBlcy4gTm93IGxldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCBnb2VzLi4uLiBPa2F5LCBhbmQgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpYC4gSG1tLCBub3cgdGhlIG1hY3JvIGlzIHRoZSBrZXkuIFRoYXQgZXhwYW5kcyB0byBgaGFzaF9uZXRfY3JlYXRlYCDigJMgdGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyBuZXQgaGFzaCBjcmVhdGlvbiBmdW5jdGlvbiEgU28gYG10eXBlX3ZhcmlhbnRgIG11c3QgZmVlZCBpbnRvIHRoZSBoYXNoIGNyZWF0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGF0IGBfY3JlYXRlYCBmdW5jdGlvbiBwcm9iYWJseSB1c2VzIHZhbHVlcyBmcm9tIGBtdHlwZV92YXJpYW50YCB0byBjb25maWd1cmUgdGhpbmdzIGxpa2UgdGhlIGhhc2hpbmcgYWxnb3JpdGhtLCB0aGUgYnVja2V0IHNpemUsIG9yIG90aGVyIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgc3BlY2lmaWMgaGFzaCBuZXQgYmVpbmcgY3JlYXRlZC4gUGVyZmVjdCwgbm93IEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB1c2FnZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV92YXJpYW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDY6I3VuZGVmIG10eXBlX3ZhcmlhbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ3LSN1bmRlZiBtdHlwZV9kYXRhX21hdGNoXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTMtI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI5NDojZGVmaW5lIG10eXBlX3ZhcmlhbnRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTUtI2RlZmluZSBtdHlwZV9kYXRhX21hdGNoXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfbWF0Y2gpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGNoZWNrLCBzcGVha2luZyBhcyBteXNlbGYsIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byBgaXBfc2V0X2hhc2hfZ2VuLmhgKioKClJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXNoIG5ldCBjcmVhdGlvbiBhbmQgdmFyaWFudCBtYW5hZ2VtZW50IGFyZSBpbXBsZW1lbnRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEkmIzM5O2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgdGhlIGNvZGUgd2l0aGluLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBpbnN0YW5jZXMgd2hlcmUgYGhhc2hfbmV0X2NyZWF0ZWAgb3IgYG10eXBlX3ZhcmlhbnRgIGFyZSB1c2VkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QsIHRoZSBwYXJhbWV0ZXJzIHRoZXkgdGFrZSwgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHRoZXkgaW1wbGVtZW50LiBJcyB0aGUgYGhhc2hfbmV0X2NyZWF0ZWAgZnVuY3Rpb24gcHJvcGVybHkgbWFuYWdpbmcgbWVtb3J5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgdmFyaWFudCB1c2FnZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbXR5cGVfdmFyaWFudGAgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBgaGFzaF9uZXRgIHR5cGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZmluZCBob3cgdGhlc2UgZWxlbWVudHMgY29tYmluZSBhbmQgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gaXMgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV92YXJpYW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDY6I3VuZGVmIG10eXBlX3ZhcmlhbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ3LSN1bmRlZiBtdHlwZV9kYXRhX21hdGNoXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTMtI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI5NDojZGVmaW5lIG10eXBlX3ZhcmlhbnRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTUtI2RlZmluZSBtdHlwZV9kYXRhX21hdGNoXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfbWF0Y2gpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHdvcms6CgoqKkh1bnRpbmcgRG93biBUaGF0IGBfdmFyaWFudGAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpczogSSBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIGBfdmFyaWFudGAgdGhpbmcgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlwX3NldF9oYXNoX2dlbi5oYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHBhcnQgb2Ygc29tZSBJUCBzZXQgaGFzaCBnZW5lcmF0aW9uIHByb2Nlc3MuIEZpbmRpbmcgdGhpcyB3aWxsIGJlIHRoZSBpbml0aWFsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNhZ2UgYW5kIHdoYXQgdGhlIGFzc29jaWF0ZWQgbG9naWMgaXMgZG9pbmcuIExldOKAmXMgZ2V0IHRvIHNlYXJjaGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X3ZhcmlhbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0NS0jdW5kZWYgbXR5cGVfY2FuY2VsX2djXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0NjojdW5kZWYgbXR5cGVfdmFyaWFudFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctI3VuZGVmIG10eXBlX2RhdGFfbWF0Y2hcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5My0jZGVmaW5lIG10eXBlX2NhbmNlbF9nY1x0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mjk0OiNkZWZpbmUgbXR5cGVfdmFyaWFudFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3ZhcmlhbnQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5NS0jZGVmaW5lIG10eXBlX2RhdGFfbWF0Y2hcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9tYXRjaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mjg9SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMxLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjMyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVx0LmthZHRcdD0gbXR5cGVfa2FkdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2NTM9SVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTgyMi0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTgyMzpcdFx0c2V0LVx1MDAzZXZhcmlhbnQgPSBcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNF92YXJpYW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTgyNC1cdFx0c2V0LVx1MDAzZWRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xODI4LVx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTgyOTpcdFx0c2V0LVx1MDAzZXZhcmlhbnQgPSBcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNl92YXJpYW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTgzMC1cdFx0c2V0LVx1MDAzZWRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTE2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgbGluZSwgYHNldC0mZ3Q7dmFyaWFudCA9ICZhbXA7SVBTRVRfVE9LRU4oSFRZUEUsIDRfdmFyaWFudCk7YCDigJMgdGhhdCYjMzk7cyB0aGUga2V5LiBTbyBgaGFzaF9uZXQ0X3ZhcmlhbnRgIGlzIHRoZSBhY3R1YWwgbmFtZSwgd2hpY2ggaXMgZ29vZC4gTGV0IG1lIHNlZSwgYEhUWVBFYCBpcyBkZWZpbmVkIGFzIGBoYXNoX25ldGAsIHNvIHRoZSBmdWxsIG5hbWUgaXMgaW5kZWVkIGBoYXNoX25ldDRfdmFyaWFudGAuIEFuZCB0aGVuLCBgTVRZUEVgIGlzIGBoYXNoX25ldDRgLCB3aGljaCBtZWFucyBgbXR5cGVfdmFyaWFudGAgbXVzdCBhbHNvIHJlc29sdmUgdG8gYGhhc2hfbmV0NF92YXJpYW50YC4KCk5vdywgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIOKAkyB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZXhwb3J0ZWQuIFRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyB0aGV5IHdvbiYjMzk7dCBoYXZlIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpbWFnZSB1bmxlc3MgdGhleSBhcmUgKm5vdCogaW5saW5lZC4gQmVjYXVzZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycywgdGhleSBkZWZpbml0ZWx5IGNhbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGlzIHdpbGwgZ2VuZXJhdGUgc3ltYm9scyEgVGhlaXIgbmFtZXMgd2lsbCBiZSBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9mbHVzaGAsIGFuZCBzbyBvbi4KCkhhbmcgb24uLi4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgaGFzaF9uZXQ0X2FkZGAgaXMgdGhlIGFjdHVhbCBuYW1lLiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gT2theSwgc28gYG10eXBlX2FkZGAgaXMgZGVmaW5lZCBhcyBgc3RhdGljIGludCBtdHlwZV9hZGQoLi4uKWAuIEFoYSEgQnV0IGBtdHlwZV9hZGRgIGlzIGEgbWFjcm8sIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2Ny0jZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjg6I2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjktI2RlZmluZSBtdHlwZV9kZWxfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjc5LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyODA6I2RlZmluZSBtdHlwZV9hZGRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3ODcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBNYXBwaW5nIGZvciBJUCBTZXQgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbXR5cGVfYWRkYCBpcyBpbmRlZWQgbWFwcGVkIHRvIGBoYXNoX25ldDRfYWRkYC4gTm93IEkgY2FuIGxpc3QgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGZvciBJUHY0LCBJUHY2LCBwb3J0LCBpbnRlcmZhY2UsIGFuZCBuZXR3b3JrIHZhcmlhdGlvbnM6IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYGhhc2hfbmV0Nl9hZGRgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX25ldDZfdGVzdGAsIGBoYXNoX25ldDZfZmx1c2hgLCBhbmQgc28gb24sIGNvdmVyaW5nIGFsbCB0aGUgcGVybXV0YXRpb25zLgoKQnV0IGhhbmcgb24sIEkgc2VlIGBtdHlwZV9hZGRfY2lkcmAsIHdoaWNoIGxvb2tzIGxpa2UgYSBtYWNyby4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbjogYCNkZWZpbmUgbXR5cGVfYWRkX2NpZHIgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilgIGNvbmZpcm1zIGl0LiBTbywgdGhhdCBtZWFucyBgaGFzaF9uZXQ0X2FkZF9jaWRyYCBpcyBhbHNvIGEgc3ltYm9sIHRvIGNvbnNpZGVyLiBUaGUgY2hhbGxlbmdlIHdpdGggdGhpcyBgbXR5cGVfYWRkX2NpZHJgIGZ1bmN0aW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgIGFuZCBgbXR5cGVfcmVzaXplYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBJcyBpdCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gU2luY2UgaXQmIzM5O3Mgc3RhdGljLCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlLgoKSSBzaG91bGQgdmVyaWZ5IGJ5IGNoZWNraW5nIHdoZXRoZXIgYGhhc2hfbmV0NF9hZGRgIGlzIGEgYmV0dGVyIHRhcmdldC4gUmlnaHQsIGBoYXNoX25ldDRfYWRkYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBpbmxpbmUgaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50IG1ha2VzIHRoYXQgZnVuY3Rpb24gYSBjbGVhcmVyIHRhcmdldC4KCk5vdywgd2FpdCwgaXMgYG10eXBlX3Rlc3RfY2lkcnNgIGFub3RoZXIgbWFjcm8/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjgyOiNkZWZpbmUgbXR5cGVfdGVzdF9jaWRyc1x0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0X2NpZHJzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODMtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpcHNldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBtdHlwZV90ZXN0X2NpZHJzYCBpcyBlcXVpdmFsZW50IHRvIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AuIEdvdCBpdC4gQW5kIGBtdHlwZV90ZXN0YCBjYWxscyB0aGF0LiBOb3csIEkmIzM5O20gY3VyaW91cyBpZiBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgaW5saW5lZC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbCBjYW5kaWRhdGUgZm9yIGlubGluaW5nLiBIb3dldmVyLCBgaGFzaF9uZXQ0X3Rlc3RgIGlzbiYjMzk7dCBpbmxpbmVkLCBzbyB0aGF0JiMzOTtzIGEgY2x1ZS4KClRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zLiBUaGUgcmVsZXZhbnQgZmlsZXMgc2VlbSB0byBiZSBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AsIGBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNgLCBhbmQgdGhlIGhlYWRlciBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBJJiMzOTtsbCBvcGVuIHVwIHRoZSBLY29uZmlnIGZpbGVzIGZvciB0aGVzZSB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGNvbmZpZ3VyZWQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9oYXNoX25ldGlmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipEaXZpbmcgaW50byB0aGUgaXBzZXQgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJlYXN0OiBgbmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZWAuIEl0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGlwc2V0IGlzIGRlZmluZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgc3lzdGVtIGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgZ2V0cyBjb21waWxlZCBhbmQgbGlua2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIGFuZCBhbnkgc3BlY2lmaWMgZmxhZ3MgdGhhdCBhcmUgYmVpbmcgdXNlZCwgcGFydGljdWxhcmx5IG9wdGltaXphdGlvbiBzZXR0aW5ncyBhbmQgYW55IGxpbmtlciB0cmlja3MuIEkmIzM5O20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGN1c3RvbSBydWxlcyBvciBtb2R1bGVzIGJlaW5nIGVtcGxveWVkLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSB0cm91Ymxlc2hvb3QgcG90ZW50aWFsIGlzc3VlcywgdW5kZXJzdGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBldmVuIHByb3Bvc2UgZnV0dXJlIGVuaGFuY2VtZW50cy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGJ1cmllZCB3aXRoaW4gdGhpcyBmaWxlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9oYXNoX25ldGlmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUKSAmIzQzOz0gaXBfc2V0X2hhc2hfbmV0cG9ydC5vXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRSkgJiM0Mzs9IGlwX3NldF9oYXNoX25ldGlmYWNlLm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMjctb2JqLSQoQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVCkgJiM0Mzs9IGlwX3NldF9oYXNoX25ldG5ldC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzkwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIElQc2V0IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBJUHNldCBjb25maWd1cmF0aW9uczogYENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFuZCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVGAuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCwgcHJvYmFibHkgaW4gdGhlIHdheSB0aGF0IHRoZSBoYXNoIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQuIFRoZSBuZXRwb3J0bmV0IG9uZSBpbW1lZGlhdGVseSBmbGFncywgc2luY2UgaXQgaGFzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gcG9ydCBhbmQgbmV0d29yaywgd2hpY2ggYWx3YXlzIHByZXNlbnRzIGNoYWxsZW5nZXMgZm9yIHNjYWxpbmcuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcyBvZiBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9gIGZvciB0aGF0IG9wdGlvbi4gVGhhdCBmaWxlIHNob3VsZCBkZWZpbmUgaXQsIGFuZCBzaG93IGl0cyBkZXBlbmRlbmNpZXMuIEhvcGVmdWxseSwgaXQmIzM5O2xsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBvbiBob3cgdGhlc2UgYXJlIHJlbGF0ZWQgYW5kIHdoZXRoZXIgb25lIGRlcGVuZHMgb24gb3RoZXJzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cyBvciBjbGV2ZXIgY29tYmluYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX1NFVF9IQVNIX05FVElGQUNFYC4gVGhhdCBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIGJhY2sgZnJvbSB0aGF0IHNwZWNpZmljIHNldCB0eXBlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgbGlicmFyaWVzIGl0IHJlbGllcyBvbiDigJMga2VybmVsIG1vZHVsZXMsIG90aGVyIElQIHNldCBmdW5jdGlvbmFsaXR5LCBtYXliZSBzcGVjaWZpYyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIGVsZW1lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoZWFkZXIgZmlsZSBpbmNsdWRlcywgZnVuY3Rpb24gY2FsbHMsIG9yIGFueSBraW5kIG9mIGRpcmVjdCBvciBpbmRpcmVjdCByZWZlcmVuY2VzLiBJdOKAmXMgYWxzbyB3b3J0aCBjb25zaWRlcmluZyBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBjb2RlIG9yLCBtb3JlIGxpa2VseSwgc29tZXRoaW5nIEkmIzM5O2xsIGNvbnN0cnVjdCBtZW50YWxseSBhcyBJIHdvcmsgdGhyb3VnaCB0aGUgcmVsYXRpb25zaGlwcy4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLCBlc3BlY2lhbGx5IGFzIGl0IHJlbGF0ZXMgdG8gaW50ZXJmYWNlLXNwZWNpZmljIElQIHNldCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU4Olx0Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG4gMTU5Olx0XHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFwmIzM0O1xuIDE2MDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAxNjE6XHRcdGhlbHBcbiAxNjI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgaGFzaDpuZXQsaWZhY2Ugc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2hcbiAxNjM6XHRcdCAgb25lIGNhbiBzdG9yZSBJUHY0L0lQdjYgbmV0d29yayBhZGRyZXNzL3ByZWZpeCBhbmRcbiAxNjQ6XHRcdCAgaW50ZXJmYWNlIG5hbWUgcGFpcnMgYXMgZWxlbWVudHMgaW4gYSBzZXQuXG4gMTY1Olx0XG4gMTY2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE2NzpcdFxuIDE2ODpcdGNvbmZpZyBJUF9TRVRfTElTVF9TRVRcbiAxNjk6XHRcdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4gMTcwOlx0XHRkZXBlbmRzIG9uIElQX1NFVFxuIDE3MTpcdFx0aGVscFxuIDE3MjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsaXN0OnNldCBzZXQgdHlwZSBzdXBwb3J0LiBJbiB0aGlzXG4gMTczOlx0XHQgIGtpbmQgb2Ygc2V0IG9uZSBjYW4gc3RvcmUgdGhlIG5hbWUgb2Ygb3RoZXIgc2V0cyBhbmQgaXQgZm9ybXNcbiAxNzQ6XHRcdCAgYW4gb3JkZXJlZCB1bmlvbiBvZiB0aGUgbWVtYmVyIHNldHMuXG4gMTc1Olx0XG4gMTc2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE3NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBoaW5nZXMgb24gdGhpcyBgSVBfU0VUYC4gVGhhdCYjMzk7cyB0aGUga2V5IHZhcmlhYmxlIGhlcmUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICppdCYjMzk7cyBhbGwgYWJvdXQgaG93IGBJUF9TRVRgIGlzIGJlaW5nIHVzZWQsIGFuZCB3aGF0JiMzOTtzIGNvbm5lY3RlZCB0byBpdCouIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7d2hhdCBvdGhlciBjb21wb25lbnRzLCBzeXN0ZW1zLCBvciBydWxlcyByZWx5IG9uIHRoZSBzdGF0ZSBvciBjb250ZW50cyBvZiBgSVBfU0VUYD8mIzM0Oy4gSXMgaXQgZGlyZWN0bHkgZmVlZGluZyBpbnRvIGZpcmV3YWxsIHJ1bGVzPyBJcyBpdCBsaW5rZWQgdG8gYSBkeW5hbWljIHJvdXRpbmcgcHJvdG9jb2w/IEFyZSB0aGVyZSBtb25pdG9yaW5nIHRvb2xzIHRoYXQgYXJlIGtleWVkIHRvIGNoYW5nZXMgaW4gdGhhdCBzZXQ/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBpZiBgSVBfU0VUYCBiZWhhdmVzIHVuZXhwZWN0ZWRseS4gU28sIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMsIHN5c3RlbSBsb2dzLCBhbmQgbWF5YmUgZXZlbiBsb29rIGZvciBhbnkgbW9uaXRvcmluZyBkYXNoYm9hcmRzIHRoYXQgcmVmZXJlbmNlIHRoYXQgaWRlbnRpZmllci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdHJhY2sgZG93biBldmVyeSBkaXJlY3QgYW5kIGluZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYElQX1NFVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uZnVzaW9uKioKCkhtbSwganVzdCBhIHF1aWNrIG1lbnRhbCBjaGVjayBoZXJlLiBJIHdhcyBqdXN0IHJldmlld2luZyBzb21lIGBuZXRmaWx0ZXJgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBxdWlja2x5LiBXaGVyZSBleGFjdGx5IGlzIHRoZSBgSVBfU0VUYCBLY29uZmlnIHN5bWJvbCBkZWZpbmVkPyBJcyBpdCBkaXJlY3RseSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIG9yIGFtIEkgdGhpbmtpbmcgb2YgaXQgYmVpbmcgdW5kZXIgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgIHN1YmRpcmVjdG9yeT8gSXQmIzM5O3MgZWFzeSB0byBnZXQgdGhlc2UgZGV0YWlscyBtdWRkbGVkIHdoZW4geW91JiMzOTtyZSBqdW1waW5nIGFyb3VuZCB2YXJpb3VzIGtlcm5lbCBjb21wb25lbnRzLiBJIHJlYWxseSBzaG91bGQgYmUgYWJsZSB0byBpbnN0YW50bHkgcmVjYWxsIHRoaXMsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgcXVpY2sgY2hlY2sgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IGNvbmZ1c2VkIHRoZSByZWxldmFudCBsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1lbnVjb25maWcgSVBfU0VUYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG1lbnVjb25maWdgIHNldHVwLCBzcGVjaWZpY2FsbHkgdGhlIGBJUF9TRVRgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG9wdGlvbnMgb3IgbW9kdWxlcyBtaWdodCBiZSByZXF1aXJlZCwgb3IgaWYgYElQX1NFVGAgaXRzZWxmIGRlcGVuZHMgb24gYSBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgc3RhY2sgY29uZmlndXJhdGlvbiBvciBzZWN1cml0eSBmZWF0dXJlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBgSVBfU0VUYCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHZhcmlhYmxlcyBhbmQgc3ltYm9scyBuZWVkIHRvIGJlIHNldCBvciBlbmFibGVkIGZvciBgSVBfU0VUYCB0byB3b3JrLiBJIGFsc28gZXhwZWN0IHRoYXQgdGhlcmUmIzM5O2xsIGJlIHNvbWUgZG9jdW1lbnRhdGlvbiB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gYnJvd3NlIGZvciBhbnkgYWRkaXRpb25hbCBwcmVyZXF1aXNpdGVzLiBJJiMzOTttIHByaW1hcmlseSB0aGlua2luZyBhYm91dCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdHMgdXNlLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdGluZyBzZXR0aW5ncy4gSSBhbSB0cnlpbmcgdG8gYXNjZXJ0YWluIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkaXJlY3Qgb3IgaW5kaXJlY3QuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGFibGUgdG8gYWNjdXJhdGVseSBjb25maWd1cmUgYElQX1NFVGAgYW5kIGludGVncmF0ZSBpdCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElQX1NFVFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxuICAgODpcdFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XG4gICA5Olx0XHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcJiMzNDtzZXRcJiMzNDsgbWF0Y2hcbiAgMTA6XHRcdCAgYW5kIFwmIzM0O1NFVFwmIzM0OyB0YXJnZXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGlmIElQX1NFVFxuICAxNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAzMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFNldCBDb25maWd1cmF0aW9uIGFuZCBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYElQX1NFVGAgZGVwZW5kZW5jeSDigJMgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgcmVsaWVzIG9uIGJvdGggYElORVRgIGFuZCBgTkVURklMVEVSYCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gYmUgZW5hYmxlZC4gSSBzZWUgYElQX1NFVGAsIG5hdHVyYWxseSwgYnV0IGFsc28gYSBzdHJpbmcgb2YgaGFzaC1iYXNlZCBjb25maWd1cmF0aW9uczogYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBHb3QgaXQuCgpIb2xkIG9uLCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCYjMzk7cyBhIHNoYXJlZCBoZWFkZXIgZm9yIGFsbCBoYXNoIHR5cGVzLiBMb29raW5nIGNsb3NlciwgaXQgYXBwZWFycyB0aGUgbW9kaWZpY2F0aW9uIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBjb2RlIHBhdGhzLiBBaCwgcmlnaHQuIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB3aGljaCB0eXBlcyBhY3R1YWxseSBkZWZpbmUgdGhpcy4gT2theSwgdGhvc2UgYXJlOiBgaGFzaF9uZXRgLCBgaGFzaF9uZXRwb3J0YCwgYGhhc2hfbmV0aWZhY2VgLCBgaGFzaF9uZXRuZXRgLCBgaGFzaF9pcHBvcnRuZXRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldGAuIFNvLCB0aGUgbGlzdCBvZiBjb25maWdzIEkgaWRlbnRpZmllZCBhYm92ZSBpcyBjb3JyZWN0LiBXZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYWxsIG9mIHRob3NlIHRvIHByb3Blcmx5IGFkZHJlc3MgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcy4gSSYjMzk7dmUgZ290IGEgbG9uZyBsaXN0IG9mIGZ1bmN0aW9ucyBoZXJlOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgZXRjLiBFc3NlbnRpYWxseSwgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGFkZGluZywgZGVsZXRpbmcsIHRlc3RpbmcsIGFuZCBmbHVzaGluZyBvZiB0aGUgZGlmZmVyZW50IG5ldCBhbmQgcG9ydCBoYXNoIHR5cGVzLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIHdoZW4gYW5hbHl6aW5nIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHBhdGNoLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSBhZnRlciB0aGUgbW9kaWZpY2F0aW9uLgoKTm93LCBhIHF1aWNrIHF1ZXN0aW9uIHBvcHMgdXAuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljPyBJdCB3b3VsZCBiZSBnb29kIHRvIHZlcmlmeS4gT2theSwgdGhleSBhcmUgc3RhdGljLiBIb3dldmVyLCBzaW5jZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBgbXR5cGVfdmFyaWFudGAgc3RydWN0LCB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkIGFuZCB0aGUga2VybmVsIGltYWdlIHdpbGwgYWN0dWFsbHkgaGF2ZSBzeW1ib2xzIGZvciB0aGVtLiBHb29kIHRvIG5vdGUuIEkgc3RpbGwgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRpYyBhdHRyaWJ1dGUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCB0aG91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBtdHlwZV9hZGRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJlY2FsbGluZyBQcmlvciBSZXNlYXJjaCoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIGBtdHlwZV9hZGQoYCBlYXJsaWVyLiBUaGUgZmFjdCB0aGF0IEkgaGFkIHRoYXQgcXVlcnkgaW4gbXkgc2VhcmNoIGhpc3RvcnkgbWVhbnMgc29tZXRoaW5nLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZSBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB3aHkgd2FzIEkgbG9va2luZyBhdCBpdD8gV2hhdCB3YXMgdGhlIHJlbGV2YW50IHByb2JsZW0gc3BhY2UgdGhlbiwgYW5kIGlzIGl0IGNvbm5lY3RlZCB0byB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIGN1cnJlbnRseT8gSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgbG9vayBhdCBteSBzZWFyY2ggaGlzdG9yeSBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2RlIHNuaXBwZXRzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgaWYgdGhhdCBlYXJsaWVyIGludmVzdGlnYXRpb24gcHJvdmlkZXMgYSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQgb3IgY2x1ZS4gVGhlIG1lbnRhbCBtb2RlbCBzaG91bGQgYWxyZWFkeSBiZSBwcmltZWQsIHNvIGl0JiMzOTtzIGEgbWF0dGVyIG9mIHJldHJpZXZpbmcgYW5kIHJlLWV2YWx1YXRpbmcgdGhlIHJlbGV2YW5jZSBub3cuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIGl0IHdpbGwgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2FkZFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA0LVx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1Olx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjk4ODptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTg5LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA0NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3ltYm9sIFZhbGlkaXR5IGFuZCBJbmxpbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXR5cGVfYWRkYCBmdW5jdGlvbi4uLiByaWdodCwgaXQmIzM5O3MgYSBtYWNybyBleHBhbmRpbmcgdG8gc29tZXRoaW5nIGxpa2UgYGhhc2hfbmV0NF9hZGRgLiBBbmQgc2luY2UgdGhlc2UgYGhhc2hfbmV0NF9hZGRgIHZhcmlhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGBtdHlwZV92YXJpYW50LmFkdFtJUFNFVF9BRERdYCwgdGhlIGNvbXBpbGVyICpoYXMqIHRvIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBmb3IgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGFkZHJlc3MtdGFrZW4uIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgdmFsaWQgc3ltYm9scyBmb3IgbWUgdG8gZm9jdXMgb24uIEV4Y2VsbGVudC4KCk5vdywgd2hhdCBhYm91dCBgbXR5cGVfYWRkX2NpZHJgPyBBaCwgdGhhdCYjMzk7cyBqdXN0IGEgc2hvcnRoYW5kIGZvciBgaGFzaF9uZXQ0X2FkZF9jaWRyYC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgICh3aGljaCB3ZSBrbm93IGlzIGBoYXNoX25ldDRfYWRkYCkgYW5kIGBtdHlwZV9yZXNpemVgLiBJcyAqaXQqIGFkZHJlc3MtdGFrZW4/IE5vcGUuIE9rYXksIHNvIGlubGluaW5nIGlzIHRoZSBjb25jZXJuIGhlcmUuIEl0JiMzOTtzIGBzdGF0aWNgLCBzbyBpdCAqY291bGQqIGJlIGlubGluZWQuIEl0JiMzOTtzIGEgZGVjZW50bHkgc2l6ZWQgZnVuY3Rpb24gdGhvdWdoLCBzbyBwZXJoYXBzIG5vdC4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgZGVmaW5pdGVseSAqaXNuJiMzOTt0KiBpbmxpbmVkIGJlY2F1c2UgaXQmIzM5O3MgYWRkcmVzcy10YWtlbi4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IG1lYW5zIGZvY3VzaW5nIG9uIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YCBpcyB0aGUgc2FmZXIgYmV0IHRvIGVuc3VyZSBzdGFiaWxpdHkuCgpIYW5nIG9uLi4uIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZWxzZS4gYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGNhbGxlZCBieSBgbXR5cGVfdGVzdGAuIEFuZCBgbXR5cGVfdGVzdGAgaXMsIGluIGZhY3QsIGBoYXNoX25ldDRfdGVzdGAuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbXR5cGVfdGVzdGAgZm9yIGEgbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV90ZXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzODc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzg4Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTM4OS1cdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODcwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFzaCBUYWJsZSBNb2R1bGUmIzM5O3MgVGVzdCBhbmQgRmx1c2ggRnVuY3Rpb25zKioKCk9rYXksIHNvIGBtdHlwZV90ZXN0YCAqaXMqIGFjdHVhbGx5IGBoYXNoX25ldDRfdGVzdGAuIEdvb2QsIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlIHRoZXJlLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUuCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGxpc3QgdGhlbSBvdXQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZToKKiAgIEFsbCB0aGUgYGhhc2hfbmV0NGAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0NmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0cG9ydDRgIHZhcmlhbnRzCiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnQ2YCB2YXJpYW50cwoqICAgQWxsIHRoZSBgaGFzaF9uZXRpZmFjZTRgIHZhcmlhbnRzCiogICBBbGwgdGhlIGBoYXNoX25ldGlmYWNlNmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0bmV0NGAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0bmV0NmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfaXBwb3J0bmV0NGAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfaXBwb3J0bmV0NmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0cG9ydG5ldDRgIHZhcmlhbnRzCiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnRuZXQ2YCB2YXJpYW50cwoKVGhpcyBsb29rcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIHNldCBvZiBoYXNoIHRhYmxlIG9wZXJhdGlvbnM6IGFkZCwgZGVsZXRlLCB0ZXN0LCBhbmQgZmx1c2guIFRoZSB2YXJpYXRpb25zIHNlZW0gdG8gaW5kaWNhdGUgZGlmZmVyZW50IGtleSB0eXBlczogYG5ldDRgLCBgbmV0NmAsIGBwb3J0YCwgYGlmYWNlYCwgYG5ldG5ldGAsIGFuZCBgaXBwb3J0bmV0YCwgcHJvYmFibHkgcmVsYXRpbmcgdG8gSVB2NCwgSVB2NiwgcG9ydCBudW1iZXJzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBjb21iaW5hdGlvbnMgb2YgdGhlc2UuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuCgpXYWl0IGEgc2Vjb25kLi4uICphbHNvKiBgbXR5cGVfZmx1c2hgIGlzIGEgbWFjcm8/IEludGVyZXN0aW5nLiBUaGF0IG1heSBhZmZlY3QgaG93IHRoaXMgd29ya3MsIGF0IGxlYXN0IHRoZSBtYWNybyBleHBhbnNpb24gb2YgdGhlIGNvZGUuIFRoaXMgbWVhbnMgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IG1hY3JvIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW5kaXZpZHVhbCBgZmx1c2hgIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUuIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGV4YW1pbmF0aW9uIG9mIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtdHlwZV9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjcxLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVx0SVBTRVRfVE9LRU4oTVRZUEUsIF9haGFzaF9tZW1zaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNzI6I2RlZmluZSBtdHlwZV9mbHVzaFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzMtI2RlZmluZSBtdHlwZV9kZXN0cm95XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVzdHJveSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwNDAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgSVAgU2V0IEhhc2ggTmV0IE1vZHVsZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdXp6aW5nIHRoZSBgaGFzaF9uZXQ0X2ZsdXNoYCBmdW5jdGlvbiBhbmQgc2ltaWxhciByb3V0aW5lcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3Npbmcgb3RoZXIgY3J1Y2lhbCBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBzZWUgaWYgYGhhc2hfbmV0NF91YWR0YCBhbmQgYGhhc2hfbmV0NF9rYWR0YCBhcmUgYWxzbyBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIE1ha2VzIHNlbnNlIOKAkyB0aG9zZSBhcmUgdGhlIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSBlbnRyeSBwb2ludHMsIHJlc3BlY3RpdmVseS4gSG1tLCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBtdHlwZV91YWR0YCBhbmQgYG10eXBlX2thZHRgIHJlZmVyZW5jZXMsIHNpbmNlIHRoZXkgYXJlbiYjMzk7dCBkaXJlY3RseSBkZWZpbmVkIGFzIG1hY3JvcyBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBBaGEhIFdhaXQgYSBzZWNvbmQuLi4gSSBzZWUgaXQgbm93LiBgbXR5cGVfdWFkdGAgKmlzKiBhY3R1YWxseSBgaGFzaF9uZXQ0X3VhZHRgIHVuZGVyIHRoZSBob29kLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQgbWUgc3dpdGNoIGdlYXJzIGFuZCBjb25zdWx0IGBpcF9zZXRfaGFzaF9uZXQuY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0X3VhZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTM1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTM3LVx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU1NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiB0aGUgaXBfc2V0X2hhc2ggQ29kZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBoYXNoX25ldDRfdWFkdGAgaXMgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9uZXQuY2AuIEJ1dCB0aGlzIHBhdGNoIHRvdWNoZXMgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYW5kIGBtdHlwZV90ZXN0X2NpZHJzYCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgYnkgdGhlIGNvcmUgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RgIG9wZXJhdGlvbnMuIFRoZXJlZm9yZSwgdGhlIG1vc3QgZWZmaWNpZW50IHBhdGggdG8gY29uZmlybSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBpbnZvbHZlcyBkaXJlY3RseSBleGFtaW5pbmcgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfZmx1c2hgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YC4KCkxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgaXMgYWN0dWFsbHkgY2FsbGluZyBgaGFzaF9uZXQ0X2FkZF9jaWRyYC4gTG9va2luZyBhdCBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBJIHNlZToKCmBgYGMKc3RhdGljIGludAptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKCSAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncykKewouLi4KI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwoJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspCgkJbXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaSksIGkpOwojZW5kaWYKLi4uCn0KYGBgCgpZZXMsIGl0IGRvZXMuIEV4Y2VsbGVudC4KCk5vdywgaG9sZCBvbi4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYCBieSByZW1vdmluZyBgI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVDBgLiBUaW1lIHRvIGNoZWNrIHdoYXQgYElQX1NFVF9IQVNIX1dJVEhfTkVUMGAgd2FzIGRvaW5nLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB0byBleGFtaW5lIGFzIHBhcnQgb2YgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9IQVNIX1dJVEhfTkVUMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MzYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHNvIHRoZSBvcmlnaW5hbCBjb2RlIGVsZW1lbnQgaXMgZ29uZSwgdGhhbmtzIHRvIHRoZSByZWNlbnQgcGF0Y2guIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCB3aGljaCBJJiMzOTtkIGNvbmZpcm1lZCB3aGVuIHJldmlld2luZyB0aGUgcGF0Y2ggaW5pdGlhbGx5LiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gQmVmb3JlIEkgbW92ZSBvbiB3aXRoIG15IG93biB3b3JrLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgKmNvbXBsZXRlbHkqIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBpdCYjMzk7cyBzb21laG93IGxpbmdlcmVkIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEl0IHdvdWxkbiYjMzk7dCBiZSB0aGUgZmlyc3QgdGltZSBJJiMzOTt2ZSBlbmNvdW50ZXJlZCBhIHNlZW1pbmdseSBjbGVhbiByZW1vdmFsIHRoYXQgbGVmdCBjcnVmdCBiZWhpbmQsIG9yIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiByZWZhY3RvcmVkIGFuZCBtb3ZlZC4gQSBxdWljayBpbnNwZWN0aW9uIG9mIHRoYXQgaGVhZGVyIGZpbGUgaXMgd2FycmFudGVkLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNyaXRpY2FsIG5ldHdvcmtpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9TRVRfSEFTSF9XSVRIX05FVDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MDMKCQkJCQkJCW91dHB1dDogNzA2CgkJCQkJCQl0aG91Z2h0czogMTcxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENvbmZpZ3VyYXRpb24gYW5kIEFuYWx5c2lzIGZvciBpcF9zZXQgQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSBhIGNydWNpYWwgY2hhbmdlIHdhcyBtYWRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBiZWluZyBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBhIG1hY3JvLCBgSVBfU0VUX0hBU0hfV0lUSF9ORVQwYCwgd2FzIHJlbW92ZWQgZnJvbSBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AgYW5kIGBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNgLiAgVGhhdCBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIHJlZmFjdG9yaW5nIG9yIHBlcmhhcHMgcmVtb3ZhbCBvZiBhbiBvYnNvbGV0ZSBmZWF0dXJlLgoKVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHNlcWNvdW50X3NwaW5sb2NrX3Qgc2VxYCB0byBgc3RydWN0IG5ldF9wcmVmaXhlc2AuICBUaGlzLCBjb3VwbGVkIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIHRoZSBgc2VxY291bnRgIG1lY2hhbmlzbSwgc3Ryb25nbHkgc3VnZ2VzdHMgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHRhcmdldGluZyBsb2NrbGVzcyByZWFkZXJzLiBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBleGVyY2lzaW5nIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBidWlsZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoZW0gZW5hYmxlZC4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczoKCiogICBgSVBfU0VUYAoqICAgYElQX1NFVF9IQVNIX05FVGAKKiAgIGBJUF9TRVRfSEFTSF9ORVRQT1JUYAoqICAgYElQX1NFVF9IQVNIX05FVElGQUNFYAoqICAgYElQX1NFVF9IQVNIX05FVE5FVGAKKiAgIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgCiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAKClRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgSVBfU0VUYCBzZWVtIHRvIGJlIHRoZSBzdGFuZGFyZCBgSU5FVGAgYW5kIGBORVRGSUxURVJgIHNldHRpbmdzLCBzbyBubyBpc3N1ZXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byBmdXp6OgoKQmFzZWQgb24gdGhlIGNvZGUsIHRoZSBrZXkgZnVuY3Rpb24gcGFpcnMgZm9yIGZ1enppbmcgYXJlOgoqICAgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfZmx1c2hgCiogICBgaGFzaF9uZXQ2X2FkZGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfbmV0Nl90ZXN0YCwgYGhhc2hfbmV0Nl9mbHVzaGAKKiAgIGBoYXNoX25ldHBvcnQ0X2FkZGAsIGBoYXNoX25ldHBvcnQ0X2RlbGAsIGBoYXNoX25ldHBvcnQ0X3Rlc3RgLCBgaGFzaF9uZXRwb3J0NF9mbHVzaGAKKiAgIGBoYXNoX25ldHBvcnQ2X2FkZGAsIGBoYXNoX25ldHBvcnQ2X2RlbGAsIGBoYXNoX25ldHBvcnQ2X3Rlc3RgLCBgaGFzaF9uZXRwb3J0Nl9mbHVzaGAKKiAgIGBoYXNoX25ldGlmYWNlNF9hZGRgLCBgaGFzaF9uZXRpZmFjZTRfZGVsYCwgYGhhc2hfbmV0aWZhY2U0X3Rlc3RgLCBgaGFzaF9uZXRpZmFjZTRfZmx1c2hgCiogICBgaGFzaF9uZXRpZmFjZTZfYWRkYCwgYGhhc2hfbmV0aWZhY2U2X2RlbGAsIGBoYXNoX25ldGlmYWNlNl90ZXN0YCwgYGhhc2hfbmV0aWZhY2U2X2ZsdXNoYAoqICAgYGhhc2hfbmV0bmV0NF9hZGRgLCBgaGFzaF9uZXRuZXQ0X2RlbGAsIGBoYXNoX25ldG5ldDRfdGVzdGAsIGBoYXNoX25ldG5ldDRfZmx1c2hgCiogICBgaGFzaF9uZXRuZXQ2X2FkZGAsIGBoYXNoX25ldG5ldDZfZGVsYCwgYGhhc2hfbmV0bmV0Nl90ZXN0YCwgYGhhc2hfbmV0bmV0Nl9mbHVzaGAKKiAgIGBoYXNoX2lwcG9ydG5ldDRfYWRkYCwgYGhhc2hfaXBwb3J0bmV0NF9kZWxgLCBgaGFzaF9pcHBvcnRuZXQ0X3Rlc3RgLCBgaGFzaF9pcHBvcnRuZXQ0X2ZsdXNoYAoqICAgYGhhc2hfaXBwb3J0bmV0Nl9hZGRgLCBgaGFzaF9pcHBvcnRuZXQ2X2RlbGAsIGBoYXNoX2lwcG9ydG5ldDZfdGVzdGAsIGBoYXNoX2lwcG9ydG5ldDZfZmx1c2hgCiogICBgaGFzaF9uZXRwb3J0bmV0NF9hZGRgLCBgaGFzaF9uZXRwb3J0bmV0NF9kZWxgLCBgaGFzaF9uZXRwb3J0bmV0NF90ZXN0YCwgYGhhc2hfbmV0cG9ydG5ldDRfZmx1c2hgCiogICBgaGFzaF9uZXRwb3J0bmV0Nl9hZGRgLCBgaGFzaF9uZXRwb3J0bmV0Nl9kZWxgLCBgaGFzaF9uZXRwb3J0bmV0Nl90ZXN0YCwgYGhhc2hfbmV0cG9ydG5ldDZfZmx1c2hgCgpJIHdpbGwgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgbWFuaXB1bGF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCwgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBgc2VxY291bnRgLiBUaGUgdW5kZXJseWluZyB1c2Ugb2YgQ0lEUnMgZm9yIG5ldHdvcmsgcHJlZml4ZXMgYWxzbyB3YXJyYW50cyBzcGVjaWFsIGF0dGVudGlvbi4gU28gdGhpcyBpcyB3aGF0IEkmIzM5O20gZ29pbmcgdG8gc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBpcHNldCBoYXNoIHR5cGVzIHRoYXQgdXNlIG5ldHdvcmsgcHJlZml4ZXMgKENJRFIpIGJ5IGludHJvZHVjaW5nIGEgc2VxY291bnQgdG8gZ3VhcmQgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiB0aGUgcHJlZml4ZXMgYXJyYXkuIFRoaXMgYWZmZWN0cyB0aGUgYWRkLCBkZWwsIHRlc3QsIGFuZCBmbHVzaCBvcGVyYXRpb25zIGZvciBzZXZlcmFsIGhhc2ggdHlwZXMgKG5ldCwgbmV0cG9ydCwgbmV0aWZhY2UsIG5ldG5ldCwgaXBwb3J0bmV0LCBuZXRwb3J0bmV0KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmV0ZmlsdGVyIGlwc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tsZXNzIHJlYWRlciBsb2dpYyBhbmQgYXJyYXkgc2hpZnRpbmcgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfSVBQT1JUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYXNoX25ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaGFzaCB0eXBlcyB0aGF0IHVzZSBuZXR3b3JrIHByZWZpeGVzIChDSURSKSBieSBpbnRyb2R1Y2luZyBhIHNlcWNvdW50IHRvIGd1YXJkIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgdGhlIHByZWZpeGVzIGFycmF5LiBUaGlzIGFmZmVjdHMgdGhlIGFkZCwgZGVsLCB0ZXN0LCBhbmQgZmx1c2ggb3BlcmF0aW9ucyBmb3Igc2V2ZXJhbCBoYXNoIHR5cGVzIChuZXQsIG5ldHBvcnQsIG5ldGlmYWNlLCBuZXRuZXQsIGlwcG9ydG5ldCwgbmV0cG9ydG5ldCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5ldGZpbHRlciBpcHNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyByZWFkZXIgbG9naWMgYW5kIGFycmF5IHNoaWZ0aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MTguMjIwMzU2OTc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTExNzExNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfZGVsXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfYWRkXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9kZWxcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGlwc2V0IGhhc2ggdHlwZXMgdGhhdCB1c2UgbmV0d29yayBwcmVmaXhlcyAoQ0lEUikgYnkgaW50cm9kdWNpbmcgYSBzZXFjb3VudCB0byBndWFyZCBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIHRoZSBwcmVmaXhlcyBhcnJheS4gVGhpcyBhZmZlY3RzIHRoZSBhZGQsIGRlbCwgdGVzdCwgYW5kIGZsdXNoIG9wZXJhdGlvbnMgZm9yIHNldmVyYWwgaGFzaCB0eXBlcyAobmV0LCBuZXRwb3J0LCBuZXRpZmFjZSwgbmV0bmV0LCBpcHBvcnRuZXQsIG5ldHBvcnRuZXQpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZXRmaWx0ZXIgaXBzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3MgcmVhZGVyIGxvZ2ljIGFuZCBhcnJheSBzaGlmdGluZyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MTguMjIwMzg0NDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg3ODAzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMTIwNjc4OWViM2QxYjU4NjcwMjk1NDAyMTk3ZjczMDdkYjY2YjYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMDA6NDk6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5pbmRleCBmMDBjODJhY2Q3ZjA1Li5lYTcyYjk3OTRmODgwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcWxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxcdTAwM2VcXG4gXFxuQEAgLTk4LDE0ICs5OSwzNCBAQCBzdHJ1Y3QgaHRhYmxlIHtcXG4gI2RlZmluZSBJUFNFVF9ORVRfQ09VTlRcXHRcXHQxXFxuICNlbmRpZlxcbiBcXG4tLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXFxuKy8qKlxcbisgKiBzdHJ1Y3QgbmV0X3ByZWZpeCAtIFJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBwcmVmaXguXFxuKyAqIEBjaWRyOiBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoLlxcbisgKiBAY291bnQ6IE51bWJlciBvZiBvY2N1cnJlbmNlcy5cXG4rICovXFxuIHN0cnVjdCBuZXRfcHJlZml4IHtcXG4tXFx0dTggY2lkcjtcXHRcXHRcXHQvKiB0aGUgY2lkciB2YWx1ZSAqL1xcbi1cXHR1MzIgY291bnQ7XFx0XFx0XFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqL1xcbitcXHR1MzIgY2lkcjo4O1xcbitcXHR1MzIgY291bnQ6MjQ7XFxuIH07XFxuIFxcbisjZGVmaW5lIENJRFJfTUFYX0NPVU5UICgoMSBcXHUwMDNjXFx1MDAzYyAyNCkgLSAxKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBuZXRfcHJlZml4ZXMgLSBBIGNvbGxlY3Rpb24gb2YgbmV0d29yayBwcmVmaXhlcy5cXG4rICogQHJjdTogUkNVIGhlYWRcXG4rICogQHNlcTogU2VxdWVuY2UgY291bnRlciBndWFyZGluZyBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIEBuZXRzXFxuKyAqIEBsZW46IE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheS5cXG4rICogQG5ldHM6IEFycmF5IG9mIG5ldF9wcmVmaXggc3RydWN0dXJlcyAoc29ydGVkIGJ5IENJRFIgZGVzY2VuZGluZykuXFxuKyAqXFxuKyAqIEBuZXRzIGVudHJpZXMgYXJlIHVwZGF0ZWQgaW4gcGxhY2UgdW5kZXIgQHNldCdzIGxvY2suIEEgc2luZ2xlIGVudHJ5J3NcXG4rICogY2lkci9jb3VudCBwYWlyIGlzIGFsd2F5cyB1cGRhdGVkIGF0b21pY2FsbHkgdmlhIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSxcXG4rICogYnV0IHJlbW92aW5nIGFuIGVudHJ5IGFsc28gc2hpZnRzIGV2ZXJ5IGZvbGxvd2luZyBlbnRyeSBkb3duIGJ5IG9uZSBzbG90LlxcbisgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlXFxuKyAqIGluZGV4ZWQgc2xvdCkgbXVzdCB1c2UgQHNlcSB0byBkZXRlY3QgYW5kIHJldHJ5IGFjcm9zcyBzdWNoIGEgc2hpZnQuXFxuKyAqL1xcbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0c2VxY291bnRfc3BpbmxvY2tfdCBzZXE7XFxuIFxcdHU4IGxlbjtcXG4gXFx0c3RydWN0IG5ldF9wcmVmaXggbmV0c1tdIF9fY291bnRlZF9ieShsZW4pO1xcbiB9O1xcbkBAIC0xNDMsOCArMTY0LDExIEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxcbiAjZW5kaWZcXG4gXFxuICNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykgKHtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTtcXHRcXHRcXFxcXFxuLVxcdERDSURSX1BVVCgoX19uKS1cXHUwMDNlbGVuID8gKF9fbiktXFx1MDAzZW5ldHNbMF0uY2lkciA6IGhvc3RfbWFzayk7XFxcXFxcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7XFx0XFxcXFxcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBfX3AgPVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19uLVxcdTAwM2VsZW4gPyBSRUFEX09OQ0UoX19uLVxcdTAwM2VuZXRzWzBdKVxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0IDogKHN0cnVjdCBuZXRfcHJlZml4KXt9O1xcdFxcdFxcXFxcXG4rXFx0RENJRFJfUFVUKF9fcC5jb3VudCA/IF9fcC5jaWRyIDogaG9zdF9tYXNrKTtcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXFxuQEAgLTMxOCwyNyArMzQyLDQzIEBAIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xcbiB9O1xcbiBcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50XFxuLSAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciArIDEgdG8gc3VwcG9ydCAvMC5cXG4rLyoqXFxuKyAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nXFxuKyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbisgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGVcXG4rICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGhcXG4rICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byBhZGQgQGNpZHIgdG9cXG4rICpcXG4rICogUGVyZm9ybXMgYW4gdXBkYXRlIGlmIEBjaWRyIGlzIGZvdW5kLCBvdGhlcndpc2UgcGVyZm9ybXMgQ09XLXN0eWxlXFxuKyAqIGFsbG9jYXRpb24gYW5kIHJlcGxhY2VtZW50IHZpYSBSQ1UuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XFxuIFxcdGludCBpLCBqLCBmb3VuZCwgbGVuID0gMCwgcmV0ID0gMDtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXggbnA7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIFxcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXFx1MDAzZXJuZXRzW25dKTtcXG4gXFx0LyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqL1xcbiBcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4tXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdG5wID0gUkVBRF9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbaV0pO1xcbitcXHRcXHRpZiAobnAuY291bnQpXFxuIFxcdFxcdFxcdGxlbisrO1xcbiBcXHRcXHRpZiAoZm91bmQgIT0gLTEpIHtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyIFxcdTAwM2MgY2lkcikge1xcbitcXHRcXHR9IGVsc2UgaWYgKG5wLmNpZHIgXFx1MDAzYyBjaWRyKSB7XFxuIFxcdFxcdFxcdGZvdW5kID0gaTtcXG4tXFx0XFx0fSBlbHNlIGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xcbi1cXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50Kys7XFxuK1xcdFxcdH0gZWxzZSBpZiAobnAuY2lkciA9PSBjaWRyKSB7XFxuK1xcdFxcdFxcdGlmIChucC5jb3VudCBcXHUwMDNjIENJRFJfTUFYX0NPVU5UKSB7XFxuK1xcdFxcdFxcdFxcdG5wLmNvdW50Kys7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UobmV0cy1cXHUwMDNlbmV0c1tpXSwgbnApO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRU9WRVJGTE9XO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMzUwLDYgKzM5MCw3IEBAIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiBcXHR9XFxuIFxcbiBcXHR0bXAtXFx1MDAzZWxlbiA9IGxlbjtcXG4rXFx0c2VxY291bnRfc3BpbmxvY2tfaW5pdChcXHUwMDI2dG1wLVxcdTAwM2VzZXEsIFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKSB7XFxuIFxcdFxcdGlmIChpID09IGZvdW5kKSB7XFxuIFxcdFxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcXG5AQCAtMzcxLDQyICs0MTIsNjAgQEAgbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBtdHlwZV9kZWxfY2lkciAtIFJlbW92ZSBDSURSIGVudHJ5IGFuZCBtYWludGFpbiBhcnJheSBpbnRlZ3JpdHkuXFxuKyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldC5cXG4rICogQGg6IFBvaW50ZXIgdG8gdGhlIGh0eXBlLlxcbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aC5cXG4rICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byByZW1vdmUgQGNpZHIgZnJvbVxcbisgKlxcbisgKiBJZiBDSURSIGVudHJ5IGNvdW50IGZhbGxzIHRvIDAsIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBcXFwic2hpZnQtbGVmdFxcXCJcXG4rICogb3BlcmF0aW9uIG9uIGFsbCBmb2xsb3dpbmcgZWxlbWVudHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSByZW1haW5zXFxuKyAqIGNvbnRpZ3VvdXMgYW5kIG1haW50YWlucyBpdHMgZGVzY2VuZGluZyBvcmRlciBieSBDSURSLiBUaGUgdmFjYXRlZCBzbG90XFxuKyAqIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5IGlzIHplcm9lZCBvdXQgKGNpZHI9MCwgY291bnQ9MCkuXFxuKyAqL1xcbiBzdGF0aWMgdm9pZFxcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbi1cXHR1OCBpLCBqLCBsZW4gPSAwO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBucDtcXG4gXFx0aW50IGZvdW5kO1xcbitcXHR1OCBpLCBqO1xcbitcXG4rXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCkgIT0gc2l6ZW9mKHUzMikpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVxcdTAwM2VybmV0c1tuXSk7XFxuIFxcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGkrKykge1xcbi1cXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudClcXG4tXFx0XFx0XFx0bGVuKys7XFxuLVxcdFxcdGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcilcXG4rXFx0XFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cXHUwMDNlbmV0c1tpXSk7XFxuK1xcdFxcdGlmIChucC5jb3VudCBcXHUwMDI2XFx1MDAyNiBucC5jaWRyID09IGNpZHIpIHtcXG4rXFx0XFx0XFx0bnAuY291bnQtLTtcXG4gXFx0XFx0XFx0Zm91bmQgPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdGlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXG4tXFx0bmV0cy1cXHUwMDNlbmV0c1tmb3VuZF0uY291bnQtLTtcXG4tXFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLmNvdW50KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4tXFx0bGVuLS07XFxuLVxcdHRtcCA9IGt6YWxsb2NfZmxleCgqdG1wLCBuZXRzLCBsZW4sIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAoIXRtcClcXG4tXFx0XFx0LyogTGVhdmUgYSBob2xlICovXFxuK1xcdGlmIChucC5jb3VudCkge1xcbitcXHRcXHRXUklURV9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLCBucCk7XFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuIFxcbi1cXHR0bXAtXFx1MDAzZWxlbiA9IGxlbjtcXG4rXFx0d3JpdGVfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSk7XFxuIFxcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4tXFx0XFx0aWYgKCFuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50IHx8IGkgPT0gZm91bmQpXFxuK1xcdFxcdGlmIChpID09IGZvdW5kKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHI7XFxuLVxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudDtcXG4rXFxuK1xcdFxcdG5wID0gUkVBRF9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbaV0pO1xcbitcXHRcXHRpZiAoaSAhPSBqKVxcbitcXHRcXHRcXHRXUklURV9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbal0sIG5wKTtcXG4rXFx0XFx0aisrO1xcbiBcXHR9XFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVxcdTAwM2VybmV0c1tuXSwgdG1wKTtcXG4tXFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XFxuK1xcbitcXHR3aGlsZSAoaiBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbilcXG4rXFx0XFx0V1JJVEVfT05DRShuZXRzLVxcdTAwM2VuZXRzW2orK10sIChzdHJ1Y3QgbmV0X3ByZWZpeCl7fSk7XFxuK1xcdHdyaXRlX3NlcWNvdW50X2VuZChcXHUwMDI2bmV0cy1cXHUwMDNlc2VxKTtcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4gfVxcbkBAIC00NTEsNyArNTEwLDcgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi1cXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xcbiAjZW5kaWZcXG4gXFx0c3RydWN0IGh0YWJsZSAqdDtcXG4gXFx0c3RydWN0IGhidWNrZXQgKm47XFxuQEAgLTQ3NywxNyArNTM2LDE1IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4gXFx0fVxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbi1cXHRcXHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVxcdTAwM2VybmV0c1tpXSk7XFxuLVxcdFxcdHRtcCA9IGt6YWxsb2Nfb2JqKCp0bXAsIEdGUF9BVE9NSUMpO1xcbi1cXHRcXHRpZiAoIXRtcCkge1xcbi1cXHRcXHRcXHR1OCBqO1xcbitcXHRcXHR1OCBqO1xcbiBcXG4tXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaisrKVxcbi1cXHRcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2pdLmNvdW50ID0gMDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW2ldLCB0bXApO1xcbi1cXHRcXHRcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4tXFx0XFx0fVxcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXFx1MDAzZXJuZXRzW2ldKTtcXG4rXFx0XFx0d3JpdGVfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGorKylcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShuZXRzLVxcdTAwM2VuZXRzW2pdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xcbitcXHRcXHR3cml0ZV9zZXFjb3VudF9lbmQoXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHR9XFxuICNlbmRpZlxcbiB9XFxuQEAgLTEyNTMsMzEgKzEzMTAsNDEgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcTE7XFxuIFxcdGludCByZXQsIGksIGosIGs7XFxuICNlbHNlXFxuIFxcdGludCByZXQsIGksIGo7XFxuICNlbmRpZlxcbi1cXHR1MzIga2V5LCBtdWx0aSA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBzZXEwO1xcbitcXHR1MzIga2V5LCBtdWx0aTtcXG4gXFx0dTggcG9zO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcInRlc3QgYnkgbmV0c1xcXFxuXFxcIik7XFxuIFxcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rcmV0cnk6XFxuK1xcdG11bHRpID0gMDtcXG4gXFx0bmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNlcm5ldHNbMF0pO1xcbitcXHRzZXEwID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bmV0czAtXFx1MDAzZXNlcSk7XFxuICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxcbiBcXHRuZXRzMSA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVxcdTAwM2VybmV0c1sxXSk7XFxuK1xcdHNlcTEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZXRzMS1cXHUwMDNlc2VxKTtcXG4gI2VuZGlmXFxuIFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzMC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaisrKSB7XFxuLVxcdFxcdGlmICghbmV0czAtXFx1MDAzZW5ldHNbal0uY291bnQpXFxuK1xcdFxcdHN0cnVjdCBuZXRfcHJlZml4IHAwID0gUkVBRF9PTkNFKG5ldHMwLVxcdTAwM2VuZXRzW2pdKTtcXG4rXFxuK1xcdFxcdGlmICghcDAuY291bnQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0XFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFxcdTAwMjZvcmlnKTtcXG4tXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVxcdTAwM2VuZXRzW2pdLmNpZHIsIGZhbHNlKTtcXG4rXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAwLmNpZHIsIGZhbHNlKTtcXG4gXFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIG5ldHMxLVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjYgIW11bHRpOyBrKyspIHtcXG4tXFx0XFx0XFx0aWYgKCFuZXRzMS1cXHUwMDNlbmV0c1trXS5jb3VudClcXG4rXFx0XFx0XFx0c3RydWN0IG5ldF9wcmVmaXggcDEgPSBSRUFEX09OQ0UobmV0czEtXFx1MDAzZW5ldHNba10pO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFwMS5jb3VudClcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cXHUwMDNlbmV0c1trXS5jaWRyLCB0cnVlKTtcXG4rXFx0XFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAxLmNpZHIsIHRydWUpO1xcbiAjZWxzZVxcbi1cXHRcXHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXFx1MDAzZW5ldHNbal0uY2lkcik7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBwMC5jaWRyKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGtleSA9IEhLRVkoZCwgaC1cXHUwMDNlaW5pdHZhbCwgdC1cXHUwMDNlaHRhYmxlX2JpdHMpO1xcbiBcXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XFxuQEAgLTEzMDIsNiArMTM2OSwxMyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXFxuIFxcdFxcdH1cXG4gI2VuZGlmXFxuIFxcdH1cXG4rXFxuK1xcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXRzMC1cXHUwMDNlc2VxLCBzZXEwKSlcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXFxuK1xcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXRzMS1cXHUwMDNlc2VxLCBzZXExKSlcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rI2VuZGlmXFxuIFxcdHJldCA9IDA7XFxuIHVubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuQEAgLTE3MDcsNiArMTc4MSw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4gXFx0XFx0XFx0XFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVxcdTAwM2VybmV0c1stLWldKSk7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9ocmVnaW9uO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNlcWNvdW50X3NwaW5sb2NrX2luaXQoXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSwgXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaC1cXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xcbiBcXHR9XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcXG5pbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbkBAIC0zOCw3ICszOCw2IEBAIE1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LGlmYWNlXFxcIik7XFxuICNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldGlmYWNlXFxuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxcbiBcXG4gI2RlZmluZSBTVFJTQ1BZKGEsIGIpXFx0c3Ryc2NweShhLCBiLCBJRk5BTVNJWilcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcXG5pbmRleCA2MjkxNTMyYmU3YTVhLi42MWFmMWNlMjcxMjc5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcXG5AQCAtMzYsNyArMzYsNiBAQCBNT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxwb3J0LG5ldFxcXCIpO1xcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cXG4gI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4gI2RlZmluZSBJUFNFVF9ORVRfQ09VTlQgMlxcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxcbiBcXG4gLyogSVB2NCB2YXJpYW50ICovXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OToxOC42MzAwMjA5MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDgxMDIwMzcwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfbmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfYWRkXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9kZWxcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9hZGRcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0bmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0bmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0bmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0bmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldG5ldDZfZmx1c2hcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF9hZGRcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl9kZWxcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaGFzaCB0eXBlcyB0aGF0IHVzZSBuZXR3b3JrIHByZWZpeGVzIChDSURSKSBieSBpbnRyb2R1Y2luZyBhIHNlcWNvdW50IHRvIGd1YXJkIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgdGhlIHByZWZpeGVzIGFycmF5LiBUaGlzIGFmZmVjdHMgdGhlIGFkZCwgZGVsLCB0ZXN0LCBhbmQgZmx1c2ggb3BlcmF0aW9ucyBmb3Igc2V2ZXJhbCBoYXNoIHR5cGVzIChuZXQsIG5ldHBvcnQsIG5ldGlmYWNlLCBuZXRuZXQsIGlwcG9ydG5ldCwgbmV0cG9ydG5ldCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5ldGZpbHRlciBpcHNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyByZWFkZXIgbG9naWMgYW5kIGFycmF5IHNoaWZ0aW5nIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMTIwNjc4OWViM2QxYjU4NjcwMjk1NDAyMTk3ZjczMDdkYjY2YjYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMDo0OToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5pbmRleCBmMDBjODJhY2Q3ZjA1Li5lYTcyYjk3OTRmODgwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcdTAwM2VcbiBcbkBAIC05OCwxNCArOTksMzQgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2RlZmluZSBJUFNFVF9ORVRfQ09VTlRcdFx0MVxuICNlbmRpZlxuIFxuLS8qIEJvb2sta2VlcGluZyBvZiB0aGUgcHJlZml4ZXMgYWRkZWQgdG8gdGhlIHNldCAqL1xuKy8qKlxuKyAqIHN0cnVjdCBuZXRfcHJlZml4IC0gUmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIHByZWZpeC5cbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aC5cbisgKiBAY291bnQ6IE51bWJlciBvZiBvY2N1cnJlbmNlcy5cbisgKi9cbiBzdHJ1Y3QgbmV0X3ByZWZpeCB7XG4tXHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4tXHR1MzIgY291bnQ7XHRcdFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqL1xuK1x0dTMyIGNpZHI6ODtcbitcdHUzMiBjb3VudDoyNDtcbiB9O1xuIFxuKyNkZWZpbmUgQ0lEUl9NQVhfQ09VTlQgKCgxIFx1MDAzY1x1MDAzYyAyNCkgLSAxKVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBuZXRfcHJlZml4ZXMgLSBBIGNvbGxlY3Rpb24gb2YgbmV0d29yayBwcmVmaXhlcy5cbisgKiBAcmN1OiBSQ1UgaGVhZFxuKyAqIEBzZXE6IFNlcXVlbmNlIGNvdW50ZXIgZ3VhcmRpbmcgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiBAbmV0c1xuKyAqIEBsZW46IE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheS5cbisgKiBAbmV0czogQXJyYXkgb2YgbmV0X3ByZWZpeCBzdHJ1Y3R1cmVzIChzb3J0ZWQgYnkgQ0lEUiBkZXNjZW5kaW5nKS5cbisgKlxuKyAqIEBuZXRzIGVudHJpZXMgYXJlIHVwZGF0ZWQgaW4gcGxhY2UgdW5kZXIgQHNldCdzIGxvY2suIEEgc2luZ2xlIGVudHJ5J3NcbisgKiBjaWRyL2NvdW50IHBhaXIgaXMgYWx3YXlzIHVwZGF0ZWQgYXRvbWljYWxseSB2aWEgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpLFxuKyAqIGJ1dCByZW1vdmluZyBhbiBlbnRyeSBhbHNvIHNoaWZ0cyBldmVyeSBmb2xsb3dpbmcgZW50cnkgZG93biBieSBvbmUgc2xvdC5cbisgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlXG4rICogaW5kZXhlZCBzbG90KSBtdXN0IHVzZSBAc2VxIHRvIGRldGVjdCBhbmQgcmV0cnkgYWNyb3NzIHN1Y2ggYSBzaGlmdC5cbisgKi9cbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRzZXFjb3VudF9zcGlubG9ja190IHNlcTtcbiBcdHU4IGxlbjtcbiBcdHN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXSBfX2NvdW50ZWRfYnkobGVuKTtcbiB9O1xuQEAgLTE0Myw4ICsxNjQsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXG4gI2VuZGlmXG4gXG4gI2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoe1x0XHRcdFx0XFxcbi1cdGNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTtcdFx0XFxcbi1cdERDSURSX1BVVCgoX19uKS1cdTAwM2VsZW4gPyAoX19uKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spO1xcXG4rXHRjb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7XHRcXFxuK1x0c3RydWN0IG5ldF9wcmVmaXggX19wID1cdFx0XHRcdFx0XFxcbitcdFx0X19uLVx1MDAzZWxlbiA/IFJFQURfT05DRShfX24tXHUwMDNlbmV0c1swXSlcdFx0XFxcbitcdFx0XHQgOiAoc3RydWN0IG5ldF9wcmVmaXgpe307XHRcdFxcXG4rXHREQ0lEUl9QVVQoX19wLmNvdW50ID8gX19wLmNpZHIgOiBob3N0X21hc2spO1x0XHRcXFxuIH0pXG4gXG4gI2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xuQEAgLTMxOCwyNyArMzQyLDQzIEBAIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xuIH07XG4gXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLS8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcbi0gKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgKyAxIHRvIHN1cHBvcnQgLzAuXG4rLyoqXG4rICogbXR5cGVfYWRkX2NpZHIgLSBBZGQgYSBDSURSIGVudHJ5IHRvIGhhc2ggdGFibGUgYm9va2tlZXBpbmdcbisgKiBAc2V0OiBQb2ludGVyIHRvIHRoZSBpcF9zZXRcbisgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGVcbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aFxuKyAqIEBuOiBUaGUgaW5kZXggb2YgdGhlIG5ldF9wcmVmaXggYXJyYXkgdG8gYWRkIEBjaWRyIHRvXG4rICpcbisgKiBQZXJmb3JtcyBhbiB1cGRhdGUgaWYgQGNpZHIgaXMgZm91bmQsIG90aGVyd2lzZSBwZXJmb3JtcyBDT1ctc3R5bGVcbisgKiBhbGxvY2F0aW9uIGFuZCByZXBsYWNlbWVudCB2aWEgUkNVLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4gbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbiBcdGludCBpLCBqLCBmb3VuZCwgbGVuID0gMCwgcmV0ID0gMDtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeCBucDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbi1cdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbitcdFx0aWYgKG5wLmNvdW50KVxuIFx0XHRcdGxlbisrO1xuIFx0XHRpZiAoZm91bmQgIT0gLTEpIHtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciBcdTAwM2MgY2lkcikge1xuK1x0XHR9IGVsc2UgaWYgKG5wLmNpZHIgXHUwMDNjIGNpZHIpIHtcbiBcdFx0XHRmb3VuZCA9IGk7XG4tXHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xuLVx0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCsrO1xuK1x0XHR9IGVsc2UgaWYgKG5wLmNpZHIgPT0gY2lkcikge1xuK1x0XHRcdGlmIChucC5jb3VudCBcdTAwM2MgQ0lEUl9NQVhfQ09VTlQpIHtcbitcdFx0XHRcdG5wLmNvdW50Kys7XG4rXHRcdFx0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tpXSwgbnApO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRyZXQgPSAtRU9WRVJGTE9XO1xuK1x0XHRcdH1cbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0fVxuQEAgLTM1MCw2ICszOTAsNyBAQCBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiBcdH1cbiBcbiBcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNnRtcC1cdTAwM2VzZXEsIFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSsrKSB7XG4gXHRcdGlmIChpID09IGZvdW5kKSB7XG4gXHRcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG5AQCAtMzcxLDQyICs0MTIsNjAgQEAgbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBtdHlwZV9kZWxfY2lkciAtIFJlbW92ZSBDSURSIGVudHJ5IGFuZCBtYWludGFpbiBhcnJheSBpbnRlZ3JpdHkuXG4rICogQHNldDogUG9pbnRlciB0byB0aGUgaXBfc2V0LlxuKyAqIEBoOiBQb2ludGVyIHRvIHRoZSBodHlwZS5cbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aC5cbisgKiBAbjogVGhlIGluZGV4IG9mIHRoZSBuZXRfcHJlZml4IGFycmF5IHRvIHJlbW92ZSBAY2lkciBmcm9tXG4rICpcbisgKiBJZiBDSURSIGVudHJ5IGNvdW50IGZhbGxzIHRvIDAsIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBcInNoaWZ0LWxlZnRcIlxuKyAqIG9wZXJhdGlvbiBvbiBhbGwgZm9sbG93aW5nIGVsZW1lbnRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXkgcmVtYWluc1xuKyAqIGNvbnRpZ3VvdXMgYW5kIG1haW50YWlucyBpdHMgZGVzY2VuZGluZyBvcmRlciBieSBDSURSLiBUaGUgdmFjYXRlZCBzbG90XG4rICogYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgemVyb2VkIG91dCAoY2lkcj0wLCBjb3VudD0wKS5cbisgKi9cbiBzdGF0aWMgdm9pZFxuIG10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4tXHR1OCBpLCBqLCBsZW4gPSAwO1xuK1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cztcbitcdHN0cnVjdCBuZXRfcHJlZml4IG5wO1xuIFx0aW50IGZvdW5kO1xuK1x0dTggaSwgajtcbitcbitcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpICE9IHNpemVvZih1MzIpKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbi1cdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbi1cdFx0XHRsZW4rKztcbi1cdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXG4rXHRcdG5wID0gUkVBRF9PTkNFKG5ldHMtXHUwMDNlbmV0c1tpXSk7XG4rXHRcdGlmIChucC5jb3VudCBcdTAwMjZcdTAwMjYgbnAuY2lkciA9PSBjaWRyKSB7XG4rXHRcdFx0bnAuY291bnQtLTtcbiBcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbiBcdGlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0bmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudC0tO1xuLVx0aWYgKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuLVx0bGVuLS07XG4tXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghdG1wKVxuLVx0XHQvKiBMZWF2ZSBhIGhvbGUgKi9cbitcdGlmIChucC5jb3VudCkge1xuK1x0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0sIG5wKTtcbiBcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXG4tXHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuK1x0d3JpdGVfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0cy1cdTAwM2VzZXEpO1xuIFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbi1cdFx0aWYgKCFuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQgfHwgaSA9PSBmb3VuZClcbitcdFx0aWYgKGkgPT0gZm91bmQpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbi1cdFx0dG1wLVx1MDAzZW5ldHNbaisrXS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbitcbitcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbitcdFx0aWYgKGkgIT0gailcbitcdFx0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tqXSwgbnApO1xuK1x0XHRqKys7XG4gXHR9XG4tXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbi1cdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuK1xuK1x0d2hpbGUgKGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuKVxuK1x0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tqKytdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xuK1x0d3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNm5ldHMtXHUwMDNlc2VxKTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gfVxuQEAgLTQ1MSw3ICs1MTAsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaHRhYmxlICp0O1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG5AQCAtNDc3LDE3ICs1MzYsMTUgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0fVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKSB7XG4tXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuLVx0XHR0bXAgPSBremFsbG9jX29iaigqdG1wLCBHRlBfQVRPTUlDKTtcbi1cdFx0aWYgKCF0bXApIHtcbi1cdFx0XHR1OCBqO1xuK1x0XHR1OCBqO1xuIFxuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBqKyspXG4tXHRcdFx0XHRuZXRzLVx1MDAzZW5ldHNbal0uY291bnQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVx1MDAzZXJuZXRzW2ldLCB0bXApO1xuLVx0XHRcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuLVx0XHR9XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4rXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuK1x0XHR3cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBqKyspXG4rXHRcdFx0V1JJVEVfT05DRShuZXRzLVx1MDAzZW5ldHNbal0sIChzdHJ1Y3QgbmV0X3ByZWZpeCl7fSk7XG4rXHRcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdH1cbiAjZW5kaWZcbiB9XG5AQCAtMTI1MywzMSArMTMxMCw0MSBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4gXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMTtcbiBcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcbitcdHVuc2lnbmVkIGludCBzZXExO1xuIFx0aW50IHJldCwgaSwgaiwgaztcbiAjZWxzZVxuIFx0aW50IHJldCwgaSwgajtcbiAjZW5kaWZcbi1cdHUzMiBrZXksIG11bHRpID0gMDtcbitcdHVuc2lnbmVkIGludCBzZXEwO1xuK1x0dTMyIGtleSwgbXVsdGk7XG4gXHR1OCBwb3M7XG4gXG4gXHRwcl9kZWJ1ZyhcInRlc3QgYnkgbmV0c1xcblwiKTtcbiBcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbityZXRyeTpcbitcdG11bHRpID0gMDtcbiBcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMF0pO1xuK1x0c2VxMCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0czAtXHUwMDNlc2VxKTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMV0pO1xuK1x0c2VxMSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0czEtXHUwMDNlc2VxKTtcbiAjZW5kaWZcbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMwLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBqKyspIHtcbi1cdFx0aWYgKCFuZXRzMC1cdTAwM2VuZXRzW2pdLmNvdW50KVxuK1x0XHRzdHJ1Y3QgbmV0X3ByZWZpeCBwMCA9IFJFQURfT05DRShuZXRzMC1cdTAwM2VuZXRzW2pdKTtcbitcbitcdFx0aWYgKCFwMC5jb3VudClcbiBcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XG4rXHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBwMC5jaWRyLCBmYWxzZSk7XG4gXHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG5ldHMxLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBrKyspIHtcbi1cdFx0XHRpZiAoIW5ldHMxLVx1MDAzZW5ldHNba10uY291bnQpXG4rXHRcdFx0c3RydWN0IG5ldF9wcmVmaXggcDEgPSBSRUFEX09OQ0UobmV0czEtXHUwMDNlbmV0c1trXSk7XG4rXG4rXHRcdFx0aWYgKCFwMS5jb3VudClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cdTAwM2VuZXRzW2tdLmNpZHIsIHRydWUpO1xuK1x0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBwMS5jaWRyLCB0cnVlKTtcbiAjZWxzZVxuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyKTtcbitcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAwLmNpZHIpO1xuICNlbmRpZlxuIFx0XHRrZXkgPSBIS0VZKGQsIGgtXHUwMDNlaW5pdHZhbCwgdC1cdTAwM2VodGFibGVfYml0cyk7XG4gXHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfYmgoaGJ1Y2tldCh0LCBrZXkpKTtcbkBAIC0xMzAyLDYgKzEzNjksMTMgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHR9XG4gI2VuZGlmXG4gXHR9XG4rXG4rXHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZuZXRzMC1cdTAwM2VzZXEsIHNlcTApKVxuK1x0XHRnb3RvIHJldHJ5O1xuKyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuK1x0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0czEtXHUwMDNlc2VxLCBzZXExKSlcbitcdFx0Z290byByZXRyeTtcbisjZW5kaWZcbiBcdHJldCA9IDA7XG4gdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG5AQCAtMTcwNyw2ICsxNzgxLDcgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzWy0taV0pKTtcbiBcdFx0XHRnb3RvIGZyZWVfaHJlZ2lvbjtcbiBcdFx0fVxuK1x0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNm5ldHMtXHUwMDNlc2VxLCBcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2VybmV0c1tpXSwgbmV0cyk7XG4gXHR9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbkBAIC0zOCw3ICszOCw2IEBAIE1PRFVMRV9BTElBUyhcImlwX3NldF9oYXNoOm5ldCxpZmFjZVwiKTtcbiAjZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0aWZhY2VcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwXG4gXG4gI2RlZmluZSBTVFJTQ1BZKGEsIGIpXHRzdHJzY3B5KGEsIGIsIElGTkFNU0laKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbmluZGV4IDYyOTE1MzJiZTdhNWEuLjYxYWYxY2UyNzEyNzkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbkBAIC0zNiw3ICszNiw2IEBAIE1PRFVMRV9BTElBUyhcImlwX3NldF9oYXNoOm5ldCxwb3J0LG5ldFwiKTtcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuIFxuIC8qIElQdjQgdmFyaWFudCAqL1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MTguNjMwMDIyNzE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5MDI1NjI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwc2V0IFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGVkIGEgZmV3IGZpbGVzIGluIHRoZSBgbmV0ZmlsdGVyL2lwc2V0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AsIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gSXQncyBpbnRyb2R1Y2luZyBhIGBzZXFjb3VudF9zcGlubG9ja190YCB0byBwcm90ZWN0IHNvbWUgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiBgbmV0c2Agd2l0aGluIGBzdHJ1Y3QgbmV0X3ByZWZpeGVzYC4gVGhhdCBzaWduYWxzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGNvbmNlcm4gdGhleSdyZSBhZGRyZXNzaW5nLCB3aGljaCBpcyB3b3J0aCBrZWVwaW5nIGluIG1pbmQuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGhvdyBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIGZ1bmN0aW9uLiBBbmQgaXQgc2VlbXMgdG8gYmUgcmVtb3ZpbmcgYCNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwYCBmcm9tIHRob3NlIGxhc3QgdHdvIGAuY2AgZmlsZXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEdpdmVuIHRoYXQgaXQncyBwYXJ0IG9mIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3ZSdyZSB0YWxraW5nIGFib3V0IGhhc2ggdHlwZXMgaW4gcGFydGljdWxhciwgaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gYGlwX3NldF9oYXNoX2dlbi5oYCBpcyBhIHRlbXBsYXRlIGhlYWRlciwgc28gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoZXJlIHdpbGwgZ2V0IGluc3RhbnRpYXRlZCBhY3Jvc3MgbXVsdGlwbGUgYGlwX3NldF9oYXNoXyouY2AgZmlsZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgLiBUaGV5J3JlIHN0YXRpYyB3aXRoaW4gYSBoZWFkZXIsIG1lYW5pbmcgdGhleSdsbCBtYW5pZmVzdCBhcyBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXRfYWRkX2NpZHJgLCBgaGFzaF9uZXRwb3J0X2FkZF9jaWRyYCwgZXRjLlxuXG5XYWl0LCBgbXR5cGVfYWRkX2NpZHJgIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgbXR5cGVfYWRkX2NpZHIoLi4uKWAuIFNpbmNlIGl0J3MgaW4gYSBoZWFkZXIsIGl0J3MgaW5jbHVkZWQgaW4gbXVsdGlwbGUgQyBmaWxlcy4gSW50ZXJlc3RpbmcuIExldCdzIHNlZSBob3cgYG10eXBlX2FkZF9jaWRyYCBnZXRzIHVzZWQuIEFoLCBpdCdzIGNhbGxlZCBieSBgbXR5cGVfYWRkYC4gUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBoZWFkZXIgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlIHRoYXQgc3RyYWlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OToyNC43MjAyODEzNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0Nzc1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfYWRkX2NpZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOS0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIyMDojdW5kZWYgbXR5cGVfYWRkX2NpZHJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyMS0jdW5kZWYgbXR5cGVfZGVsX2NpZHJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MjQuNzY5NzY1MTE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1OTcyMDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFNFVCBJbnN0YW50aWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIElQU0VUIHRva2Vucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5J3JlIGluc3RhbnRpYXRlZC4gVGhlIGNvZGUncyB1c2luZyBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgbmFpbCBkb3duIHdoYXQgdGhpcyBgTVRZUEVgIGlzLiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLiBVbmRlcnN0YW5kaW5nIGBNVFlQRWAgd2lsbCBnaXZlIHVzIHRoZSBjb250ZXh0IGZvciBob3cgdGhpcyBwYXJ0aWN1bGFyIENJRFIgYWRkaXRpb24gaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgSVBTRVQgZnJhbWV3b3JrLiBJdOKAmXMgdGhlIGNyaXRpY2FsIHBpZWNlIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBwdXJwb3NlIG9mIHRoZSBpbnN0YW50aWF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlIG9yIHR5cGUgYE1UWVBFYCByZXByZXNlbnRzLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjY4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MjcuNzI5NDg4NzgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjUyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTVRZUEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9pcFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDppcCxtYWNcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzozNTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX2lwbWFjXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0yNz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6cG9ydFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMjgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoyOTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX3BvcnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTMwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTcwPWhhc2hfaXA0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqbmV4dCwgY29uc3Qgc3RydWN0IGhhc2hfaXA0X2VsZW0gKmUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjc1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy03Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjAyPWhhc2hfaXA2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqbmV4dCwgY29uc3Qgc3RydWN0IGhhc2hfaXA2X2VsZW0gKmUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMDk6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXA2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIxMC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTcyPWhhc2hfaXBtYWM0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hYzRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6Nzg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYWM0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTc5LSNkZWZpbmUgUEZcXHRcXHQ0XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MTgwPWhhc2hfaXBtYWM2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hYzZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xODktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjE5MDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hYzZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTkxLSNkZWZpbmUgUEZcXHRcXHQ2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFyazRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMTItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYXJrNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy04NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yNTctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg0LS8qIENvbW1vbiBmdW5jdGlvbnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0aXA0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMjgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zODctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy02NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX21hYzRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yODAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI4PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRpZmFjZTRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjI9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM2OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcwOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldGlmYWNlNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzEtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xMzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEyMy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNDItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzE9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTEzNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI1PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00MzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM0OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjQ5OjI3Ljc3NjE0Nzc2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDc1NjAyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgSGFzaCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJUCBzZXQgaGFzaCB0eXBlcy4gSXQgc2VlbXMgYE1UWVBFYCBpcyBhIHBsYWNlaG9sZGVyLCBhbmQgaXQgZXhwYW5kcyB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCB2YXJpYXRpb25zOiBgaGFzaF9uZXQ0YCwgYGhhc2hfbmV0NmAsIGBoYXNoX25ldHBvcnQ0YCwgYGhhc2hfbmV0cG9ydDZgLCBhbmQgdGhlIGxpa2UuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlJ3JlIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgYWRkcmVzcyB0eXBlcyBhbmQgcG9ydCBjb21iaW5hdGlvbnMuIFRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgbmFtZWQgYWNjb3JkaW5nbHksIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgc28gZmFyLlxuXG5XYWl0LCBJIG5lZWQgdG8gem9vbSBpbiBoZXJlIGZvciBhIG1vbWVudC4uLiBpdCBsb29rcyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoYXQncyBub3QgZXhwb3NlZCBleHRlcm5hbGx5LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU28gdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSBwYXJ0IG9mIHRoZSBgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRgLCBhcmUgYWN0dWFsbHkgYGhhc2hfbmV0NF9rYWR0YCwgYGhhc2hfbmV0NF91YWR0YCwgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCBgaGFzaF9uZXQ0X3Rlc3RgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLlxuXG5JJ20gZ29pbmcgdG8gY2hlY2sgaG93IGBtdHlwZV9hZGRgIGlzIGRlZmluZWQgdG8gY2xhcmlmeSB0aGVzZSBudWFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMyOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTozMS45ODM3MTE1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM5MDIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTozMi4wMzQxMDk3MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA1OTg3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaXBfc2V0X3R5cGVfdmFyaWFudGAgRXhwb3J0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBleHBvcnRzIGFzc29jaWF0ZWQgd2l0aCBgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0J3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFdoYXQgbWV0aG9kcyBhcmUgKm1lYW50KiB0byBiZSBjYWxsZWQgdGhyb3VnaCB0aGF0IGludGVyZmFjZT8gSSdtIGFzc3VtaW5nIHRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgSVAgc2V0IGZyYW1ld29yaywgd2hpY2ggaXMgd2h5IHdlIGFyZSBsb29raW5nIGhlcmUuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nIHRoZSBiZWhhdmlvciBvZiBkaWZmZXJlbnQgSVAgc2V0IHR5cGVzLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIE15IGZvY3VzIHdpbGwgYmUgdG8gaWRlbnRpZnkgdGhlIG1ldGhvZHMgdGhhdCBlbmFibGUgZGlmZmVyZW50IHR5cGVzIG9mIElQIHNldHMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkluaXRpYWxpemF0aW9uIGFuZCBEZXN0cnVjdGlvbjoqKiBIb3cgYXJlIHRoZXNlIElQIHNldCB0eXBlcyBpbnN0YW50aWF0ZWQgYW5kIGNsZWFuZWQgdXA/IEFyZSB0aGVyZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBkaWZmZXJlbnQgdHlwZXM/XG4qICAgKipJbnNlcnRpb24gYW5kIERlbGV0aW9uOioqIEhvdyBhcmUgSVAgYWRkcmVzc2VzIG9yIG5ldHdvcmtzIGFkZGVkIHRvIGFuZCByZW1vdmVkIGZyb20gdGhlc2Ugc2V0cz8gSSdtIGJldHRpbmcgdGhlcmUncyBhIHBvbHltb3JwaGljIGFzcGVjdCBoZXJlLlxuKiAgICoqTWVtYmVyc2hpcCBDaGVja2luZzoqKiBJcyB0aGUgQVBJIHByb3ZpZGVkIHRvIGNoZWNrIGlmIGFuIElQIGFkZHJlc3Mgb3IgbmV0d29yayBpcyBwcmVzZW50IGluIGEgc2V0PyBIb3cgZWZmaWNpZW50IGlzIHRoaXM/XG4qICAgKipJdGVyYXRpb246KiogQ2FuIEkgaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhbiBJUCBzZXQgb2YgdGhpcyB0eXBlPyBXaGF0J3MgdGhlIGludGVyZmFjZSBmb3IgdGhhdD9cbiogICAqKlBlcnNpc3RlbmNlL1NlcmlhbGl6YXRpb246KiogSG93IGFyZSB0aGUgSVAgc2V0cyBzYXZlZCBhbmQgcmVzdG9yZWQ/IFdoYXQgZGF0YSBmb3JtYXRzIGFyZSB0aGV5IHVzaW5nP1xuKiAgICoqSW50ZXJuYWwgRGV0YWlsczoqKiBBbnkgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIG1lbW9yeSBvciBzcGVjaWFsIHR5cGVzLlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgSSBuZWVkIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgdGhpcyBjb2RlIGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlIGFuZCBlZmZpY2llbmN5LiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBiZSB1c2VkIGluIHRoZSBrZXJuZWwuIEZpbmFsbHksIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHN0YW5kYXJkIEFQSSwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjQ5OjM1Ljk0MDA5OTg4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MzYzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mjg9SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjMyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cXHQua2FkdFxcdD0gbXR5cGVfa2FkdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MzUuOTg3NzQxMzU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjIxMDc3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIGBtdHlwZV92YXJpYW50YCBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBgbXR5cGVfdmFyaWFudGAgZGVmaW5pdGlvbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgdGhpcyB0aGluZyAqaXMqLiBJIHdhbnQgdG8gc2VlIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBpdHMgc3RydWN0dXJlLCBpdHMgcHJvcGVydGllcywgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIHN5c3RlbSBvciBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBjb21wb25lbnRzLiBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBbiBhYnN0cmFjdCBjb25jZXB0PyBIb3cgZG9lcyBpdCByZWxhdGUgdG8gb3RoZXIgKm10eXBlKiBkZWZpbml0aW9ucywgb3Igb3RoZXIgdmFyaWFudHM/IEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSAtIGlzIGl0IGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGdlbmVyaWNzIG9yIHBvbHltb3JwaGlzbT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGVmaW5pdGlvbiBpdHNlbGY/IExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODYwLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MzkuMjQ5ODUxNzA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQxMzYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTozOS4yOTUyNzE0MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1ODczMTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbXR5cGVfdmFyaWFudGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIFRoZSB0aG91Z2h0IHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBUaGUgY29yZSBvZiBteSBjdXJyZW50IHdvcmsgaW52b2x2ZXMgdW5kZXJzdGFuZGluZyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgbGV2ZXJhZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBgbXR5cGVfdmFyaWFudGAuIFNvLCBuYXR1cmFsbHksIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgY3J5c3RhbC1jbGVhciBwaWN0dXJlIG9mIHdoYXQgaXQgKmlzKi4gVGhhdCBtZWFucyB0aGUgZGVmaW5pdGlvbiBpcyBwYXJhbW91bnQuIEknbSBnb2luZyB0byBwb3JlIG92ZXIgaXQsIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHN0cnVjdHVyZSwgYW55IGFzc29jaWF0ZWQgY29uc3RyYWludHMgb3IgcHJlY29uZGl0aW9ucywgYW5kIGVzcGVjaWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMsIG5vdCBqdXN0IGEgc3VyZmFjZS1sZXZlbCBvdmVydmlldy4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciB0eXBlIHNhZmV0eSwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwZXJmb3JtYW5jZSBvbmNlIEknbSBsb29raW5nIGF0IGl0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBhdCBhIGxldmVsIG9mIGRldGFpbCB0aGF0IGFsbG93cyBmb3IgY29uZmlkZW50IGRlY2lzaW9uLW1ha2luZyByZWdhcmRpbmcgaXRzIGFwcGxpY2F0aW9uIG9yIHBvdGVudGlhbCByZWZhY3RvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo0Mi40NTQwMDU3MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTYzMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYzMjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4xNjMzOlxcdFxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcbjE2MzQ6XFx0XFx0LnVhZHRcXHQ9IG10eXBlX3VhZHQsXFxuMTYzNTpcXHRcXHQuYWR0XFx0PSB7XFxuMTYzNjpcXHRcXHRcXHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcXG4xNjM3OlxcdFxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbjE2Mzg6XFx0XFx0XFx0W0lQU0VUX1RFU1RdID0gbXR5cGVfdGVzdCxcXG4xNjM5OlxcdFxcdH0sXFxuMTY0MDpcXHRcXHQuZGVzdHJveSA9IG10eXBlX2Rlc3Ryb3ksXFxuMTY0MTpcXHRcXHQuZmx1c2hcXHQ9IG10eXBlX2ZsdXNoLFxcbjE2NDI6XFx0XFx0LmhlYWRcXHQ9IG10eXBlX2hlYWQsXFxuMTY0MzpcXHRcXHQubGlzdFxcdD0gbXR5cGVfbGlzdCxcXG4xNjQ0OlxcdFxcdC51cmVmXFx0PSBtdHlwZV91cmVmLFxcbjE2NDU6XFx0XFx0LnJlc2l6ZVxcdD0gbXR5cGVfcmVzaXplLFxcbjE2NDY6XFx0XFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXFxuMTY0NzpcXHRcXHQuY2FuY2VsX2djID0gbXR5cGVfY2FuY2VsX2djLFxcbjE2NDg6XFx0XFx0LnJlZ2lvbl9sb2NrID0gdHJ1ZSxcXG4xNjQ5OlxcdH07XFxuMTY1MDpcXHRcXG4xNjUxOlxcdCNpZmRlZiBJUF9TRVRfRU1JVF9DUkVBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NDIuNDU0MTE4MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjU1MDM1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIGRpdmluZyBpbnRvIHRoaXMgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaW1wbGVtZW50YXRpb24uLi5cblxuKipBbmFseXppbmcgdGhlIE1UWVBFIEZ1bmN0aW9uIEluc3RhbnRpYXRpb24qKlxuXG5SaWdodCwgc28gdGhlc2UgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzOiBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0YCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2thZHRgLCBgbXR5cGVfdWFkdGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0YW5kYXJkIHN0dWZmLCBidXQgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgY29udGV4dCByaWdodC4gVGhlc2UgYXJlIGluc3RhbnRpYXRlZCAqcGVyKiBgTVRZUEVgLiBUaGF0J3MgdGhlIGtleS4gRWFjaCBgTVRZUEVgIGdldHMgaXRzIG93biBzZXQgb2YgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBpbiBvcmRlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgc2V0LCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0IGBNVFlQRWBzIGRlZmluZSB0aGUgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgdHlwZS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuIEkndmUgZ290IHRvIGZvbGxvdyB0aGUgZGVmaW5pdGlvbnMgYW5kIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGNhbGxzIGFyZSBwdXQgaW50byBvcGVyYXRpb24gZm9yIHRoZSBicm9hZGVyIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NDUuOTE5NjI2NjEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzMjMzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM2PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6aXAscG9ydCxuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDQtICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0NTojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zNi0jZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNT1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxpZmFjZVxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4LSNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldGlmYWNlXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM5OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQwLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzUtI2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbmV0bmV0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0tcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTM1PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LHBvcnRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjQwOiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtNDEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzo0NjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0zNi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzozNzojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM4LSNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NDUuOTY2NTYzMjI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzMwMjUzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSGFzaCBNVFlQRXMgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2UgTVRZUEVzOiBgaGFzaF9pcHBvcnRuZXQ0YCwgYGhhc2hfaXBwb3J0bmV0NmAsIGBoYXNoX25ldDRgLCBgaGFzaF9uZXQ2YCwgYGhhc2hfbmV0aWZhY2U0YCwgYGhhc2hfbmV0aWZhY2U2YCwgYGhhc2hfbmV0bmV0NGAsIGBoYXNoX25ldG5ldDZgLCBgaGFzaF9uZXRwb3J0NGAsIGBoYXNoX25ldHBvcnQ2YCwgYGhhc2hfbmV0cG9ydG5ldDRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldDZgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBoZXJlLiBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlaXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYF9hZGRgLCBgX2RlbGAsIGBfdGVzdGAsIGFuZCBgX2ZsdXNoYCBmdW5jdGlvbnMgZm9yIGVhY2ggdHlwZS4gSSdtIHRoaW5raW5nLCBmb3IgZXhhbXBsZSwgYWJvdXQgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGFuZCBgaGFzaF9uZXQ0X2ZsdXNoYDsgYW5kIHNpbWlsYXJseSBmb3IgYG5ldDZgLCBgbmV0cG9ydGAsIGBuZXRpZmFjZWAsIGFuZCB0aGUgY29tYmluZWQgdHlwZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyBvcGVyYXRlcyB3aXRoaW4gaXRzIHJlc3BlY3RpdmUgY29udGV4dC5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBsaXN0ZWQgaW4gdGhlIGhlYWRlci4gVGhhdCBtZWFucyB0aGV5J3JlIGVpdGhlciBpbmxpbmVkIG9yIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIG9iamVjdCBmaWxlLCBhbmQgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIElzIGBtdHlwZV9hZGRfY2lkcmAgb25lIG9mIHRoZW0/IEFuZCBgbXR5cGVfYWRkYD8gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgYWN0dWFsbHkgKmlzKiBleHBvcnRlZCBhcyBhIHN5bWJvbCwgb3IgaWYgaXQncyBhbHNvIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCBvciBoaWRkZW4uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NTIuMzM5NTkwNDc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo1Mi4zODUwOTU1OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzA4MTE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYG10eXBlX2FkZGAgYW5kIGBtdHlwZV92YXJpYW50YCoqXG5cblJpZ2h0LCBzbyBgbXR5cGVfYWRkYC4uLiBJIHJlY2FsbCB0aGF0J3MgZGVjbGFyZWQgc3RhdGljLiBBbmQgaXQncyBhc3NpZ25lZCB0byBhIHNwZWNpZmljIGVsZW1lbnQgd2l0aGluIGBtdHlwZV92YXJpYW50LmFkdGAsIHNwZWNpZmljYWxseSB0aGUgb25lIGluZGV4ZWQgYnkgYElQU0VUX0FERGAuIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBmbGFnLiBTaW5jZSBgbXR5cGVfYWRkYCBpcyBzdGF0aWMsIGl0J3Mgc2NvcGVkIHRvIHRoZSBmaWxlIG9yIHRyYW5zbGF0aW9uIHVuaXQuIFRoZW4gdGhlcmUncyBgbXR5cGVfdmFyaWFudGAsIHdoaWNoIGlzICphbHNvKiBzdGF0aWMhIFRoYXQgc3VnZ2VzdHMgdGhpcyBzdHJ1Y3R1cmUgaXMgY29yZSB0byBhIGxpbWl0ZWQgc2NvcGUsIG1heWJlIGV2ZW4gYSBzaW5nbGV0b24gcGF0dGVybiwgb3IgYXQgbGVhc3QgYSB0aWdodGx5IGNvbnRyb2xsZWQgYWNjZXNzIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgZmFjdCB0aGF0IGJvdGggYXJlIHN0YXRpYyB0ZWxscyBtZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIGRlc2lnbi4gV2hlcmUsIGFuZCBob3cgaXMgYG10eXBlX3ZhcmlhbnRgIGFjdHVhbGx5IGJlaW5nIHVzZWQ/IEtub3dpbmcgaXRzIHVzYWdlIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgc3RhdGljIGFzc2lnbm1lbnQuIExldCdzIHRyYWNlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTk2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NTUuNjEyMTgwMjk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzMDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV92YXJpYW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiN1bmRlZiBtdHlwZV92YXJpYW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctI3VuZGVmIG10eXBlX2RhdGFfbWF0Y2hcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjkzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyOTQ6I2RlZmluZSBtdHlwZV92YXJpYW50XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjk1LSNkZWZpbmUgbXR5cGVfZGF0YV9tYXRjaFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9tYXRjaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo1NS42NTc3MTY0MDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwOTA4NDcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIFNldCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBgbXR5cGVfdmFyaWFudGAgaXMgdGllZCB0byBhIHNwZWNpZmljIGhhc2ggdmFyaWFudCwgaW4gdGhpcyBjYXNlLCBgaGFzaF9uZXQ0X3ZhcmlhbnRgIGFuZCB0aGUgbGlrZS4gVGhhdCdzIHRoZSBmaXJzdCBjb25uZWN0aW9uLiBOb3cgSSByZWNhbGwgdGhhdCB0aGlzIGBtdHlwZV92YXJpYW50YCBpcyB0aGVuIHBhc3NlZCB0byBgaXBfc2V0X3R5cGVfcmVnaXN0ZXJgLiBIbW0sIEkgc2hvdWxkIHRyYWNlIHRoYXQuXG5cblRoaXMgY2FsbHMgZm9yIGEgY2xvc2VyIGxvb2sgYXQgYGlwX3NldF9oYXNoX25ldC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhcmlhbnRzIGFyZSByZWdpc3RlcmVkIGFuZCBob3cgdGhlaXIgc3BlY2lmaWMgcHJvcGVydGllcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgSVAgc2V0IGZyYW1ld29yay4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGBtdHlwZV92YXJpYW50YCBhc3NvY2lhdGlvbi4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIGludm9sdmVkPyBJIGV4cGVjdCB0byBmaW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2hpbmcgbG9naWMsIHRoZSBjb2xsaXNpb24gaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWMgdG8gdGhlc2UgbmV0LWJhc2VkIHNldHMuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo1OS41NjY4MDQyMDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDY5OTM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NTkuNjExODg2MjYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzI4NTM3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbXR5cGVfdmFyaWFudGAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIGxldCBtZSBqdXN0IHRoaW5rIHRoaXMgdGhyb3VnaC4uLiB0aGUgYG10eXBlX3ZhcmlhbnRgIGlzIGRlZmluZWQgYXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfdmFyaWFudClgLiBSaWdodCwgc28gdGhhdCdzIHRoZSBiYXNlIHN0cnVjdHVyZS4gTm93LCBpZiBgTVRZUEVgIGhhcHBlbnMgdG8gYmUgYGhhc2hfbmV0NGAsIHRoZW4sIGFuZCBvbmx5IHRoZW4sIGBtdHlwZV92YXJpYW50YCBiZWNvbWVzIGBoYXNoX25ldDRfdmFyaWFudGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgaGFzaF9uZXQ0YCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgaXBfc2V0X2hhc2hfbmV0LmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIGFuZCBpbXBsZW1lbnRhdGlvbnMgb2YgYGhhc2hfbmV0NGAuIEhvcGVmdWxseSwgaXQncyB3ZWxsLWRvY3VtZW50ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjExLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MDIuNzg0NzgxNDkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwOTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTQxLS8qIE1lbWJlciBlbGVtZW50cyAgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjQyOnN0cnVjdCBoYXNoX25ldDRfZWxlbSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00My1cXHRfX2JlMzIgaXA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTUxPXN0YXRpYyBib29sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MjpoYXNoX25ldDRfZGF0YV9lcXVhbChjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmlwMSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjUzOlxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICppcDIsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy01NC1cXHRcXHQgICAgIHUzMiAqbXVsdGkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTYwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjYxOmhhc2hfbmV0NF9kb19kYXRhX21hdGNoKGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTYyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9NjY9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjY3Omhhc2hfbmV0NF9kYXRhX3NldF9mbGFncyhzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0sIHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTY4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9NzI9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjczOmhhc2hfbmV0NF9kYXRhX3Jlc2V0X2ZsYWdzKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggKmZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz03OD1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Nzk6aGFzaF9uZXQ0X2RhdGFfbmV0bWFzayhzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0sIHU4IGNpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy04MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTg1PXN0YXRpYyBib29sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo4NjpoYXNoX25ldDRfZGF0YV9saXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTg3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAxPXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDI6aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDM6XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTYte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTE3OlxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTgtXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTE5OlxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIwLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzNy1cXHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMzgte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM5OlxcdHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xNDAtXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQxOlxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQyLVxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTk3LVxcdFxcdGlmIChpIFxcdTAwM2UgSVBTRVRfTUFYX1JBTkdFKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxOTg6XFx0XFx0XFx0aGFzaF9uZXQ0X2RhdGFfbmV4dChcXHUwMDI2aC1cXHUwMDNlbmV4dCwgXFx1MDAyNmUpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTk5LVxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDowMi44MzMzOTg5MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODM0NDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBJUCBTZXQgSGFzaCBHZW5lcmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgcmVmZXJlbmNpbmcgYG10eXBlX3ZhcmlhbnRgLiBSaWdodCwgSSByZWNhbGwgdGhhdCdzIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9nZW4uaGAg4oCTIHRoYXQncyB0aGUgaGVhZGVyIHdoZXJlIHdlIGhhdmUgYWxsIHRob3NlIHR5cGUtc3BlY2lmaWMgaGVscGVyIG1hY3JvcyBhbmQgc3RydWN0dXJlcyBmb3IgZ2VuZXJhdGluZyB0aGUgaGFzaCBzZXRzLiBBaCwgYW5kIGl0J3MgdXNlZCAqd2l0aGluKiB0aGF0IHNhbWUgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2U7IHByb2JhYmx5IGEgbG9jYWwgc3RydWN0dXJlLiBIYW5nIG9uLi4uIGxldCdzIGNvbmZpcm0gdGhlIGRldGFpbHMuIGBtdHlwZV92YXJpYW50YCBpcyAqc3RhdGljIGNvbnN0Kiwgc28gaXQgaXMgZGVmaW5lZCBhdCBjb21waWxlIHRpbWUgYW5kIHNjb3BlZCBpbnRlcm5hbGx5LiBJdCBpcyBhIGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAsIHNvIHRoZSB0eXBlIGlzIGNyaXRpY2FsLiBBaGEsIHllcywgSSdtIHNlZWluZyBpdCBub3c6IGBtdHlwZV92YXJpYW50ID0geyAuLi4gfWAuIFRoYXQgY29uZmlybXMgaXQsIGl0J3MgYSBjb25zdGFudCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBsb29rdXAgdGFibGUgb2Ygc29ydHMgY29udGFpbmluZyBkaWZmZXJlbnQgc2V0dGluZ3MsIG9wdGlvbnMsIG9yIG1ldGFkYXRhIGZvciBoYXNoIHR5cGVzLiBOb3cgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgZ29lcy4uLi4gT2theSwgYW5kIGl0J3MgYmVpbmcgdXNlZCBieSBgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpYC4gSG1tLCBub3cgdGhlIG1hY3JvIGlzIHRoZSBrZXkuIFRoYXQgZXhwYW5kcyB0byBgaGFzaF9uZXRfY3JlYXRlYCDigJMgdGhhdCdzIHRoZSBnZW5lcmljIG5ldCBoYXNoIGNyZWF0aW9uIGZ1bmN0aW9uISBTbyBgbXR5cGVfdmFyaWFudGAgbXVzdCBmZWVkIGludG8gdGhlIGhhc2ggY3JlYXRpb24gcHJvY2VzcyBpdHNlbGYuIFRoYXQgYF9jcmVhdGVgIGZ1bmN0aW9uIHByb2JhYmx5IHVzZXMgdmFsdWVzIGZyb20gYG10eXBlX3ZhcmlhbnRgIHRvIGNvbmZpZ3VyZSB0aGluZ3MgbGlrZSB0aGUgaGFzaGluZyBhbGdvcml0aG0sIHRoZSBidWNrZXQgc2l6ZSwgb3Igb3RoZXIgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBzcGVjaWZpYyBoYXNoIG5ldCBiZWluZyBjcmVhdGVkLiBQZXJmZWN0LCBub3cgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaXRzIHVzYWdlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDgyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MDcuMDkxNzQ3NjQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ0MDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV92YXJpYW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiN1bmRlZiBtdHlwZV92YXJpYW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctI3VuZGVmIG10eXBlX2RhdGFfbWF0Y2hcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjkzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyOTQ6I2RlZmluZSBtdHlwZV92YXJpYW50XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjk1LSNkZWZpbmUgbXR5cGVfZGF0YV9tYXRjaFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9tYXRjaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDowNy4xNDgxOTQwOTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNDMwNDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgY2hlY2ssIHNwZWFraW5nIGFzIG15c2VsZiwgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gYGlwX3NldF9oYXNoX2dlbi5oYCoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXNoIG5ldCBjcmVhdGlvbiBhbmQgdmFyaWFudCBtYW5hZ2VtZW50IGFyZSBpbXBsZW1lbnRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB3aXRoaW4sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGluc3RhbmNlcyB3aGVyZSBgaGFzaF9uZXRfY3JlYXRlYCBvciBgbXR5cGVfdmFyaWFudGAgYXJlIHVzZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCwgdGhlIHBhcmFtZXRlcnMgdGhleSB0YWtlLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgdGhleSBpbXBsZW1lbnQuIElzIHRoZSBgaGFzaF9uZXRfY3JlYXRlYCBmdW5jdGlvbiBwcm9wZXJseSBtYW5hZ2luZyBtZW1vcnk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSB2YXJpYW50IHVzYWdlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtdHlwZV92YXJpYW50YCBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IGBoYXNoX25ldGAgdHlwZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIHRpbWUgdG8gZmluZCBob3cgdGhlc2UgZWxlbWVudHMgY29tYmluZSBhbmQgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gaXMgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjEwLjk4MjUwNDAwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MTczNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10eXBlX3ZhcmlhbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0NS0jdW5kZWYgbXR5cGVfY2FuY2VsX2djXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDY6I3VuZGVmIG10eXBlX3ZhcmlhbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0Ny0jdW5kZWYgbXR5cGVfZGF0YV9tYXRjaFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTMtI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI5NDojZGVmaW5lIG10eXBlX3ZhcmlhbnRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3ZhcmlhbnQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTUtI2RlZmluZSBtdHlwZV9kYXRhX21hdGNoXFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX21hdGNoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMxLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzMtXFx0LmthZHRcXHQ9IG10eXBlX2thZHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjExLjI3MTY4NDEwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIzMjg1MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHdvcms6XG5cbioqSHVudGluZyBEb3duIFRoYXQgYF92YXJpYW50YCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpczogSSBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIGBfdmFyaWFudGAgdGhpbmcgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlwX3NldF9oYXNoX2dlbi5oYCBmaWxlLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHNvbWUgSVAgc2V0IGhhc2ggZ2VuZXJhdGlvbiBwcm9jZXNzLiBGaW5kaW5nIHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGFuZCB3aGF0IHRoZSBhc3NvY2lhdGVkIGxvZ2ljIGlzIGRvaW5nLiBMZXTigJlzIGdldCB0byBzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MTQuMTk0OTczODM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY2ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ1LSN1bmRlZiBtdHlwZV9jYW5jZWxfZ2NcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0NjojdW5kZWYgbXR5cGVfdmFyaWFudFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ3LSN1bmRlZiBtdHlwZV9kYXRhX21hdGNoXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5My0jZGVmaW5lIG10eXBlX2NhbmNlbF9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfY2FuY2VsX2djKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mjk0OiNkZWZpbmUgbXR5cGVfdmFyaWFudFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdmFyaWFudClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5NS0jZGVmaW5lIG10eXBlX2RhdGFfbWF0Y2hcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfbWF0Y2gpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mjg9SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjMyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cXHQua2FkdFxcdD0gbXR5cGVfa2FkdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTY1Mz1JUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE4MjItI2VuZGlmXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxODIzOlxcdFxcdHNldC1cXHUwMDNldmFyaWFudCA9IFxcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNF92YXJpYW50KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE4MjQtXFx0XFx0c2V0LVxcdTAwM2Vkc2l6ZSA9IGlwX3NldF9lbGVtX2xlbihzZXQsIHRiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xODI4LVxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxODI5OlxcdFxcdHNldC1cXHUwMDNldmFyaWFudCA9IFxcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNl92YXJpYW50KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE4MzAtXFx0XFx0c2V0LVxcdTAwM2Vkc2l6ZSA9IGlwX3NldF9lbGVtX2xlbihzZXQsIHRiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoxNC4yNDI2NTE4NTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MjY2NjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBsaW5lLCBgc2V0LVx1MDAzZXZhcmlhbnQgPSBcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNF92YXJpYW50KTtgIOKAkyB0aGF0J3MgdGhlIGtleS4gU28gYGhhc2hfbmV0NF92YXJpYW50YCBpcyB0aGUgYWN0dWFsIG5hbWUsIHdoaWNoIGlzIGdvb2QuIExldCBtZSBzZWUsIGBIVFlQRWAgaXMgZGVmaW5lZCBhcyBgaGFzaF9uZXRgLCBzbyB0aGUgZnVsbCBuYW1lIGlzIGluZGVlZCBgaGFzaF9uZXQ0X3ZhcmlhbnRgLiBBbmQgdGhlbiwgYE1UWVBFYCBpcyBgaGFzaF9uZXQ0YCwgd2hpY2ggbWVhbnMgYG10eXBlX3ZhcmlhbnRgIG11c3QgYWxzbyByZXNvbHZlIHRvIGBoYXNoX25ldDRfdmFyaWFudGAuXG5cbk5vdywgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIOKAkyB0aGV5IGFyZW4ndCBkaXJlY3RseSBleHBvcnRlZC4gVGhleSdyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgdGhleSB3b24ndCBoYXZlIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpbWFnZSB1bmxlc3MgdGhleSBhcmUgKm5vdCogaW5saW5lZC4gQmVjYXVzZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycywgdGhleSBkZWZpbml0ZWx5IGNhbid0IGJlIGlubGluZWQuIFRoaXMgd2lsbCBnZW5lcmF0ZSBzeW1ib2xzISBUaGVpciBuYW1lcyB3aWxsIGJlIHNvbWV0aGluZyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYW5kIHNvIG9uLlxuXG5IYW5nIG9uLi4uIExldCdzIGNvbmZpcm0gdGhhdCBgaGFzaF9uZXQ0X2FkZGAgaXMgdGhlIGFjdHVhbCBuYW1lLiBMZXQncyB0cmFjZSBpdCBiYWNrLiBPa2F5LCBzbyBgbXR5cGVfYWRkYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IG10eXBlX2FkZCguLi4pYC4gQWhhISBCdXQgYG10eXBlX2FkZGAgaXMgYSBtYWNybywgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkxNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoxOC43MjUzMjE1ODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzIxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgbXR5cGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjg6I2RlZmluZSBtdHlwZV9hZGRfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjktI2RlZmluZSBtdHlwZV9kZWxfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI3OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI4MDojZGVmaW5lIG10eXBlX2FkZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjgxLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjE4Ljc3NTY2MzQ5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjc2Nzk1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gTWFwcGluZyBmb3IgSVAgU2V0IE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEkndmUgY29uZmlybWVkIHRoYXQgYG10eXBlX2FkZGAgaXMgaW5kZWVkIG1hcHBlZCB0byBgaGFzaF9uZXQ0X2FkZGAuIE5vdyBJIGNhbiBsaXN0IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBmb3IgSVB2NCwgSVB2NiwgcG9ydCwgaW50ZXJmYWNlLCBhbmQgbmV0d29yayB2YXJpYXRpb25zOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9mbHVzaGAsIGBoYXNoX25ldDZfYWRkYCwgYGhhc2hfbmV0Nl9kZWxgLCBgaGFzaF9uZXQ2X3Rlc3RgLCBgaGFzaF9uZXQ2X2ZsdXNoYCwgYW5kIHNvIG9uLCBjb3ZlcmluZyBhbGwgdGhlIHBlcm11dGF0aW9ucy5cblxuQnV0IGhhbmcgb24sIEkgc2VlIGBtdHlwZV9hZGRfY2lkcmAsIHdoaWNoIGxvb2tzIGxpa2UgYSBtYWNyby4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbjogYCNkZWZpbmUgbXR5cGVfYWRkX2NpZHIgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilgIGNvbmZpcm1zIGl0LiBTbywgdGhhdCBtZWFucyBgaGFzaF9uZXQ0X2FkZF9jaWRyYCBpcyBhbHNvIGEgc3ltYm9sIHRvIGNvbnNpZGVyLiBUaGUgY2hhbGxlbmdlIHdpdGggdGhpcyBgbXR5cGVfYWRkX2NpZHJgIGZ1bmN0aW9uIGlzIHRoYXQgaXQncyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBhbmQgaXQncyBvbmx5IGNhbGxlZCBieSBgbXR5cGVfYWRkYCBhbmQgYG10eXBlX3Jlc2l6ZWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBJcyBpdCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gU2luY2UgaXQncyBzdGF0aWMsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZS5cblxuSSBzaG91bGQgdmVyaWZ5IGJ5IGNoZWNraW5nIHdoZXRoZXIgYGhhc2hfbmV0NF9hZGRgIGlzIGEgYmV0dGVyIHRhcmdldC4gUmlnaHQsIGBoYXNoX25ldDRfYWRkYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIGNhbid0IGlubGluZSBpdC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gVGhlIGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudCBtYWtlcyB0aGF0IGZ1bmN0aW9uIGEgY2xlYXJlciB0YXJnZXQuXG5cbk5vdywgd2FpdCwgaXMgYG10eXBlX3Rlc3RfY2lkcnNgIGFub3RoZXIgbWFjcm8/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoyNS4wNTI0NjIxNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NzMyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBtdHlwZV90ZXN0X2NpZHJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODEtI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI4MjojZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODMtI2RlZmluZSBtdHlwZV90ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoyNS4wOTkyNDM1NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTIxOTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwc2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgZXF1aXZhbGVudCB0byBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgLiBHb3QgaXQuIEFuZCBgbXR5cGVfdGVzdGAgY2FsbHMgdGhhdC4gTm93LCBJJ20gY3VyaW91cyBpZiBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgaW5saW5lZC4gSXQncyBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuIEhvd2V2ZXIsIGBoYXNoX25ldDRfdGVzdGAgaXNuJ3QgaW5saW5lZCwgc28gdGhhdCdzIGEgY2x1ZS5cblxuVGltZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ2xsIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIHJlbGV2YW50IGZpbGVzIHNlZW0gdG8gYmUgYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgLCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYCwgYW5kIHRoZSBoZWFkZXIgYGlwX3NldF9oYXNoX2dlbi5oYC4gSSdsbCBvcGVuIHVwIHRoZSBLY29uZmlnIGZpbGVzIGZvciB0aGVzZSB0byBzZWUgaG93IHRoZXkncmUgY29uZmlndXJlZC4gVGhhdCBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjI5LjA1ODQ2NjIzNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2ODk0NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9oYXNoX25ldGlmYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MjkuMTA3MTcwMjlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwOTMzMjAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgaXBzZXQgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgYmVhc3Q6IGBuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlYC4gSXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBpcHNldCBpcyBkZWZpbmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWxkIHN5c3RlbSBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGdldHMgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIGFuZCBhbnkgc3BlY2lmaWMgZmxhZ3MgdGhhdCBhcmUgYmVpbmcgdXNlZCwgcGFydGljdWxhcmx5IG9wdGltaXphdGlvbiBzZXR0aW5ncyBhbmQgYW55IGxpbmtlciB0cmlja3MuIEknbSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY3VzdG9tIHJ1bGVzIG9yIG1vZHVsZXMgYmVpbmcgZW1wbG95ZWQuIEtub3dpbmcgdGhlIGJ1aWxkIHByb2Nlc3Mgd2lsbCBoZWxwIG1lIHRyb3VibGVzaG9vdCBwb3RlbnRpYWwgaXNzdWVzLCB1bmRlcnN0YW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGV2ZW4gcHJvcG9zZSBmdXR1cmUgZW5oYW5jZW1lbnRzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgd2l0aGluIHRoaXMgZmlsZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjMyLjQxNjUwNTI4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzODE3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X2hhc2hfbmV0aWZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUKSArPSBpcF9zZXRfaGFzaF9uZXRwb3J0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRSkgKz0gaXBfc2V0X2hhc2hfbmV0aWZhY2Uub1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMjctb2JqLSQoQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVCkgKz0gaXBfc2V0X2hhc2hfbmV0bmV0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzIuNDY4ODkzNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk2NjE0Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVBzZXQgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJUHNldCBjb25maWd1cmF0aW9uczogYENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFuZCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVGAuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSdyZSByZWxhdGVkLCBwcm9iYWJseSBpbiB0aGUgd2F5IHRoYXQgdGhlIGhhc2ggc3RydWN0dXJlcyBhcmUgZGVmaW5lZC4gVGhlIG5ldHBvcnRuZXQgb25lIGltbWVkaWF0ZWx5IGZsYWdzLCBzaW5jZSBpdCBoYXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiBwb3J0IGFuZCBuZXR3b3JrLCB3aGljaCBhbHdheXMgcHJlc2VudHMgY2hhbGxlbmdlcyBmb3Igc2NhbGluZy5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMgb2YgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBmb3IgdGhhdCBvcHRpb24uIFRoYXQgZmlsZSBzaG91bGQgZGVmaW5lIGl0LCBhbmQgc2hvdyBpdHMgZGVwZW5kZW5jaWVzLiBIb3BlZnVsbHksIGl0J2xsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBvbiBob3cgdGhlc2UgYXJlIHJlbGF0ZWQgYW5kIHdoZXRoZXIgb25lIGRlcGVuZHMgb24gb3RoZXJzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBmb3IgY29uZmxpY3RzIG9yIGNsZXZlciBjb21iaW5hdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzkwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzUuODY1NTEwNzY4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODgzMDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNDg9Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE1ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzUuOTE0MzQ5NTUzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzU2NDczNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX1NFVF9IQVNIX05FVElGQUNFYC4gVGhhdCBtZWFucyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgYmFjayBmcm9tIHRoYXQgc3BlY2lmaWMgc2V0IHR5cGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBsaWJyYXJpZXMgaXQgcmVsaWVzIG9uIOKAkyBrZXJuZWwgbW9kdWxlcywgb3RoZXIgSVAgc2V0IGZ1bmN0aW9uYWxpdHksIG1heWJlIHNwZWNpZmljIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUgZWxlbWVudHMuIEknbGwgYmUgbG9va2luZyBmb3IgaGVhZGVyIGZpbGUgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBvciBhbnkga2luZCBvZiBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVmZXJlbmNlcy4gSXTigJlzIGFsc28gd29ydGggY29uc2lkZXJpbmcgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvci4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgZm9yIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBjb2RlIG9yLCBtb3JlIGxpa2VseSwgc29tZXRoaW5nIEknbGwgY29uc3RydWN0IG1lbnRhbGx5IGFzIEkgd29yayB0aHJvdWdoIHRoZSByZWxhdGlvbnNoaXBzLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgc3RhY2ssIGVzcGVjaWFsbHkgYXMgaXQgcmVsYXRlcyB0byBpbnRlcmZhY2Utc3BlY2lmaWMgSVAgc2V0IGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzkuNjUwMDAwMzg1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTg6XFx0Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxuIDE1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAxNjE6XFx0XFx0aGVscFxcbiAxNjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBoYXNoOm5ldCxpZmFjZSBzZXQgdHlwZSBzdXBwb3J0LCBieSB3aGljaFxcbiAxNjM6XFx0XFx0ICBvbmUgY2FuIHN0b3JlIElQdjQvSVB2NiBuZXR3b3JrIGFkZHJlc3MvcHJlZml4IGFuZFxcbiAxNjQ6XFx0XFx0ICBpbnRlcmZhY2UgbmFtZSBwYWlycyBhcyBlbGVtZW50cyBpbiBhIHNldC5cXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTY3OlxcdFxcbiAxNjg6XFx0Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbiAxNjk6XFx0XFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcbiAxNzA6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG4gMTcxOlxcdFxcdGhlbHBcXG4gMTcyOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbGlzdDpzZXQgc2V0IHR5cGUgc3VwcG9ydC4gSW4gdGhpc1xcbiAxNzM6XFx0XFx0ICBraW5kIG9mIHNldCBvbmUgY2FuIHN0b3JlIHRoZSBuYW1lIG9mIG90aGVyIHNldHMgYW5kIGl0IGZvcm1zXFxuIDE3NDpcXHRcXHQgIGFuIG9yZGVyZWQgdW5pb24gb2YgdGhlIG1lbWJlciBzZXRzLlxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNzc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjM5LjY1MDA3NzMwNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg4MjMyMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBoaW5nZXMgb24gdGhpcyBgSVBfU0VUYC4gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogKml0J3MgYWxsIGFib3V0IGhvdyBgSVBfU0VUYCBpcyBiZWluZyB1c2VkLCBhbmQgd2hhdCdzIGNvbm5lY3RlZCB0byBpdCouIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZywgXCJ3aGF0IG90aGVyIGNvbXBvbmVudHMsIHN5c3RlbXMsIG9yIHJ1bGVzIHJlbHkgb24gdGhlIHN0YXRlIG9yIGNvbnRlbnRzIG9mIGBJUF9TRVRgP1wiLiBJcyBpdCBkaXJlY3RseSBmZWVkaW5nIGludG8gZmlyZXdhbGwgcnVsZXM/IElzIGl0IGxpbmtlZCB0byBhIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbD8gQXJlIHRoZXJlIG1vbml0b3JpbmcgdG9vbHMgdGhhdCBhcmUga2V5ZWQgdG8gY2hhbmdlcyBpbiB0aGF0IHNldD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIGBJUF9TRVRgIGJlaGF2ZXMgdW5leHBlY3RlZGx5LiBTbywgSSdsbCBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLCBzeXN0ZW0gbG9ncywgYW5kIG1heWJlIGV2ZW4gbG9vayBmb3IgYW55IG1vbml0b3JpbmcgZGFzaGJvYXJkcyB0aGF0IHJlZmVyZW5jZSB0aGF0IGlkZW50aWZpZXIuIExldCdzIGRpZyBpbiBhbmQgdHJhY2sgZG93biBldmVyeSBkaXJlY3QgYW5kIGluZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYElQX1NFVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODE4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo0My43MzgzMTI1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTMzODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo0My43ODUxMzQ5NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MDk4MjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uZnVzaW9uKipcblxuSG1tLCBqdXN0IGEgcXVpY2sgbWVudGFsIGNoZWNrIGhlcmUuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHNvbWUgYG5ldGZpbHRlcmAgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIHF1aWNrbHkuIFdoZXJlIGV4YWN0bHkgaXMgdGhlIGBJUF9TRVRgIEtjb25maWcgc3ltYm9sIGRlZmluZWQ/IElzIGl0IGRpcmVjdGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgb3IgYW0gSSB0aGlua2luZyBvZiBpdCBiZWluZyB1bmRlciB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2Agc3ViZGlyZWN0b3J5PyBJdCdzIGVhc3kgdG8gZ2V0IHRoZXNlIGRldGFpbHMgbXVkZGxlZCB3aGVuIHlvdSdyZSBqdW1waW5nIGFyb3VuZCB2YXJpb3VzIGtlcm5lbCBjb21wb25lbnRzLiBJIHJlYWxseSBzaG91bGQgYmUgYWJsZSB0byBpbnN0YW50bHkgcmVjYWxsIHRoaXMsIGJ1dCBJJ2xsIG1ha2UgYSBxdWljayBjaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4ndCBjb25mdXNlZCB0aGUgcmVsZXZhbnQgbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjQ2Ljc2NjEyMDc5NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MDk4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo0Ni44MTg1NDIyMzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMjExMzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBtZW51Y29uZmlnIElQX1NFVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbWVudWNvbmZpZ2Agc2V0dXAsIHNwZWNpZmljYWxseSB0aGUgYElQX1NFVGAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyBvciBtb2R1bGVzIG1pZ2h0IGJlIHJlcXVpcmVkLCBvciBpZiBgSVBfU0VUYCBpdHNlbGYgZGVwZW5kcyBvbiBhIHBhcnRpY3VsYXIgbmV0d29ya2luZyBzdGFjayBjb25maWd1cmF0aW9uIG9yIHNlY3VyaXR5IGZlYXR1cmUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBgSVBfU0VUYCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHZhcmlhYmxlcyBhbmQgc3ltYm9scyBuZWVkIHRvIGJlIHNldCBvciBlbmFibGVkIGZvciBgSVBfU0VUYCB0byB3b3JrLiBJIGFsc28gZXhwZWN0IHRoYXQgdGhlcmUnbGwgYmUgc29tZSBkb2N1bWVudGF0aW9uIHRoYXQgSSdsbCBuZWVkIHRvIGJyb3dzZSBmb3IgYW55IGFkZGl0aW9uYWwgcHJlcmVxdWlzaXRlcy4gSSdtIHByaW1hcmlseSB0aGlua2luZyBhYm91dCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdHMgdXNlLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdGluZyBzZXR0aW5ncy4gSSBhbSB0cnlpbmcgdG8gYXNjZXJ0YWluIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkaXJlY3Qgb3IgaW5kaXJlY3QuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGFibGUgdG8gYWNjdXJhdGVseSBjb25maWd1cmUgYElQX1NFVGAgYW5kIGludGVncmF0ZSBpdCBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo1MC4zNDA2NTg3NTVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElQX1NFVFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHNldCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgSVAgc2V0IHN1cHBvcnQgdG8gdGhlIGtlcm5lbC5cXG4gICA4OlxcdFxcdCAgSW4gb3JkZXIgdG8gZGVmaW5lIGFuZCB1c2UgdGhlIHNldHMsIHlvdSBuZWVkIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxcbiAgIDk6XFx0XFx0ICBpcHNldCg4KS4gWW91IGNhbiB1c2UgdGhlIHNldHMgaW4gbmV0ZmlsdGVyIHZpYSB0aGUgXFxcInNldFxcXCIgbWF0Y2hcXG4gIDEwOlxcdFxcdCAgYW5kIFxcXCJTRVRcXFwiIHRhcmdldC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgSVBfU0VUXFxuICAxNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6NTAuMzQwNzI3MDE1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDQ5NDI1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgQ29uZmlndXJhdGlvbiBhbmQgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSVBfU0VUYCBkZXBlbmRlbmN5IOKAkyBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IHJlbGllcyBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gYmUgZW5hYmxlZC4gSSBzZWUgYElQX1NFVGAsIG5hdHVyYWxseSwgYnV0IGFsc28gYSBzdHJpbmcgb2YgaGFzaC1iYXNlZCBjb25maWd1cmF0aW9uczogYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBHb3QgaXQuXG5cbkhvbGQgb24sIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQncyBhIHNoYXJlZCBoZWFkZXIgZm9yIGFsbCBoYXNoIHR5cGVzLiBMb29raW5nIGNsb3NlciwgaXQgYXBwZWFycyB0aGUgbW9kaWZpY2F0aW9uIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBjb2RlIHBhdGhzLiBBaCwgcmlnaHQuIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB3aGljaCB0eXBlcyBhY3R1YWxseSBkZWZpbmUgdGhpcy4gT2theSwgdGhvc2UgYXJlOiBgaGFzaF9uZXRgLCBgaGFzaF9uZXRwb3J0YCwgYGhhc2hfbmV0aWZhY2VgLCBgaGFzaF9uZXRuZXRgLCBgaGFzaF9pcHBvcnRuZXRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldGAuIFNvLCB0aGUgbGlzdCBvZiBjb25maWdzIEkgaWRlbnRpZmllZCBhYm92ZSBpcyBjb3JyZWN0LiBXZSdsbCBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhvc2UgdG8gcHJvcGVybHkgYWRkcmVzcyB0aGUgcGF0Y2gncyBjaGFuZ2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcy4gSSd2ZSBnb3QgYSBsb25nIGxpc3Qgb2YgZnVuY3Rpb25zIGhlcmU6IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBldGMuIEVzc2VudGlhbGx5LCB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYWRkaW5nLCBkZWxldGluZywgdGVzdGluZywgYW5kIGZsdXNoaW5nIG9mIHRoZSBkaWZmZXJlbnQgbmV0IGFuZCBwb3J0IGhhc2ggdHlwZXMuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGluIG1pbmQgd2hlbiBhbmFseXppbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgcGF0Y2guIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSB0byBlbnN1cmUgcHJvcGVyIGZ1bmN0aW9uYWxpdHkgYWZ0ZXIgdGhlIG1vZGlmaWNhdGlvbi5cblxuTm93LCBhIHF1aWNrIHF1ZXN0aW9uIHBvcHMgdXAuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljPyBJdCB3b3VsZCBiZSBnb29kIHRvIHZlcmlmeS4gT2theSwgdGhleSBhcmUgc3RhdGljLiBIb3dldmVyLCBzaW5jZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBgbXR5cGVfdmFyaWFudGAgc3RydWN0LCB0aGV5IHdvbid0IGJlIGlubGluZWQgYW5kIHRoZSBrZXJuZWwgaW1hZ2Ugd2lsbCBhY3R1YWxseSBoYXZlIHN5bWJvbHMgZm9yIHRoZW0uIEdvb2QgdG8gbm90ZS4gSSBzdGlsbCBuZWVkIHRvIHZlcmlmeSB0aGUgc3RhdGljIGF0dHJpYnV0ZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIHRob3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwMzIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo1Ny45ODU2NzMxMzFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzM2MDY1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IG10eXBlX2FkZFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjU4LjAzMzAyMDY0NloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzEwNDYwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJlY2FsbGluZyBQcmlvciBSZXNlYXJjaCoqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYG10eXBlX2FkZChgIGVhcmxpZXIuIFRoZSBmYWN0IHRoYXQgSSBoYWQgdGhhdCBxdWVyeSBpbiBteSBzZWFyY2ggaGlzdG9yeSBtZWFucyBzb21ldGhpbmcuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZSBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB3aHkgd2FzIEkgbG9va2luZyBhdCBpdD8gV2hhdCB3YXMgdGhlIHJlbGV2YW50IHByb2JsZW0gc3BhY2UgdGhlbiwgYW5kIGlzIGl0IGNvbm5lY3RlZCB0byB3aGF0IEknbSBkZWFsaW5nIHdpdGggY3VycmVudGx5PyBJIHNob3VsZCBwcm9iYWJseSBnbyBiYWNrIGFuZCBsb29rIGF0IG15IHNlYXJjaCBoaXN0b3J5IGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvZGUgc25pcHBldHMgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNlZSBpZiB0aGF0IGVhcmxpZXIgaW52ZXN0aWdhdGlvbiBwcm92aWRlcyBhIHVzZWZ1bCBzdGFydGluZyBwb2ludCBvciBjbHVlLiBUaGUgbWVudGFsIG1vZGVsIHNob3VsZCBhbHJlYWR5IGJlIHByaW1lZCwgc28gaXQncyBhIG1hdHRlciBvZiByZXRyaWV2aW5nIGFuZCByZS1ldmFsdWF0aW5nIHRoZSByZWxldmFuY2Ugbm93LiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0IHdpbGwgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MDMuNzQzNDg0MjYzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU5ODMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MTowMy43ODkwODk4NzlaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NTEwOTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3ltYm9sIFZhbGlkaXR5IGFuZCBJbmxpbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG10eXBlX2FkZGAgZnVuY3Rpb24uLi4gcmlnaHQsIGl0J3MgYSBtYWNybyBleHBhbmRpbmcgdG8gc29tZXRoaW5nIGxpa2UgYGhhc2hfbmV0NF9hZGRgLiBBbmQgc2luY2UgdGhlc2UgYGhhc2hfbmV0NF9hZGRgIHZhcmlhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGBtdHlwZV92YXJpYW50LmFkdFtJUFNFVF9BRERdYCwgdGhlIGNvbXBpbGVyICpoYXMqIHRvIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBmb3IgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGFkZHJlc3MtdGFrZW4uIFRoYXQgbWVhbnMgdGhleSdyZSB2YWxpZCBzeW1ib2xzIGZvciBtZSB0byBmb2N1cyBvbi4gRXhjZWxsZW50LlxuXG5Ob3csIHdoYXQgYWJvdXQgYG10eXBlX2FkZF9jaWRyYD8gQWgsIHRoYXQncyBqdXN0IGEgc2hvcnRoYW5kIGZvciBgaGFzaF9uZXQ0X2FkZF9jaWRyYC4gSXQncyBjYWxsZWQgYnkgYG10eXBlX2FkZGAgKHdoaWNoIHdlIGtub3cgaXMgYGhhc2hfbmV0NF9hZGRgKSBhbmQgYG10eXBlX3Jlc2l6ZWAuIElzICppdCogYWRkcmVzcy10YWtlbj8gTm9wZS4gT2theSwgc28gaW5saW5pbmcgaXMgdGhlIGNvbmNlcm4gaGVyZS4gSXQncyBgc3RhdGljYCwgc28gaXQgKmNvdWxkKiBiZSBpbmxpbmVkLiBJdCdzIGEgZGVjZW50bHkgc2l6ZWQgZnVuY3Rpb24gdGhvdWdoLCBzbyBwZXJoYXBzIG5vdC4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgZGVmaW5pdGVseSAqaXNuJ3QqIGlubGluZWQgYmVjYXVzZSBpdCdzIGFkZHJlc3MtdGFrZW4uIFRoYXQncyBnb29kLCB0aGF0IG1lYW5zIGZvY3VzaW5nIG9uIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YCBpcyB0aGUgc2FmZXIgYmV0IHRvIGVuc3VyZSBzdGFiaWxpdHkuXG5cbkhhbmcgb24uLi4gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgY2FsbGVkIGJ5IGBtdHlwZV90ZXN0YC4gQW5kIGBtdHlwZV90ZXN0YCBpcywgaW4gZmFjdCwgYGhhc2hfbmV0NF90ZXN0YC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGBtdHlwZV90ZXN0YCBmb3IgYSBtb21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDQ3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjEwLjAzNDIwMjM5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE1OTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV90ZXN0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzODc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTM4ODptdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzg5LVxcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjEwLjA3OTM2NzQzNVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njk1MTk3ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFzaCBUYWJsZSBNb2R1bGUncyBUZXN0IGFuZCBGbHVzaCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgbXR5cGVfdGVzdGAgKmlzKiBhY3R1YWxseSBgaGFzaF9uZXQ0X3Rlc3RgLiBHb29kLCB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlIHRoZXJlLiBOb3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gbGlzdCB0aGVtIG91dCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSB3aG9sZSBwaWN0dXJlOlxuKiAgIEFsbCB0aGUgYGhhc2hfbmV0NGAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldDZgIHZhcmlhbnRzXG4qICAgQWxsIHRoZSBgaGFzaF9uZXRwb3J0NGAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnQ2YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0aWZhY2U0YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0aWZhY2U2YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0bmV0NGAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldG5ldDZgIHZhcmlhbnRzXG4qICAgQWxsIHRoZSBgaGFzaF9pcHBvcnRuZXQ0YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfaXBwb3J0bmV0NmAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnRuZXQ0YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0cG9ydG5ldDZgIHZhcmlhbnRzXG5cblRoaXMgbG9va3MgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBzZXQgb2YgaGFzaCB0YWJsZSBvcGVyYXRpb25zOiBhZGQsIGRlbGV0ZSwgdGVzdCwgYW5kIGZsdXNoLiBUaGUgdmFyaWF0aW9ucyBzZWVtIHRvIGluZGljYXRlIGRpZmZlcmVudCBrZXkgdHlwZXM6IGBuZXQ0YCwgYG5ldDZgLCBgcG9ydGAsIGBpZmFjZWAsIGBuZXRuZXRgLCBhbmQgYGlwcG9ydG5ldGAsIHByb2JhYmx5IHJlbGF0aW5nIHRvIElQdjQsIElQdjYsIHBvcnQgbnVtYmVycywgbmV0d29yayBpbnRlcmZhY2VzLCBhbmQgY29tYmluYXRpb25zIG9mIHRoZXNlLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5XYWl0IGEgc2Vjb25kLi4uICphbHNvKiBgbXR5cGVfZmx1c2hgIGlzIGEgbWFjcm8/IEludGVyZXN0aW5nLiBUaGF0IG1heSBhZmZlY3QgaG93IHRoaXMgd29ya3MsIGF0IGxlYXN0IHRoZSBtYWNybyBleHBhbnNpb24gb2YgdGhlIGNvZGUuIFRoaXMgbWVhbnMgSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgbWFjcm8gZnVydGhlciB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBpbmRpdmlkdWFsIGBmbHVzaGAgZnVuY3Rpb25zIGxpc3RlZCBhYm92ZS4gVGhpcyByZXF1aXJlcyBjbG9zZXIgZXhhbWluYXRpb24gb2YgdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg3MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MToxNi43NzQ1Njg0NFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1OTQxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBtdHlwZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjcxLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI3MjojZGVmaW5lIG10eXBlX2ZsdXNoXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9mbHVzaClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI3My0jZGVmaW5lIG10eXBlX2Rlc3Ryb3lcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2Rlc3Ryb3kpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjE2LjgyMzE2NzU3NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQxNjA4NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIElQIFNldCBIYXNoIE5ldCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZ1enppbmcgdGhlIGBoYXNoX25ldDRfZmx1c2hgIGZ1bmN0aW9uIGFuZCBzaW1pbGFyIHJvdXRpbmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIG90aGVyIGNydWNpYWwgZW50cnkgcG9pbnRzLiBMZXQncyBzZWUgaWYgYGhhc2hfbmV0NF91YWR0YCBhbmQgYGhhc2hfbmV0NF9rYWR0YCBhcmUgYWxzbyBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIE1ha2VzIHNlbnNlIOKAkyB0aG9zZSBhcmUgdGhlIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSBlbnRyeSBwb2ludHMsIHJlc3BlY3RpdmVseS4gSG1tLCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBtdHlwZV91YWR0YCBhbmQgYG10eXBlX2thZHRgIHJlZmVyZW5jZXMsIHNpbmNlIHRoZXkgYXJlbid0IGRpcmVjdGx5IGRlZmluZWQgYXMgbWFjcm9zIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEFoYSEgV2FpdCBhIHNlY29uZC4uLiBJIHNlZSBpdCBub3cuIGBtdHlwZV91YWR0YCAqaXMqIGFjdHVhbGx5IGBoYXNoX25ldDRfdWFkdGAgdW5kZXIgdGhlIGhvb2QuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBzd2l0Y2ggZ2VhcnMgYW5kIGNvbnN1bHQgYGlwX3NldF9oYXNoX25ldC5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDQwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjIwLjc2NDc4MDQwNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NzU0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaF9uZXQ0X3VhZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEzNT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMzY6aGFzaF9uZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTM3LVxcdCAgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MjAuODExNzY0MTlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2ODIzMzYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0IG9uIHRoZSBpcF9zZXRfaGFzaCBDb2RlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgaGFzaF9uZXQ0X3VhZHRgIGlzIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgaXBfc2V0X2hhc2hfbmV0LmNgLiBCdXQgdGhpcyBwYXRjaCB0b3VjaGVzIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGFuZCBgbXR5cGVfdGVzdF9jaWRyc2AgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGJ5IHRoZSBjb3JlIGBtdHlwZV9hZGRgLCBgbXR5cGVfZGVsYCwgYG10eXBlX2ZsdXNoYCwgYW5kIGBtdHlwZV90ZXN0YCBvcGVyYXRpb25zLiBUaGVyZWZvcmUsIHRoZSBtb3N0IGVmZmljaWVudCBwYXRoIHRvIGNvbmZpcm0gdGhlIHBhdGNoJ3MgY2hhbmdlcyBpbnZvbHZlcyBkaXJlY3RseSBleGFtaW5pbmcgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfZmx1c2hgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YC5cblxuTGV0J3MgbWFrZSBzdXJlIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGlzIGFjdHVhbGx5IGNhbGxpbmcgYGhhc2hfbmV0NF9hZGRfY2lkcmAuIExvb2tpbmcgYXQgYGlwX3NldF9oYXNoX2dlbi5oYCwgSSBzZWU6XG5cbmBgYGNcbnN0YXRpYyBpbnRcbm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG57XG4uLi5cbiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcblx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXG5cdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG4jZW5kaWZcbi4uLlxufVxuYGBgXG5cblllcywgaXQgZG9lcy4gRXhjZWxsZW50LlxuXG5Ob3csIGhvbGQgb24uIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBpcF9zZXRfaGFzaF9uZXRpZmFjZS5jYCBhbmQgYGlwX3NldF9oYXNoX25ldHBvcnRuZXQuY2AgYnkgcmVtb3ZpbmcgYCNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwYC4gVGltZSB0byBjaGVjayB3aGF0IGBJUF9TRVRfSEFTSF9XSVRIX05FVDBgIHdhcyBkb2luZy4gVGhpcyBpcyBhbm90aGVyIGFyZWEgdG8gZXhhbWluZSBhcyBwYXJ0IG9mIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MjYuMTgwMDAwNTAzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQwNjAxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfU0VUX0hBU0hfV0lUSF9ORVQwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MToyNi4yMjY0MTI4NThaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNzI0Njg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvZGUgQ2hhbmdlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBvcmlnaW5hbCBjb2RlIGVsZW1lbnQgaXMgZ29uZSwgdGhhbmtzIHRvIHRoZSByZWNlbnQgcGF0Y2guIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIHdoaWNoIEknZCBjb25maXJtZWQgd2hlbiByZXZpZXdpbmcgdGhlIHBhdGNoIGluaXRpYWxseS4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEJlZm9yZSBJIG1vdmUgb24gd2l0aCBteSBvd24gd29yaywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgKmNvbXBsZXRlbHkqIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBpdCdzIHNvbWVob3cgbGluZ2VyZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gSXQgd291bGRuJ3QgYmUgdGhlIGZpcnN0IHRpbWUgSSd2ZSBlbmNvdW50ZXJlZCBhIHNlZW1pbmdseSBjbGVhbiByZW1vdmFsIHRoYXQgbGVmdCBjcnVmdCBiZWhpbmQsIG9yIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiByZWZhY3RvcmVkIGFuZCBtb3ZlZC4gQSBxdWljayBpbnNwZWN0aW9uIG9mIHRoYXQgaGVhZGVyIGZpbGUgaXMgd2FycmFudGVkLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNyaXRpY2FsIG5ldHdvcmtpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MzYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MToyOS45NjM2NjI3NThaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODczMjI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9TRVRfSEFTSF9XSVRIX05FVDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MzAuMDA5NTQ1OTMzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjM2ODUxNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ29uZmlndXJhdGlvbiBhbmQgQW5hbHlzaXMgZm9yIGlwX3NldCBDb25jdXJyZW5jeSBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYSBjcnVjaWFsIGNoYW5nZSB3YXMgbWFkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgYSBtYWNybywgYElQX1NFVF9IQVNIX1dJVEhfTkVUMGAsIHdhcyByZW1vdmVkIGZyb20gYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gIFRoYXQgaW5kaWNhdGVzIHNvbWUga2luZCBvZiByZWZhY3RvcmluZyBvciBwZXJoYXBzIHJlbW92YWwgb2YgYW4gb2Jzb2xldGUgZmVhdHVyZS5cblxuVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHNlcWNvdW50X3NwaW5sb2NrX3Qgc2VxYCB0byBgc3RydWN0IG5ldF9wcmVmaXhlc2AuICBUaGlzLCBjb3VwbGVkIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIHRoZSBgc2VxY291bnRgIG1lY2hhbmlzbSwgc3Ryb25nbHkgc3VnZ2VzdHMgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHRhcmdldGluZyBsb2NrbGVzcyByZWFkZXJzLiBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIGV4ZXJjaXNpbmcgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGJ1aWxkIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyB0byBnZXQgdGhlbSBlbmFibGVkLiBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6XG5cbiogICBgSVBfU0VUYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVFBPUlRgXG4qICAgYElQX1NFVF9IQVNIX05FVElGQUNFYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRORVRgXG4qICAgYElQX1NFVF9IQVNIX0lQUE9SVE5FVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGBcblxuVGhlIGJhc2UgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGBJUF9TRVRgIHNlZW0gdG8gYmUgdGhlIHN0YW5kYXJkIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgc2V0dGluZ3MsIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGZ1eno6XG5cbkJhc2VkIG9uIHRoZSBjb2RlLCB0aGUga2V5IGZ1bmN0aW9uIHBhaXJzIGZvciBmdXp6aW5nIGFyZTpcbiogICBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9mbHVzaGBcbiogICBgaGFzaF9uZXQ2X2FkZGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfbmV0Nl90ZXN0YCwgYGhhc2hfbmV0Nl9mbHVzaGBcbiogICBgaGFzaF9uZXRwb3J0NF9hZGRgLCBgaGFzaF9uZXRwb3J0NF9kZWxgLCBgaGFzaF9uZXRwb3J0NF90ZXN0YCwgYGhhc2hfbmV0cG9ydDRfZmx1c2hgXG4qICAgYGhhc2hfbmV0cG9ydDZfYWRkYCwgYGhhc2hfbmV0cG9ydDZfZGVsYCwgYGhhc2hfbmV0cG9ydDZfdGVzdGAsIGBoYXNoX25ldHBvcnQ2X2ZsdXNoYFxuKiAgIGBoYXNoX25ldGlmYWNlNF9hZGRgLCBgaGFzaF9uZXRpZmFjZTRfZGVsYCwgYGhhc2hfbmV0aWZhY2U0X3Rlc3RgLCBgaGFzaF9uZXRpZmFjZTRfZmx1c2hgXG4qICAgYGhhc2hfbmV0aWZhY2U2X2FkZGAsIGBoYXNoX25ldGlmYWNlNl9kZWxgLCBgaGFzaF9uZXRpZmFjZTZfdGVzdGAsIGBoYXNoX25ldGlmYWNlNl9mbHVzaGBcbiogICBgaGFzaF9uZXRuZXQ0X2FkZGAsIGBoYXNoX25ldG5ldDRfZGVsYCwgYGhhc2hfbmV0bmV0NF90ZXN0YCwgYGhhc2hfbmV0bmV0NF9mbHVzaGBcbiogICBgaGFzaF9uZXRuZXQ2X2FkZGAsIGBoYXNoX25ldG5ldDZfZGVsYCwgYGhhc2hfbmV0bmV0Nl90ZXN0YCwgYGhhc2hfbmV0bmV0Nl9mbHVzaGBcbiogICBgaGFzaF9pcHBvcnRuZXQ0X2FkZGAsIGBoYXNoX2lwcG9ydG5ldDRfZGVsYCwgYGhhc2hfaXBwb3J0bmV0NF90ZXN0YCwgYGhhc2hfaXBwb3J0bmV0NF9mbHVzaGBcbiogICBgaGFzaF9pcHBvcnRuZXQ2X2FkZGAsIGBoYXNoX2lwcG9ydG5ldDZfZGVsYCwgYGhhc2hfaXBwb3J0bmV0Nl90ZXN0YCwgYGhhc2hfaXBwb3J0bmV0Nl9mbHVzaGBcbiogICBgaGFzaF9uZXRwb3J0bmV0NF9hZGRgLCBgaGFzaF9uZXRwb3J0bmV0NF9kZWxgLCBgaGFzaF9uZXRwb3J0bmV0NF90ZXN0YCwgYGhhc2hfbmV0cG9ydG5ldDRfZmx1c2hgXG4qICAgYGhhc2hfbmV0cG9ydG5ldDZfYWRkYCwgYGhhc2hfbmV0cG9ydG5ldDZfZGVsYCwgYGhhc2hfbmV0cG9ydG5ldDZfdGVzdGAsIGBoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoYFxuXG5JIHdpbGwgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgbWFuaXB1bGF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCwgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBgc2VxY291bnRgLiBUaGUgdW5kZXJseWluZyB1c2Ugb2YgQ0lEUnMgZm9yIG5ldHdvcmsgcHJlZml4ZXMgYWxzbyB3YXJyYW50cyBzcGVjaWFsIGF0dGVudGlvbi4gU28gdGhpcyBpcyB3aGF0IEknbSBnb2luZyB0byBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzAzLCJPdXRwdXRUb2tlbnMiOjcwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6NDYuNjQ2NDAwNzkyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2NTMxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfZGVsXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfYWRkXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9kZWxcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGlwc2V0IGhhc2ggdHlwZXMgdGhhdCB1c2UgbmV0d29yayBwcmVmaXhlcyAoQ0lEUikgYnkgaW50cm9kdWNpbmcgYSBzZXFjb3VudCB0byBndWFyZCBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIHRoZSBwcmVmaXhlcyBhcnJheS4gVGhpcyBhZmZlY3RzIHRoZSBhZGQsIGRlbCwgdGVzdCwgYW5kIGZsdXNoIG9wZXJhdGlvbnMgZm9yIHNldmVyYWwgaGFzaCB0eXBlcyAobmV0LCBuZXRwb3J0LCBuZXRpZmFjZSwgbmV0bmV0LCBpcHBvcnRuZXQsIG5ldHBvcnRuZXQpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZXRmaWx0ZXIgaXBzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3MgcmVhZGVyIGxvZ2ljIGFuZCBhcnJheSBzaGlmdGluZyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFzaF9uZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9hZGRcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfZGVsXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0bmV0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBpcHNldCBoYXNoIHR5cGVzIHRoYXQgdXNlIG5ldHdvcmsgcHJlZml4ZXMgKENJRFIpIGJ5IGludHJvZHVjaW5nIGEgc2VxY291bnQgdG8gZ3VhcmQgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiB0aGUgcHJlZml4ZXMgYXJyYXkuIFRoaXMgYWZmZWN0cyB0aGUgYWRkLCBkZWwsIHRlc3QsIGFuZCBmbHVzaCBvcGVyYXRpb25zIGZvciBzZXZlcmFsIGhhc2ggdHlwZXMgKG5ldCwgbmV0cG9ydCwgbmV0aWZhY2UsIG5ldG5ldCwgaXBwb3J0bmV0LCBuZXRwb3J0bmV0KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmV0ZmlsdGVyIGlwc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tsZXNzIHJlYWRlciBsb2dpYyBhbmQgYXJyYXkgc2hpZnRpbmcgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 00:17:11 +0000 UTC FinishedAt: 2026-08-07 00:51:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "ca99eedb-67ba-4856-beb2-69efec574e33" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hash_net4_add", "hash_net4_del", "hash_net4_test", "hash_net4_flush", "hash_net6_add", "hash_net6_del", "hash_net6_test", "hash_net6_flush", "hash_netport4_add", "hash_netport4_del", "hash_netport4_test", "hash_netport4_flush", "hash_netport6_add", "hash_netport6_del", "hash_netport6_test", "hash_netport6_flush", "hash_netiface4_add", "hash_netiface4_del", "hash_netiface4_test", "hash_netiface4_flush", "hash_netiface6_add", "hash_netiface6_del", "hash_netiface6_test", "hash_netiface6_flush", "hash_netnet4_add", "hash_netnet4_del", "hash_netnet4_test", "hash_netnet4_flush", "hash_netnet6_add", "hash_netnet6_del", "hash_netnet6_test", "hash_netnet6_flush", "hash_ipportnet4_add", "hash_ipportnet4_del", "hash_ipportnet4_test", "hash_ipportnet4_flush", "hash_ipportnet6_add", "hash_ipportnet6_del", "hash_ipportnet6_test", "hash_ipportnet6_flush", "hash_netportnet4_add", "hash_netportnet4_del", "hash_netportnet4_test", "hash_netportnet4_flush", "hash_netportnet6_add", "hash_netportnet6_del", "hash_netportnet6_test", "hash_netportnet6_flush" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfSVBQT1JUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYXNoX25ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaGFzaCB0eXBlcyB0aGF0IHVzZSBuZXR3b3JrIHByZWZpeGVzIChDSURSKSBieSBpbnRyb2R1Y2luZyBhIHNlcWNvdW50IHRvIGd1YXJkIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgdGhlIHByZWZpeGVzIGFycmF5LiBUaGlzIGFmZmVjdHMgdGhlIGFkZCwgZGVsLCB0ZXN0LCBhbmQgZmx1c2ggb3BlcmF0aW9ucyBmb3Igc2V2ZXJhbCBoYXNoIHR5cGVzIChuZXQsIG5ldHBvcnQsIG5ldGlmYWNlLCBuZXRuZXQsIGlwcG9ydG5ldCwgbmV0cG9ydG5ldCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5ldGZpbHRlciBpcHNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyByZWFkZXIgbG9naWMgYW5kIGFycmF5IHNoaWZ0aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjEyMDY3ODllYjNkMWI1ODY3MDI5NTQwMjE5N2Y3MzA3ZGI2NmI2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDA6NDk6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IGYwMGM4MmFjZDdmMDUuLmVhNzJiOTc5NGY4ODAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VxbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXHUwMDNlXG4gXG5AQCAtOTgsMTQgJiM0Mzs5OSwzNCBAQCBzdHJ1Y3QgaHRhYmxlIHtcbiAjZGVmaW5lIElQU0VUX05FVF9DT1VOVFx0XHQxXG4gI2VuZGlmXG4gXG4tLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgbmV0X3ByZWZpeCAtIFJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBwcmVmaXguXG4mIzQzOyAqIEBjaWRyOiBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoLlxuJiM0MzsgKiBAY291bnQ6IE51bWJlciBvZiBvY2N1cnJlbmNlcy5cbiYjNDM7ICovXG4gc3RydWN0IG5ldF9wcmVmaXgge1xuLVx0dTggY2lkcjtcdFx0XHQvKiB0aGUgY2lkciB2YWx1ZSAqL1xuLVx0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbiYjNDM7XHR1MzIgY2lkcjo4O1xuJiM0MztcdHUzMiBjb3VudDoyNDtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIENJRFJfTUFYX0NPVU5UICgoMSBcdTAwM2NcdTAwM2MgMjQpIC0gMSlcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIC0gQSBjb2xsZWN0aW9uIG9mIG5ldHdvcmsgcHJlZml4ZXMuXG4mIzQzOyAqIEByY3U6IFJDVSBoZWFkXG4mIzQzOyAqIEBzZXE6IFNlcXVlbmNlIGNvdW50ZXIgZ3VhcmRpbmcgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiBAbmV0c1xuJiM0MzsgKiBAbGVuOiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkuXG4mIzQzOyAqIEBuZXRzOiBBcnJheSBvZiBuZXRfcHJlZml4IHN0cnVjdHVyZXMgKHNvcnRlZCBieSBDSURSIGRlc2NlbmRpbmcpLlxuJiM0MzsgKlxuJiM0MzsgKiBAbmV0cyBlbnRyaWVzIGFyZSB1cGRhdGVkIGluIHBsYWNlIHVuZGVyIEBzZXQmIzM5O3MgbG9jay4gQSBzaW5nbGUgZW50cnkmIzM5O3NcbiYjNDM7ICogY2lkci9jb3VudCBwYWlyIGlzIGFsd2F5cyB1cGRhdGVkIGF0b21pY2FsbHkgdmlhIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSxcbiYjNDM7ICogYnV0IHJlbW92aW5nIGFuIGVudHJ5IGFsc28gc2hpZnRzIGV2ZXJ5IGZvbGxvd2luZyBlbnRyeSBkb3duIGJ5IG9uZSBzbG90LlxuJiM0MzsgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlXG4mIzQzOyAqIGluZGV4ZWQgc2xvdCkgbXVzdCB1c2UgQHNlcSB0byBkZXRlY3QgYW5kIHJldHJ5IGFjcm9zcyBzdWNoIGEgc2hpZnQuXG4mIzQzOyAqL1xuIHN0cnVjdCBuZXRfcHJlZml4ZXMge1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiYjNDM7XHRzZXFjb3VudF9zcGlubG9ja190IHNlcTtcbiBcdHU4IGxlbjtcbiBcdHN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXSBfX2NvdW50ZWRfYnkobGVuKTtcbiB9O1xuQEAgLTE0Myw4ICYjNDM7MTY0LDExIEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNlbmRpZlxuIFxuICNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykgKHtcdFx0XHRcdFxcXG4tXHRjb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7XHRcdFxcXG4tXHREQ0lEUl9QVVQoKF9fbiktXHUwMDNlbGVuID8gKF9fbiktXHUwMDNlbmV0c1swXS5jaWRyIDogaG9zdF9tYXNrKTtcXFxuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTtcdFxcXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXggX19wID1cdFx0XHRcdFx0XFxcbiYjNDM7XHRcdF9fbi1cdTAwM2VsZW4gPyBSRUFEX09OQ0UoX19uLVx1MDAzZW5ldHNbMF0pXHRcdFxcXG4mIzQzO1x0XHRcdCA6IChzdHJ1Y3QgbmV0X3ByZWZpeCl7fTtcdFx0XFxcbiYjNDM7XHREQ0lEUl9QVVQoX19wLmNvdW50ID8gX19wLmNpZHIgOiBob3N0X21hc2spO1x0XHRcXFxuIH0pXG4gXG4gI2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xuQEAgLTMxOCwyNyAmIzQzOzM0Miw0MyBAQCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcbiB9O1xuIFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50XG4tICogc2l6ZWQgbmV0d29ya3MuIGNpZHIgPT0gcmVhbCBjaWRyICYjNDM7IDEgdG8gc3VwcG9ydCAvMC5cbiYjNDM7LyoqXG4mIzQzOyAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nXG4mIzQzOyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxuJiM0MzsgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGVcbiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGhcbiYjNDM7ICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byBhZGQgQGNpZHIgdG9cbiYjNDM7ICpcbiYjNDM7ICogUGVyZm9ybXMgYW4gdXBkYXRlIGlmIEBjaWRyIGlzIGZvdW5kLCBvdGhlcndpc2UgcGVyZm9ybXMgQ09XLXN0eWxlXG4mIzQzOyAqIGFsbG9jYXRpb24gYW5kIHJlcGxhY2VtZW50IHZpYSBSQ1UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4gc3RhdGljIGludFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4gXHRpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7XG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeCBucDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbiYjNDM7XHRcdGlmIChucC5jb3VudClcbiBcdFx0XHRsZW4mIzQzOyYjNDM7O1xuIFx0XHRpZiAoZm91bmQgIT0gLTEpIHtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciBcdTAwM2MgY2lkcikge1xuJiM0MztcdFx0fSBlbHNlIGlmIChucC5jaWRyIFx1MDAzYyBjaWRyKSB7XG4gXHRcdFx0Zm91bmQgPSBpO1xuLVx0XHR9IGVsc2UgaWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpIHtcbi1cdFx0XHRuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0fSBlbHNlIGlmIChucC5jaWRyID09IGNpZHIpIHtcbiYjNDM7XHRcdFx0aWYgKG5wLmNvdW50IFx1MDAzYyBDSURSX01BWF9DT1VOVCkge1xuJiM0MztcdFx0XHRcdG5wLmNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tpXSwgbnApO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FT1ZFUkZMT1c7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0fVxuQEAgLTM1MCw2ICYjNDM7MzkwLDcgQEAgbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4gXHR9XG4gXG4gXHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuJiM0MztcdHNlcWNvdW50X3NwaW5sb2NrX2luaXQoXHUwMDI2dG1wLVx1MDAzZXNlcSwgXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuIFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoaSA9PSBmb3VuZCkge1xuIFx0XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBjaWRyO1xuQEAgLTM3MSw0MiAmIzQzOzQxMiw2MCBAQCBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbXR5cGVfZGVsX2NpZHIgLSBSZW1vdmUgQ0lEUiBlbnRyeSBhbmQgbWFpbnRhaW4gYXJyYXkgaW50ZWdyaXR5LlxuJiM0MzsgKiBAc2V0OiBQb2ludGVyIHRvIHRoZSBpcF9zZXQuXG4mIzQzOyAqIEBoOiBQb2ludGVyIHRvIHRoZSBodHlwZS5cbiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGguXG4mIzQzOyAqIEBuOiBUaGUgaW5kZXggb2YgdGhlIG5ldF9wcmVmaXggYXJyYXkgdG8gcmVtb3ZlIEBjaWRyIGZyb21cbiYjNDM7ICpcbiYjNDM7ICogSWYgQ0lEUiBlbnRyeSBjb3VudCBmYWxscyB0byAwLCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgXCYjMzQ7c2hpZnQtbGVmdFwmIzM0O1xuJiM0MzsgKiBvcGVyYXRpb24gb24gYWxsIGZvbGxvd2luZyBlbGVtZW50cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IHJlbWFpbnNcbiYjNDM7ICogY29udGlndW91cyBhbmQgbWFpbnRhaW5zIGl0cyBkZXNjZW5kaW5nIG9yZGVyIGJ5IENJRFIuIFRoZSB2YWNhdGVkIHNsb3RcbiYjNDM7ICogYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgemVyb2VkIG91dCAoY2lkcj0wLCBjb3VudD0wKS5cbiYjNDM7ICovXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuLVx0dTggaSwgaiwgbGVuID0gMDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4IG5wO1xuIFx0aW50IGZvdW5kO1xuJiM0MztcdHU4IGksIGo7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpICE9IHNpemVvZih1MzIpKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuLVx0XHRcdGxlbiYjNDM7JiM0Mzs7XG4tXHRcdGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciA9PSBjaWRyKVxuJiM0MztcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbiYjNDM7XHRcdGlmIChucC5jb3VudCBcdTAwMjZcdTAwMjYgbnAuY2lkciA9PSBjaWRyKSB7XG4mIzQzO1x0XHRcdG5wLmNvdW50LS07XG4gXHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdGlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0bmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudC0tO1xuLVx0aWYgKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuLVx0bGVuLS07XG4tXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghdG1wKVxuLVx0XHQvKiBMZWF2ZSBhIGhvbGUgKi9cbiYjNDM7XHRpZiAobnAuY291bnQpIHtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXSwgbnApO1xuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXG4tXHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuJiM0MztcdHdyaXRlX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5ldHMtXHUwMDNlc2VxKTtcbiBcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQgfHwgaSA9PSBmb3VuZClcbiYjNDM7XHRcdGlmIChpID09IGZvdW5kKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4tXHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiYjNDM7XG4mIzQzO1x0XHRucCA9IFJFQURfT05DRShuZXRzLVx1MDAzZW5ldHNbaV0pO1xuJiM0MztcdFx0aWYgKGkgIT0gailcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShuZXRzLVx1MDAzZW5ldHNbal0sIG5wKTtcbiYjNDM7XHRcdGomIzQzOyYjNDM7O1xuIFx0fVxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbbl0sIHRtcCk7XG4tXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuKVxuJiM0MztcdFx0V1JJVEVfT05DRShuZXRzLVx1MDAzZW5ldHNbaiYjNDM7JiM0MztdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xuJiM0MztcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuIH1cbkBAIC00NTEsNyAmIzQzOzUxMCw3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaHRhYmxlICp0O1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG5AQCAtNDc3LDE3ICYjNDM7NTM2LDE1IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBcdH1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuLVx0XHR0bXAgPSBremFsbG9jX29iaigqdG1wLCBHRlBfQVRPTUlDKTtcbi1cdFx0aWYgKCF0bXApIHtcbi1cdFx0XHR1OCBqO1xuJiM0MztcdFx0dTggajtcbiBcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaiYjNDM7JiM0MzspXG4tXHRcdFx0XHRuZXRzLVx1MDAzZW5ldHNbal0uY291bnQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVx1MDAzZXJuZXRzW2ldLCB0bXApO1xuLVx0XHRcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuLVx0XHR9XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC1cdTAwM2VybmV0c1tpXSk7XG4mIzQzO1x0XHR3cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobmV0cy1cdTAwM2VuZXRzW2pdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xuJiM0MztcdFx0d3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNm5ldHMtXHUwMDNlc2VxKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdH1cbiAjZW5kaWZcbiB9XG5AQCAtMTI1MywzMSAmIzQzOzEzMTAsNDEgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuIFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcTE7XG4gXHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4gXHRpbnQgcmV0LCBpLCBqO1xuICNlbmRpZlxuLVx0dTMyIGtleSwgbXVsdGkgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBzZXEwO1xuJiM0MztcdHUzMiBrZXksIG11bHRpO1xuIFx0dTggcG9zO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7dGVzdCBieSBuZXRzXFxuXCYjMzQ7KTtcbiBcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7cmV0cnk6XG4mIzQzO1x0bXVsdGkgPSAwO1xuIFx0bmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1swXSk7XG4mIzQzO1x0c2VxMCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0czAtXHUwMDNlc2VxKTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMV0pO1xuJiM0MztcdHNlcTEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5ldHMxLVx1MDAzZXNlcSk7XG4gI2VuZGlmXG4gXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaiYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFuZXRzMC1cdTAwM2VuZXRzW2pdLmNvdW50KVxuJiM0MztcdFx0c3RydWN0IG5ldF9wcmVmaXggcDAgPSBSRUFEX09OQ0UobmV0czAtXHUwMDNlbmV0c1tqXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwMC5jb3VudClcbiBcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XG4mIzQzO1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgcDAuY2lkciwgZmFsc2UpO1xuIFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBuZXRzMS1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgayYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAoIW5ldHMxLVx1MDAzZW5ldHNba10uY291bnQpXG4mIzQzO1x0XHRcdHN0cnVjdCBuZXRfcHJlZml4IHAxID0gUkVBRF9PTkNFKG5ldHMxLVx1MDAzZW5ldHNba10pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFwMS5jb3VudClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cdTAwM2VuZXRzW2tdLmNpZHIsIHRydWUpO1xuJiM0MztcdFx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgcDEuY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkcik7XG4mIzQzO1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgcDAuY2lkcik7XG4gI2VuZGlmXG4gXHRcdGtleSA9IEhLRVkoZCwgaC1cdTAwM2Vpbml0dmFsLCB0LVx1MDAzZWh0YWJsZV9iaXRzKTtcbiBcdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xuQEAgLTEzMDIsNiAmIzQzOzEzNjksMTMgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHR9XG4gI2VuZGlmXG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNm5ldHMwLVx1MDAzZXNlcSwgc2VxMCkpXG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MzsjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiYjNDM7XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZuZXRzMS1cdTAwM2VzZXEsIHNlcTEpKVxuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7I2VuZGlmXG4gXHRyZXQgPSAwO1xuIHVubG9jazpcbiBcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuQEAgLTE3MDcsNiAmIzQzOzE3ODEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHRcdFx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcmF3KGgtXHUwMDNlcm5ldHNbLS1pXSkpO1xuIFx0XHRcdGdvdG8gZnJlZV9ocmVnaW9uO1xuIFx0XHR9XG4mIzQzO1x0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNm5ldHMtXHUwMDNlc2VxLCBcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2VybmV0c1tpXSwgbmV0cyk7XG4gXHR9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbkBAIC0zOCw3ICYjNDM7MzgsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LGlmYWNlXCYjMzQ7KTtcbiAjZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0aWZhY2VcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwXG4gXG4gI2RlZmluZSBTVFJTQ1BZKGEsIGIpXHRzdHJzY3B5KGEsIGIsIElGTkFNU0laKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbmluZGV4IDYyOTE1MzJiZTdhNWEuLjYxYWYxY2UyNzEyNzkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbkBAIC0zNiw3ICYjNDM7MzYsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0XCYjMzQ7KTtcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuIFxuIC8qIElQdjQgdmFyaWFudCAqL1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGlwc2V0IGhhc2ggdHlwZXMgdGhhdCB1c2UgbmV0d29yayBwcmVmaXhlcyAoQ0lEUikgYnkgaW50cm9kdWNpbmcgYSBzZXFjb3VudCB0byBndWFyZCBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIHRoZSBwcmVmaXhlcyBhcnJheS4gVGhpcyBhZmZlY3RzIHRoZSBhZGQsIGRlbCwgdGVzdCwgYW5kIGZsdXNoIG9wZXJhdGlvbnMgZm9yIHNldmVyYWwgaGFzaCB0eXBlcyAobmV0LCBuZXRwb3J0LCBuZXRpZmFjZSwgbmV0bmV0LCBpcHBvcnRuZXQsIG5ldHBvcnRuZXQpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZXRmaWx0ZXIgaXBzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3MgcmVhZGVyIGxvZ2ljIGFuZCBhcnJheSBzaGlmdGluZyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIxMjA2Nzg5ZWIzZDFiNTg2NzAyOTU0MDIxOTdmNzMwN2RiNjZiNjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDAwOjQ5OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKaW5kZXggZjAwYzgyYWNkN2YwNS4uZWE3MmI5Nzk0Zjg4MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvamhhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXFsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCZndDsKIApAQCAtOTgsMTQgJiM0Mzs5OSwzNCBAQCBzdHJ1Y3QgaHRhYmxlIHsKICNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UCQkxCiAjZW5kaWYKIAotLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IG5ldF9wcmVmaXggLSBSZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgcHJlZml4LgomIzQzOyAqIEBjaWRyOiBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoLgomIzQzOyAqIEBjb3VudDogTnVtYmVyIG9mIG9jY3VycmVuY2VzLgomIzQzOyAqLwogc3RydWN0IG5ldF9wcmVmaXggewotCXU4IGNpZHI7CQkJLyogdGhlIGNpZHIgdmFsdWUgKi8KLQl1MzIgY291bnQ7CQkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqLwomIzQzOwl1MzIgY2lkcjo4OwomIzQzOwl1MzIgY291bnQ6MjQ7CiB9OwogCiYjNDM7I2RlZmluZSBDSURSX01BWF9DT1VOVCAoKDEgJmx0OyZsdDsgMjQpIC0gMSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIC0gQSBjb2xsZWN0aW9uIG9mIG5ldHdvcmsgcHJlZml4ZXMuCiYjNDM7ICogQHJjdTogUkNVIGhlYWQKJiM0MzsgKiBAc2VxOiBTZXF1ZW5jZSBjb3VudGVyIGd1YXJkaW5nIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgQG5ldHMKJiM0MzsgKiBAbGVuOiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkuCiYjNDM7ICogQG5ldHM6IEFycmF5IG9mIG5ldF9wcmVmaXggc3RydWN0dXJlcyAoc29ydGVkIGJ5IENJRFIgZGVzY2VuZGluZykuCiYjNDM7ICoKJiM0MzsgKiBAbmV0cyBlbnRyaWVzIGFyZSB1cGRhdGVkIGluIHBsYWNlIHVuZGVyIEBzZXQmIzM5O3MgbG9jay4gQSBzaW5nbGUgZW50cnkmIzM5O3MKJiM0MzsgKiBjaWRyL2NvdW50IHBhaXIgaXMgYWx3YXlzIHVwZGF0ZWQgYXRvbWljYWxseSB2aWEgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpLAomIzQzOyAqIGJ1dCByZW1vdmluZyBhbiBlbnRyeSBhbHNvIHNoaWZ0cyBldmVyeSBmb2xsb3dpbmcgZW50cnkgZG93biBieSBvbmUgc2xvdC4KJiM0MzsgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlCiYjNDM7ICogaW5kZXhlZCBzbG90KSBtdXN0IHVzZSBAc2VxIHRvIGRldGVjdCBhbmQgcmV0cnkgYWNyb3NzIHN1Y2ggYSBzaGlmdC4KJiM0MzsgKi8KIHN0cnVjdCBuZXRfcHJlZml4ZXMgewogCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXNlcWNvdW50X3NwaW5sb2NrX3Qgc2VxOwogCXU4IGxlbjsKIAlzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7CiB9OwpAQCAtMTQzLDggJiM0MzsxNjQsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpCiAjZW5kaWYKIAogI2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoewkJCQlcCi0JY29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pOwkJXAotCURDSURSX1BVVCgoX19uKS0mZ3Q7bGVuID8gKF9fbiktJmd0O25ldHNbMF0uY2lkciA6IGhvc3RfbWFzayk7XAomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7CVwKJiM0MzsJc3RydWN0IG5ldF9wcmVmaXggX19wID0JCQkJCVwKJiM0MzsJCV9fbi0mZ3Q7bGVuID8gUkVBRF9PTkNFKF9fbi0mZ3Q7bmV0c1swXSkJCVwKJiM0MzsJCQkgOiAoc3RydWN0IG5ldF9wcmVmaXgpe307CQlcCiYjNDM7CURDSURSX1BVVChfX3AuY291bnQgPyBfX3AuY2lkciA6IGhvc3RfbWFzayk7CQlcCiB9KQogCiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovCkBAIC0zMTgsMjcgJiM0MzszNDIsNDMgQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7CiB9OwogCiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCi0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50Ci0gKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgJiM0MzsgMSB0byBzdXBwb3J0IC8wLgomIzQzOy8qKgomIzQzOyAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nCiYjNDM7ICogQHNldDogUG9pbnRlciB0byB0aGUgaXBfc2V0CiYjNDM7ICogQGg6IFBvaW50ZXIgdG8gdGhlIGh0eXBlCiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGgKJiM0MzsgKiBAbjogVGhlIGluZGV4IG9mIHRoZSBuZXRfcHJlZml4IGFycmF5IHRvIGFkZCBAY2lkciB0bwomIzQzOyAqCiYjNDM7ICogUGVyZm9ybXMgYW4gdXBkYXRlIGlmIEBjaWRyIGlzIGZvdW5kLCBvdGhlcndpc2UgcGVyZm9ybXMgQ09XLXN0eWxlCiYjNDM7ICogYWxsb2NhdGlvbiBhbmQgcmVwbGFjZW1lbnQgdmlhIFJDVS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogewotCXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7CiAJaW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeCBucDsKIAogCXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJbmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC0mZ3Q7cm5ldHNbbl0pOwogCS8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi8KIAlmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpICZsdDsgbmV0cy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykgewotCQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCW5wID0gUkVBRF9PTkNFKG5ldHMtJmd0O25ldHNbaV0pOwomIzQzOwkJaWYgKG5wLmNvdW50KQogCQkJbGVuJiM0MzsmIzQzOzsKIAkJaWYgKGZvdW5kICE9IC0xKSB7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChuZXRzLSZndDtuZXRzW2ldLmNpZHIgJmx0OyBjaWRyKSB7CiYjNDM7CQl9IGVsc2UgaWYgKG5wLmNpZHIgJmx0OyBjaWRyKSB7CiAJCQlmb3VuZCA9IGk7Ci0JCX0gZWxzZSBpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jaWRyID09IGNpZHIpIHsKLQkJCW5ldHMtJmd0O25ldHNbaV0uY291bnQmIzQzOyYjNDM7OwomIzQzOwkJfSBlbHNlIGlmIChucC5jaWRyID09IGNpZHIpIHsKJiM0MzsJCQlpZiAobnAuY291bnQgJmx0OyBDSURSX01BWF9DT1VOVCkgewomIzQzOwkJCQlucC5jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkJCVdSSVRFX09OQ0UobmV0cy0mZ3Q7bmV0c1tpXSwgbnApOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXJldCA9IC1FT1ZFUkZMT1c7CiYjNDM7CQkJfQogCQkJZ290byB1bmxvY2s7CiAJCX0KIAl9CkBAIC0zNTAsNiAmIzQzOzM5MCw3IEBAIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogCX0KIAogCXRtcC0mZ3Q7bGVuID0gbGVuOwomIzQzOwlzZXFjb3VudF9zcGlubG9ja19pbml0KCZhbXA7dG1wLSZndDtzZXEsICZhbXA7c2V0LSZndDtsb2NrKTsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGkgPT0gZm91bmQpIHsKIAkJCXRtcC0mZ3Q7bmV0c1tqXS5jaWRyID0gY2lkcjsKQEAgLTM3MSw0MiAmIzQzOzQxMiw2MCBAQCBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogbXR5cGVfZGVsX2NpZHIgLSBSZW1vdmUgQ0lEUiBlbnRyeSBhbmQgbWFpbnRhaW4gYXJyYXkgaW50ZWdyaXR5LgomIzQzOyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldC4KJiM0MzsgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGUuCiYjNDM7ICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGguCiYjNDM7ICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byByZW1vdmUgQGNpZHIgZnJvbQomIzQzOyAqCiYjNDM7ICogSWYgQ0lEUiBlbnRyeSBjb3VudCBmYWxscyB0byAwLCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgJiMzNDtzaGlmdC1sZWZ0JiMzNDsKJiM0MzsgKiBvcGVyYXRpb24gb24gYWxsIGZvbGxvd2luZyBlbGVtZW50cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IHJlbWFpbnMKJiM0MzsgKiBjb250aWd1b3VzIGFuZCBtYWludGFpbnMgaXRzIGRlc2NlbmRpbmcgb3JkZXIgYnkgQ0lEUi4gVGhlIHZhY2F0ZWQgc2xvdAomIzQzOyAqIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5IGlzIHplcm9lZCBvdXQgKGNpZHI9MCwgY291bnQ9MCkuCiYjNDM7ICovCiBzdGF0aWMgdm9pZAogbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pCiB7Ci0Jc3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDsKLQl1OCBpLCBqLCBsZW4gPSAwOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeCBucDsKIAlpbnQgZm91bmQ7CiYjNDM7CXU4IGksIGo7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpICE9IHNpemVvZih1MzIpKTsKIAogCXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJbmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC0mZ3Q7cm5ldHNbbl0pOwogCWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChuZXRzLSZndDtuZXRzW2ldLmNvdW50KQotCQkJbGVuJiM0MzsmIzQzOzsKLQkJaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKQomIzQzOwkJbnAgPSBSRUFEX09OQ0UobmV0cy0mZ3Q7bmV0c1tpXSk7CiYjNDM7CQlpZiAobnAuY291bnQgJmFtcDsmYW1wOyBucC5jaWRyID09IGNpZHIpIHsKJiM0MzsJCQlucC5jb3VudC0tOwogCQkJZm91bmQgPSBpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAlpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKQogCQlnb3RvIHVubG9jazsKIAotCW5ldHMtJmd0O25ldHNbZm91bmRdLmNvdW50LS07Ci0JaWYgKG5ldHMtJmd0O25ldHNbZm91bmRdLmNvdW50KQotCQlnb3RvIHVubG9jazsKLQlsZW4tLTsKLQl0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXRtcCkKLQkJLyogTGVhdmUgYSBob2xlICovCiYjNDM7CWlmIChucC5jb3VudCkgewomIzQzOwkJV1JJVEVfT05DRShuZXRzLSZndDtuZXRzW2ZvdW5kXSwgbnApOwogCQlnb3RvIHVubG9jazsKJiM0MzsJfQogCi0JdG1wLSZndDtsZW4gPSBsZW47CiYjNDM7CXdyaXRlX3NlcWNvdW50X2JlZ2luKCZhbXA7bmV0cy0mZ3Q7c2VxKTsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKCFuZXRzLSZndDtuZXRzW2ldLmNvdW50IHx8IGkgPT0gZm91bmQpCiYjNDM7CQlpZiAoaSA9PSBmb3VuZCkKIAkJCWNvbnRpbnVlOwotCQl0bXAtJmd0O25ldHNbal0uY2lkciA9IG5ldHMtJmd0O25ldHNbaV0uY2lkcjsKLQkJdG1wLSZndDtuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtJmd0O25ldHNbaV0uY291bnQ7CiYjNDM7CiYjNDM7CQlucCA9IFJFQURfT05DRShuZXRzLSZndDtuZXRzW2ldKTsKJiM0MzsJCWlmIChpICE9IGopCiYjNDM7CQkJV1JJVEVfT05DRShuZXRzLSZndDtuZXRzW2pdLCBucCk7CiYjNDM7CQlqJiM0MzsmIzQzOzsKIAl9Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGgtJmd0O3JuZXRzW25dLCB0bXApOwotCWtmcmVlX3JjdShuZXRzLCByY3UpOwomIzQzOwomIzQzOwl3aGlsZSAoaiAmbHQ7IG5ldHMtJmd0O2xlbikKJiM0MzsJCVdSSVRFX09OQ0UobmV0cy0mZ3Q7bmV0c1tqJiM0MzsmIzQzO10sIChzdHJ1Y3QgbmV0X3ByZWZpeCl7fSk7CiYjNDM7CXdyaXRlX3NlcWNvdW50X2VuZCgmYW1wO25ldHMtJmd0O3NlcSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwogfQpAQCAtNDUxLDcgJiM0Mzs1MTAsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwotCXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7CiAjZW5kaWYKIAlzdHJ1Y3QgaHRhYmxlICp0OwogCXN0cnVjdCBoYnVja2V0ICpuOwpAQCAtNDc3LDE3ICYjNDM7NTM2LDE1IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIAl9CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiAJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKLQkJbmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC0mZ3Q7cm5ldHNbaV0pOwotCQl0bXAgPSBremFsbG9jX29iaigqdG1wLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCF0bXApIHsKLQkJCXU4IGo7CiYjNDM7CQl1OCBqOwogCi0JCQlmb3IgKGogPSAwOyBqICZsdDsgbmV0cy0mZ3Q7bGVuOyBqJiM0MzsmIzQzOykKLQkJCQluZXRzLSZndDtuZXRzW2pdLmNvdW50ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJjdV9hc3NpZ25fcG9pbnRlcihoLSZndDtybmV0c1tpXSwgdG1wKTsKLQkJCWtmcmVlX3JjdShuZXRzLCByY3UpOwotCQl9CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwkJbmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC0mZ3Q7cm5ldHNbaV0pOwomIzQzOwkJd3JpdGVfc2VxY291bnRfYmVnaW4oJmFtcDtuZXRzLSZndDtzZXEpOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IG5ldHMtJmd0O2xlbjsgaiYjNDM7JiM0MzspCiYjNDM7CQkJV1JJVEVfT05DRShuZXRzLSZndDtuZXRzW2pdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pOwomIzQzOwkJd3JpdGVfc2VxY291bnRfZW5kKCZhbXA7bmV0cy0mZ3Q7c2VxKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKIAl9CiAjZW5kaWYKIH0KQEAgLTEyNTMsMzEgJiM0MzsxMzEwLDQxIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgogCXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxOwogCXN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDsKJiM0MzsJdW5zaWduZWQgaW50IHNlcTE7CiAJaW50IHJldCwgaSwgaiwgazsKICNlbHNlCiAJaW50IHJldCwgaSwgajsKICNlbmRpZgotCXUzMiBrZXksIG11bHRpID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHNlcTA7CiYjNDM7CXUzMiBrZXksIG11bHRpOwogCXU4IHBvczsKIAogCXByX2RlYnVnKCYjMzQ7dGVzdCBieSBuZXRzXG4mIzM0Oyk7CiAJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzO3JldHJ5OgomIzQzOwltdWx0aSA9IDA7CiAJbmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMF0pOwomIzQzOwlzZXEwID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO25ldHMwLSZndDtzZXEpOwogI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyCiAJbmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMV0pOwomIzQzOwlzZXExID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO25ldHMxLSZndDtzZXEpOwogI2VuZGlmCiAJZm9yIChqID0gMDsgaiAmbHQ7IG5ldHMwLSZndDtsZW4gJmFtcDsmYW1wOyAhbXVsdGk7IGomIzQzOyYjNDM7KSB7Ci0JCWlmICghbmV0czAtJmd0O25ldHNbal0uY291bnQpCiYjNDM7CQlzdHJ1Y3QgbmV0X3ByZWZpeCBwMCA9IFJFQURfT05DRShuZXRzMC0mZ3Q7bmV0c1tqXSk7CiYjNDM7CiYjNDM7CQlpZiAoIXAwLmNvdW50KQogCQkJY29udGludWU7CiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKIAkJbXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsICZhbXA7b3JpZyk7Ci0JCW10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC0mZ3Q7bmV0c1tqXS5jaWRyLCBmYWxzZSk7CiYjNDM7CQltdHlwZV9kYXRhX25ldG1hc2soZCwgcDAuY2lkciwgZmFsc2UpOwogCQlmb3IgKGsgPSAwOyBrICZsdDsgbmV0czEtJmd0O2xlbiAmYW1wOyZhbXA7ICFtdWx0aTsgayYjNDM7JiM0MzspIHsKLQkJCWlmICghbmV0czEtJmd0O25ldHNba10uY291bnQpCiYjNDM7CQkJc3RydWN0IG5ldF9wcmVmaXggcDEgPSBSRUFEX09OQ0UobmV0czEtJmd0O25ldHNba10pOwomIzQzOwomIzQzOwkJCWlmICghcDEuY291bnQpCiAJCQkJY29udGludWU7Ci0JCQltdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtJmd0O25ldHNba10uY2lkciwgdHJ1ZSk7CiYjNDM7CQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAxLmNpZHIsIHRydWUpOwogI2Vsc2UKLQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLSZndDtuZXRzW2pdLmNpZHIpOwomIzQzOwkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAwLmNpZHIpOwogI2VuZGlmCiAJCWtleSA9IEhLRVkoZCwgaC0mZ3Q7aW5pdHZhbCwgdC0mZ3Q7aHRhYmxlX2JpdHMpOwogCQluID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7CkBAIC0xMzAyLDYgJiM0MzsxMzY5LDEzIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKIAkJfQogI2VuZGlmCiAJfQomIzQzOwomIzQzOwlpZiAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO25ldHMwLSZndDtzZXEsIHNlcTApKQomIzQzOwkJZ290byByZXRyeTsKJiM0MzsjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKJiM0MzsJaWYgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtuZXRzMS0mZ3Q7c2VxLCBzZXExKSkKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7I2VuZGlmCiAJcmV0ID0gMDsKIHVubG9jazoKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKQEAgLTE3MDcsNiAmIzQzOzE3ODEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJCQkJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLSZndDtybmV0c1stLWldKSk7CiAJCQlnb3RvIGZyZWVfaHJlZ2lvbjsKIAkJfQomIzQzOwkJc2VxY291bnRfc3BpbmxvY2tfaW5pdCgmYW1wO25ldHMtJmd0O3NlcSwgJmFtcDtzZXQtJmd0O2xvY2spOwogCQlSQ1VfSU5JVF9QT0lOVEVSKGgtJmd0O3JuZXRzW2ldLCBuZXRzKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYwppbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCkBAIC0zOCw3ICYjNDM7MzgsNiBAQCBNT0RVTEVfQUxJQVMoJiMzNDtpcF9zZXRfaGFzaDpuZXQsaWZhY2UmIzM0Oyk7CiAjZGVmaW5lIEhUWVBFCQloYXNoX25ldGlmYWNlCiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUUwogI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01VTFRJCi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMAogCiAjZGVmaW5lIFNUUlNDUFkoYSwgYikJc3Ryc2NweShhLCBiLCBJRk5BTVNJWikKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwppbmRleCA2MjkxNTMyYmU3YTVhLi42MWFmMWNlMjcxMjc5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwpAQCAtMzYsNyAmIzQzOzM2LDYgQEAgTU9EVUxFX0FMSUFTKCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0JiMzNDspOwogI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPCiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUUwogI2RlZmluZSBJUFNFVF9ORVRfQ09VTlQgMgotI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVDAKIAogLyogSVB2NCB2YXJpYW50ICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwc2V0IFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGEgZmV3IGZpbGVzIGluIHRoZSBgbmV0ZmlsdGVyL2lwc2V0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AsIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBgc2VxY291bnRfc3BpbmxvY2tfdGAgdG8gcHJvdGVjdCBzb21lIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgYG5ldHNgIHdpdGhpbiBgc3RydWN0IG5ldF9wcmVmaXhlc2AuIFRoYXQgc2lnbmFscyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJuIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcsIHdoaWNoIGlzIHdvcnRoIGtlZXBpbmcgaW4gbWluZC4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgaG93IGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGFuZCBgbXR5cGVfdGVzdF9jaWRyc2AgZnVuY3Rpb24uIEFuZCBpdCBzZWVtcyB0byBiZSByZW1vdmluZyBgI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVDBgIGZyb20gdGhvc2UgbGFzdCB0d28gYC5jYCBmaWxlcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEdpdmVuIHRoYXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgbmV0ZmlsdGVyIGlwc2V0IGluZnJhc3RydWN0dXJlLCBhbmQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGFzaCB0eXBlcyBpbiBwYXJ0aWN1bGFyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIGBpcF9zZXRfaGFzaF9nZW4uaGAgaXMgYSB0ZW1wbGF0ZSBoZWFkZXIsIHNvIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB0aGVyZSB3aWxsIGdldCBpbnN0YW50aWF0ZWQgYWNyb3NzIG11bHRpcGxlIGBpcF9zZXRfaGFzaF8qLmNgIGZpbGVzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYW5kIGBtdHlwZV90ZXN0X2NpZHJzYC4gVGhleSYjMzk7cmUgc3RhdGljIHdpdGhpbiBhIGhlYWRlciwgbWVhbmluZyB0aGV5JiMzOTtsbCBtYW5pZmVzdCBhcyBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXRfYWRkX2NpZHJgLCBgaGFzaF9uZXRwb3J0X2FkZF9jaWRyYCwgZXRjLgoKV2FpdCwgYG10eXBlX2FkZF9jaWRyYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IG10eXBlX2FkZF9jaWRyKC4uLilgLiBTaW5jZSBpdCYjMzk7cyBpbiBhIGhlYWRlciwgaXQmIzM5O3MgaW5jbHVkZWQgaW4gbXVsdGlwbGUgQyBmaWxlcy4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBzZWUgaG93IGBtdHlwZV9hZGRfY2lkcmAgZ2V0cyB1c2VkLiBBaCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgLiBSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBoZWFkZXIgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlIHRoYXQgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkX2NpZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOS0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjEtI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfY2xlYW51cClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMzNT1zdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzQ2OiAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0Ny0gKiBAc2V0OiBQb2ludGVyIHRvIHRoZSBpcF9zZXRcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM1Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM1ODptdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTE0Olx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgSVBTRVQgSW5zdGFudGlhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIElQU0VUIHRva2Vucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5JiMzOTtyZSBpbnN0YW50aWF0ZWQuIFRoZSBjb2RlJiMzOTtzIHVzaW5nIGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgdGhpcyBgTVRZUEVgIGlzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgaGVyZS4gVW5kZXJzdGFuZGluZyBgTVRZUEVgIHdpbGwgZ2l2ZSB1cyB0aGUgY29udGV4dCBmb3IgaG93IHRoaXMgcGFydGljdWxhciBDSURSIGFkZGl0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBicm9hZGVyIElQU0VUIGZyYW1ld29yay4gSXTigJlzIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgcHVycG9zZSBvZiB0aGUgaW5zdGFudGlhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZSBvciB0eXBlIGBNVFlQRWAgcmVwcmVzZW50cy4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI4PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNDojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM1LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjI9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNjktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcwOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzEtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzE9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzktI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI1PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM0OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM1LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMyOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFNldCBIYXNoIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgSVAgc2V0IGhhc2ggdHlwZXMuIEl0IHNlZW1zIGBNVFlQRWAgaXMgYSBwbGFjZWhvbGRlciwgYW5kIGl0IGV4cGFuZHMgdG8gYSBidW5jaCBvZiBkaWZmZXJlbnQgdmFyaWF0aW9uczogYGhhc2hfbmV0NGAsIGBoYXNoX25ldDZgLCBgaGFzaF9uZXRwb3J0NGAsIGBoYXNoX25ldHBvcnQ2YCwgYW5kIHRoZSBsaWtlLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRpZmZlcmVudCBhZGRyZXNzIHR5cGVzIGFuZCBwb3J0IGNvbWJpbmF0aW9ucy4gVGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSBuYW1lZCBhY2NvcmRpbmdseSwgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYW5kIHNvIG9uLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBmYXIuCgpXYWl0LCBJIG5lZWQgdG8gem9vbSBpbiBoZXJlIGZvciBhIG1vbWVudC4uLiBpdCBsb29rcyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoYXQmIzM5O3Mgbm90IGV4cG9zZWQgZXh0ZXJuYWxseSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNvIHRoZSBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgcGFydCBvZiB0aGUgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCwgYXJlIGFjdHVhbGx5IGBoYXNoX25ldDRfa2FkdGAsIGBoYXNoX25ldDRfdWFkdGAsIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCkkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IGBtdHlwZV9hZGRgIGlzIGRlZmluZWQgdG8gY2xhcmlmeSB0aGVzZSBudWFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2FkZFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA0LVx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1Olx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjk4ODptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTg5LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjQxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaXBfc2V0X3R5cGVfdmFyaWFudGAgRXhwb3J0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gZXhwb3J0cyBhc3NvY2lhdGVkIHdpdGggYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gd2hhdCYjMzk7cyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS4gV2hhdCBtZXRob2RzIGFyZSAqbWVhbnQqIHRvIGJlIGNhbGxlZCB0aHJvdWdoIHRoYXQgaW50ZXJmYWNlPyBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgSVAgc2V0IGZyYW1ld29yaywgd2hpY2ggaXMgd2h5IHdlIGFyZSBsb29raW5nIGhlcmUuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZWZpbmluZyB0aGUgYmVoYXZpb3Igb2YgZGlmZmVyZW50IElQIHNldCB0eXBlcywgc28gdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBNeSBmb2N1cyB3aWxsIGJlIHRvIGlkZW50aWZ5IHRoZSBtZXRob2RzIHRoYXQgZW5hYmxlIGRpZmZlcmVudCB0eXBlcyBvZiBJUCBzZXRzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipJbml0aWFsaXphdGlvbiBhbmQgRGVzdHJ1Y3Rpb246KiogSG93IGFyZSB0aGVzZSBJUCBzZXQgdHlwZXMgaW5zdGFudGlhdGVkIGFuZCBjbGVhbmVkIHVwPyBBcmUgdGhlcmUgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgZGlmZmVyZW50IHR5cGVzPwoqICAgKipJbnNlcnRpb24gYW5kIERlbGV0aW9uOioqIEhvdyBhcmUgSVAgYWRkcmVzc2VzIG9yIG5ldHdvcmtzIGFkZGVkIHRvIGFuZCByZW1vdmVkIGZyb20gdGhlc2Ugc2V0cz8gSSYjMzk7bSBiZXR0aW5nIHRoZXJlJiMzOTtzIGEgcG9seW1vcnBoaWMgYXNwZWN0IGhlcmUuCiogICAqKk1lbWJlcnNoaXAgQ2hlY2tpbmc6KiogSXMgdGhlIEFQSSBwcm92aWRlZCB0byBjaGVjayBpZiBhbiBJUCBhZGRyZXNzIG9yIG5ldHdvcmsgaXMgcHJlc2VudCBpbiBhIHNldD8gSG93IGVmZmljaWVudCBpcyB0aGlzPwoqICAgKipJdGVyYXRpb246KiogQ2FuIEkgaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhbiBJUCBzZXQgb2YgdGhpcyB0eXBlPyBXaGF0JiMzOTtzIHRoZSBpbnRlcmZhY2UgZm9yIHRoYXQ/CiogICAqKlBlcnNpc3RlbmNlL1NlcmlhbGl6YXRpb246KiogSG93IGFyZSB0aGUgSVAgc2V0cyBzYXZlZCBhbmQgcmVzdG9yZWQ/IFdoYXQgZGF0YSBmb3JtYXRzIGFyZSB0aGV5IHVzaW5nPwoqICAgKipJbnRlcm5hbCBEZXRhaWxzOioqIEFueSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgbWVtb3J5IG9yIHNwZWNpYWwgdHlwZXMuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IEkgbmVlZCB0byBiZSBhYmxlIHRvIGV2YWx1YXRlIHRoaXMgY29kZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgZWZmaWNpZW5jeS4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIHVzZWQgaW4gdGhlIGtlcm5lbC4gRmluYWxseSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHN0YW5kYXJkIEFQSSwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODYwCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIGBtdHlwZV92YXJpYW50YCBEZWZpbml0aW9uKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYG10eXBlX3ZhcmlhbnRgIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIGZvdW5kYXRpb24sIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgdGhpbmcgKmlzKi4gSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaXRzIHN0cnVjdHVyZSwgaXRzIHByb3BlcnRpZXMsIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgc3lzdGVtIG9yIGNvZGUgYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGNvbXBvbmVudHMuIElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmU/IEFuIGFic3RyYWN0IGNvbmNlcHQ/IEhvdyBkb2VzIGl0IHJlbGF0ZSB0byBvdGhlciAqbXR5cGUqIGRlZmluaXRpb25zLCBvciBvdGhlciB2YXJpYW50cz8gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSAtIGlzIGl0IGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGdlbmVyaWNzIG9yIHBvbHltb3JwaGlzbT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGVmaW5pdGlvbiBpdHNlbGY/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgbXR5cGVfdmFyaWFudGAgRGVmaW5pdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIHRob3VnaHQgcHJvY2VzcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGhlcmUuIFRoZSBjb3JlIG9mIG15IGN1cnJlbnQgd29yayBpbnZvbHZlcyB1bmRlcnN0YW5kaW5nIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBsZXZlcmFnaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGBtdHlwZV92YXJpYW50YC4gU28sIG5hdHVyYWxseSwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBjcnlzdGFsLWNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBpdCAqaXMqLiBUaGF0IG1lYW5zIHRoZSBkZWZpbml0aW9uIGlzIHBhcmFtb3VudC4gSSYjMzk7bSBnb2luZyB0byBwb3JlIG92ZXIgaXQsIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHN0cnVjdHVyZSwgYW55IGFzc29jaWF0ZWQgY29uc3RyYWludHMgb3IgcHJlY29uZGl0aW9ucywgYW5kIGVzcGVjaWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLCBub3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgb3ZlcnZpZXcuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBmb3IgdHlwZSBzYWZldHksIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcGVyZm9ybWFuY2Ugb25jZSBJJiMzOTttIGxvb2tpbmcgYXQgaXQuIFVsdGltYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgbGV2ZWwgb2YgZGV0YWlsIHRoYXQgYWxsb3dzIGZvciBjb25maWRlbnQgZGVjaXNpb24tbWFraW5nIHJlZ2FyZGluZyBpdHMgYXBwbGljYXRpb24gb3IgcG90ZW50aWFsIHJlZmFjdG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbjE2MzM6XHRcdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4xNjM0Olx0XHQudWFkdFx0PSBtdHlwZV91YWR0LFxuMTYzNTpcdFx0LmFkdFx0PSB7XG4xNjM2Olx0XHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxuMTYzNzpcdFx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbjE2Mzg6XHRcdFx0W0lQU0VUX1RFU1RdID0gbXR5cGVfdGVzdCxcbjE2Mzk6XHRcdH0sXG4xNjQwOlx0XHQuZGVzdHJveSA9IG10eXBlX2Rlc3Ryb3ksXG4xNjQxOlx0XHQuZmx1c2hcdD0gbXR5cGVfZmx1c2gsXG4xNjQyOlx0XHQuaGVhZFx0PSBtdHlwZV9oZWFkLFxuMTY0MzpcdFx0Lmxpc3RcdD0gbXR5cGVfbGlzdCxcbjE2NDQ6XHRcdC51cmVmXHQ9IG10eXBlX3VyZWYsXG4xNjQ1Olx0XHQucmVzaXplXHQ9IG10eXBlX3Jlc2l6ZSxcbjE2NDY6XHRcdC5zYW1lX3NldCA9IG10eXBlX3NhbWVfc2V0LFxuMTY0NzpcdFx0LmNhbmNlbF9nYyA9IG10eXBlX2NhbmNlbF9nYyxcbjE2NDg6XHRcdC5yZWdpb25fbG9jayA9IHRydWUsXG4xNjQ5Olx0fTtcbjE2NTA6XHRcbjE2NTE6XHQjaWZkZWYgSVBfU0VUX0VNSVRfQ1JFQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpbXBsZW1lbnRhdGlvbi4uLgoKKipBbmFseXppbmcgdGhlIE1UWVBFIEZ1bmN0aW9uIEluc3RhbnRpYXRpb24qKgoKUmlnaHQsIHNvIHRoZXNlIGBtdHlwZV8qYCBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrczogYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdGAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9rYWR0YCwgYG10eXBlX3VhZHRgLCBhbmQgc28gb24uIFByZXR0eSBzdGFuZGFyZCBzdHVmZiwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIHRoZSBjb250ZXh0IHJpZ2h0LiBUaGVzZSBhcmUgaW5zdGFudGlhdGVkICpwZXIqIGBNVFlQRWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gRWFjaCBgTVRZUEVgIGdldHMgaXRzIG93biBzZXQgb2YgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBpbiBvcmRlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgc2V0LCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0IGBNVFlQRWBzIGRlZmluZSB0aGUgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgdHlwZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLiBJJiMzOTt2ZSBnb3QgdG8gZm9sbG93IHRoZSBkZWZpbml0aW9ucyBhbmQgc2VlIGhvdyB0aGVzZSBsb3ctbGV2ZWwgY2FsbHMgYXJlIHB1dCBpbnRvIG9wZXJhdGlvbiBmb3IgdGhlIGJyb2FkZXIgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6aXAscG9ydCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDQtICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQ1OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00Ni0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMz1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM2LSNkZWZpbmUgSFRZUEVcdFx0aGFzaF9uZXRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Mzc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM1PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQsaWZhY2VcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOC0jZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0aWZhY2Vcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzozOTojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQwLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzI9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzUtI2RlZmluZSBIVFlQRVx0XHRoYXNoX25ldG5ldFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNy0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTM1PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQscG9ydFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzktI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzo0MDojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtNDEtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtNDUtICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzo0NjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQscG9ydCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6Mzc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM4LSNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSGFzaCBNVFlQRXMgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIE1UWVBFczogYGhhc2hfaXBwb3J0bmV0NGAsIGBoYXNoX2lwcG9ydG5ldDZgLCBgaGFzaF9uZXQ0YCwgYGhhc2hfbmV0NmAsIGBoYXNoX25ldGlmYWNlNGAsIGBoYXNoX25ldGlmYWNlNmAsIGBoYXNoX25ldG5ldDRgLCBgaGFzaF9uZXRuZXQ2YCwgYGhhc2hfbmV0cG9ydDRgLCBgaGFzaF9uZXRwb3J0NmAsIGBoYXNoX25ldHBvcnRuZXQ0YCwgYW5kIGBoYXNoX25ldHBvcnRuZXQ2YC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBfYWRkYCwgYF9kZWxgLCBgX3Rlc3RgLCBhbmQgYF9mbHVzaGAgZnVuY3Rpb25zIGZvciBlYWNoIHR5cGUuIEkmIzM5O20gdGhpbmtpbmcsIGZvciBleGFtcGxlLCBhYm91dCBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYW5kIGBoYXNoX25ldDRfZmx1c2hgOyBhbmQgc2ltaWxhcmx5IGZvciBgbmV0NmAsIGBuZXRwb3J0YCwgYG5ldGlmYWNlYCwgYW5kIHRoZSBjb21iaW5lZCB0eXBlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGVhY2ggb2YgdGhvc2UgZnVuY3Rpb25zIG9wZXJhdGVzIHdpdGhpbiBpdHMgcmVzcGVjdGl2ZSBjb250ZXh0LgoKV2FpdCBhIHNlY29uZCwgdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBsaXN0ZWQgaW4gdGhlIGhlYWRlci4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBlaXRoZXIgaW5saW5lZCBvciBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBvYmplY3QgZmlsZSwgYW5kIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBJcyBgbXR5cGVfYWRkX2NpZHJgIG9uZSBvZiB0aGVtPyBBbmQgYG10eXBlX2FkZGA/IEludGVyZXN0aW5nLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGFjdHVhbGx5ICppcyogZXhwb3J0ZWQgYXMgYSBzeW1ib2wsIG9yIGlmIGl0JiMzOTtzIGFsc28gc3RhdGljIGFuZCBwb3RlbnRpYWxseSBpbmxpbmVkIG9yIGhpZGRlbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTc0MD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzQyLVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTc1Mj1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5MDU6XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTg4Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTk2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgbXR5cGVfYWRkYCBhbmQgYG10eXBlX3ZhcmlhbnRgKioKClJpZ2h0LCBzbyBgbXR5cGVfYWRkYC4uLiBJIHJlY2FsbCB0aGF0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYy4gQW5kIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgZWxlbWVudCB3aXRoaW4gYG10eXBlX3ZhcmlhbnQuYWR0YCwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW5kZXhlZCBieSBgSVBTRVRfQUREYC4gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhIGZsYWcuIFNpbmNlIGBtdHlwZV9hZGRgIGlzIHN0YXRpYywgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBmaWxlIG9yIHRyYW5zbGF0aW9uIHVuaXQuIFRoZW4gdGhlcmUmIzM5O3MgYG10eXBlX3ZhcmlhbnRgLCB3aGljaCBpcyAqYWxzbyogc3RhdGljISBUaGF0IHN1Z2dlc3RzIHRoaXMgc3RydWN0dXJlIGlzIGNvcmUgdG8gYSBsaW1pdGVkIHNjb3BlLCBtYXliZSBldmVuIGEgc2luZ2xldG9uIHBhdHRlcm4sIG9yIGF0IGxlYXN0IGEgdGlnaHRseSBjb250cm9sbGVkIGFjY2VzcyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGZhY3QgdGhhdCBib3RoIGFyZSBzdGF0aWMgdGVsbHMgbWUgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBkZXNpZ24uIFdoZXJlLCBhbmQgaG93IGlzIGBtdHlwZV92YXJpYW50YCBhY3R1YWxseSBiZWluZyB1c2VkPyBLbm93aW5nIGl0cyB1c2FnZSB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHN0YXRpYyBhc3NpZ25tZW50LiBMZXQmIzM5O3MgdHJhY2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ1LSN1bmRlZiBtdHlwZV9jYW5jZWxfZ2Ncbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiN1bmRlZiBtdHlwZV92YXJpYW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0Ny0jdW5kZWYgbXR5cGVfZGF0YV9tYXRjaFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjkzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfY2FuY2VsX2djKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyOTQ6I2RlZmluZSBtdHlwZV92YXJpYW50XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdmFyaWFudClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjk1LSNkZWZpbmUgbXR5cGVfZGF0YV9tYXRjaFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX21hdGNoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzMtXHQua2FkdFx0PSBtdHlwZV9rYWR0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBTZXQgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIGBtdHlwZV92YXJpYW50YCBpcyB0aWVkIHRvIGEgc3BlY2lmaWMgaGFzaCB2YXJpYW50LCBpbiB0aGlzIGNhc2UsIGBoYXNoX25ldDRfdmFyaWFudGAgYW5kIHRoZSBsaWtlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjb25uZWN0aW9uLiBOb3cgSSByZWNhbGwgdGhhdCB0aGlzIGBtdHlwZV92YXJpYW50YCBpcyB0aGVuIHBhc3NlZCB0byBgaXBfc2V0X3R5cGVfcmVnaXN0ZXJgLiBIbW0sIEkgc2hvdWxkIHRyYWNlIHRoYXQuCgpUaGlzIGNhbGxzIGZvciBhIGNsb3NlciBsb29rIGF0IGBpcF9zZXRfaGFzaF9uZXQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YXJpYW50cyBhcmUgcmVnaXN0ZXJlZCBhbmQgaG93IHRoZWlyIHNwZWNpZmljIHByb3BlcnRpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBicm9hZGVyIElQIHNldCBmcmFtZXdvcmsuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBgbXR5cGVfdmFyaWFudGAgYXNzb2NpYXRpb24uIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBjYWxscyBpbnZvbHZlZD8gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoaW5nIGxvZ2ljLCB0aGUgY29sbGlzaW9uIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljIHRvIHRoZXNlIG5ldC1iYXNlZCBzZXRzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2hfbmV0NF92YXJpYW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYxMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG10eXBlX3ZhcmlhbnRgIERlZmluaXRpb24qKgoKT2theSwgc28gbGV0IG1lIGp1c3QgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIHRoZSBgbXR5cGVfdmFyaWFudGAgaXMgZGVmaW5lZCBhcyBgSVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KWAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHRoZSBiYXNlIHN0cnVjdHVyZS4gTm93LCBpZiBgTVRZUEVgIGhhcHBlbnMgdG8gYmUgYGhhc2hfbmV0NGAsIHRoZW4sIGFuZCBvbmx5IHRoZW4sIGBtdHlwZV92YXJpYW50YCBiZWNvbWVzIGBoYXNoX25ldDRfdmFyaWFudGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgaGFzaF9uZXQ0YCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgaXBfc2V0X2hhc2hfbmV0LmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVmZXJlbmNlcyBhbmQgaW1wbGVtZW50YXRpb25zIG9mIGBoYXNoX25ldDRgLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNDEtLyogTWVtYmVyIGVsZW1lbnRzICAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo0MjpzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00My1cdF9fYmUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTUxPXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjUyOmhhc2hfbmV0NF9kYXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqaXAxLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MzpcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmlwMixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNTQtXHRcdCAgICAgdTMyICptdWx0aSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTYwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6NjE6aGFzaF9uZXQ0X2RvX2RhdGFfbWF0Y2goY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02Mi17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz02Nj1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2NzpoYXNoX25ldDRfZGF0YV9zZXRfZmxhZ3Moc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTY4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTcyPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjczOmhhc2hfbmV0NF9kYXRhX3Jlc2V0X2ZsYWdzKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggKmZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy03NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz03OD1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo3OTpoYXNoX25ldDRfZGF0YV9uZXRtYXNrKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9ODU9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6ODY6aGFzaF9uZXQ0X2RhdGFfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDI6aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwMzpcdFx0ICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTA4OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwOS0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTExMj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExMzpoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTYte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMTc6XHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExOC1cdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExOTpcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMjAtXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMzY6aGFzaF9uZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMzctXHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzOC17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEzOTpcdHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQwLVx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQxOlx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0Mi1cdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE5Ny1cdFx0aWYgKGkgXHUwMDNlIElQU0VUX01BWF9SQU5HRSkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxOTg6XHRcdFx0aGFzaF9uZXQ0X2RhdGFfbmV4dChcdTAwMjZoLVx1MDAzZW5leHQsIFx1MDAyNmUpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTktXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDgyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgSVAgU2V0IEhhc2ggR2VuZXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHJlZmVyZW5jaW5nIGBtdHlwZV92YXJpYW50YC4gUmlnaHQsIEkgcmVjYWxsIHRoYXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGlwX3NldF9oYXNoX2dlbi5oYCDigJMgdGhhdCYjMzk7cyB0aGUgaGVhZGVyIHdoZXJlIHdlIGhhdmUgYWxsIHRob3NlIHR5cGUtc3BlY2lmaWMgaGVscGVyIG1hY3JvcyBhbmQgc3RydWN0dXJlcyBmb3IgZ2VuZXJhdGluZyB0aGUgaGFzaCBzZXRzLiBBaCwgYW5kIGl0JiMzOTtzIHVzZWQgKndpdGhpbiogdGhhdCBzYW1lIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlOyBwcm9iYWJseSBhIGxvY2FsIHN0cnVjdHVyZS4gSGFuZyBvbi4uLiBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGV0YWlscy4gYG10eXBlX3ZhcmlhbnRgIGlzICpzdGF0aWMgY29uc3QqLCBzbyBpdCBpcyBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSBhbmQgc2NvcGVkIGludGVybmFsbHkuIEl0IGlzIGEgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCwgc28gdGhlIHR5cGUgaXMgY3JpdGljYWwuIEFoYSwgeWVzLCBJJiMzOTttIHNlZWluZyBpdCBub3c6IGBtdHlwZV92YXJpYW50ID0geyAuLi4gfWAuIFRoYXQgY29uZmlybXMgaXQsIGl0JiMzOTtzIGEgY29uc3RhbnQsIGFuZCBpdCBsb29rcyBsaWtlIGEgbG9va3VwIHRhYmxlIG9mIHNvcnRzIGNvbnRhaW5pbmcgZGlmZmVyZW50IHNldHRpbmdzLCBvcHRpb25zLCBvciBtZXRhZGF0YSBmb3IgaGFzaCB0eXBlcy4gTm93IGxldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCBnb2VzLi4uLiBPa2F5LCBhbmQgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpYC4gSG1tLCBub3cgdGhlIG1hY3JvIGlzIHRoZSBrZXkuIFRoYXQgZXhwYW5kcyB0byBgaGFzaF9uZXRfY3JlYXRlYCDigJMgdGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyBuZXQgaGFzaCBjcmVhdGlvbiBmdW5jdGlvbiEgU28gYG10eXBlX3ZhcmlhbnRgIG11c3QgZmVlZCBpbnRvIHRoZSBoYXNoIGNyZWF0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGF0IGBfY3JlYXRlYCBmdW5jdGlvbiBwcm9iYWJseSB1c2VzIHZhbHVlcyBmcm9tIGBtdHlwZV92YXJpYW50YCB0byBjb25maWd1cmUgdGhpbmdzIGxpa2UgdGhlIGhhc2hpbmcgYWxnb3JpdGhtLCB0aGUgYnVja2V0IHNpemUsIG9yIG90aGVyIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgc3BlY2lmaWMgaGFzaCBuZXQgYmVpbmcgY3JlYXRlZC4gUGVyZmVjdCwgbm93IEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB1c2FnZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV92YXJpYW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDY6I3VuZGVmIG10eXBlX3ZhcmlhbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ3LSN1bmRlZiBtdHlwZV9kYXRhX21hdGNoXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTMtI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI5NDojZGVmaW5lIG10eXBlX3ZhcmlhbnRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTUtI2RlZmluZSBtdHlwZV9kYXRhX21hdGNoXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfbWF0Y2gpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGNoZWNrLCBzcGVha2luZyBhcyBteXNlbGYsIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byBgaXBfc2V0X2hhc2hfZ2VuLmhgKioKClJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXNoIG5ldCBjcmVhdGlvbiBhbmQgdmFyaWFudCBtYW5hZ2VtZW50IGFyZSBpbXBsZW1lbnRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEkmIzM5O2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgdGhlIGNvZGUgd2l0aGluLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBpbnN0YW5jZXMgd2hlcmUgYGhhc2hfbmV0X2NyZWF0ZWAgb3IgYG10eXBlX3ZhcmlhbnRgIGFyZSB1c2VkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QsIHRoZSBwYXJhbWV0ZXJzIHRoZXkgdGFrZSwgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHRoZXkgaW1wbGVtZW50LiBJcyB0aGUgYGhhc2hfbmV0X2NyZWF0ZWAgZnVuY3Rpb24gcHJvcGVybHkgbWFuYWdpbmcgbWVtb3J5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgdmFyaWFudCB1c2FnZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbXR5cGVfdmFyaWFudGAgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBgaGFzaF9uZXRgIHR5cGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZmluZCBob3cgdGhlc2UgZWxlbWVudHMgY29tYmluZSBhbmQgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gaXMgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV92YXJpYW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDY6I3VuZGVmIG10eXBlX3ZhcmlhbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ3LSN1bmRlZiBtdHlwZV9kYXRhX21hdGNoXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTMtI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI5NDojZGVmaW5lIG10eXBlX3ZhcmlhbnRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTUtI2RlZmluZSBtdHlwZV9kYXRhX21hdGNoXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfbWF0Y2gpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cdC5rYWR0XHQ9IG10eXBlX2thZHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHdvcms6CgoqKkh1bnRpbmcgRG93biBUaGF0IGBfdmFyaWFudGAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpczogSSBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIGBfdmFyaWFudGAgdGhpbmcgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlwX3NldF9oYXNoX2dlbi5oYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHBhcnQgb2Ygc29tZSBJUCBzZXQgaGFzaCBnZW5lcmF0aW9uIHByb2Nlc3MuIEZpbmRpbmcgdGhpcyB3aWxsIGJlIHRoZSBpbml0aWFsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNhZ2UgYW5kIHdoYXQgdGhlIGFzc29jaWF0ZWQgbG9naWMgaXMgZG9pbmcuIExldOKAmXMgZ2V0IHRvIHNlYXJjaGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X3ZhcmlhbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0NS0jdW5kZWYgbXR5cGVfY2FuY2VsX2djXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0NjojdW5kZWYgbXR5cGVfdmFyaWFudFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctI3VuZGVmIG10eXBlX2RhdGFfbWF0Y2hcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5My0jZGVmaW5lIG10eXBlX2NhbmNlbF9nY1x0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mjk0OiNkZWZpbmUgbXR5cGVfdmFyaWFudFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3ZhcmlhbnQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5NS0jZGVmaW5lIG10eXBlX2RhdGFfbWF0Y2hcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9tYXRjaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mjg9SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMxLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjMyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVx0LmthZHRcdD0gbXR5cGVfa2FkdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2NTM9SVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTgyMi0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTgyMzpcdFx0c2V0LVx1MDAzZXZhcmlhbnQgPSBcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNF92YXJpYW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTgyNC1cdFx0c2V0LVx1MDAzZWRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xODI4LVx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTgyOTpcdFx0c2V0LVx1MDAzZXZhcmlhbnQgPSBcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNl92YXJpYW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTgzMC1cdFx0c2V0LVx1MDAzZWRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTE2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgbGluZSwgYHNldC0mZ3Q7dmFyaWFudCA9ICZhbXA7SVBTRVRfVE9LRU4oSFRZUEUsIDRfdmFyaWFudCk7YCDigJMgdGhhdCYjMzk7cyB0aGUga2V5LiBTbyBgaGFzaF9uZXQ0X3ZhcmlhbnRgIGlzIHRoZSBhY3R1YWwgbmFtZSwgd2hpY2ggaXMgZ29vZC4gTGV0IG1lIHNlZSwgYEhUWVBFYCBpcyBkZWZpbmVkIGFzIGBoYXNoX25ldGAsIHNvIHRoZSBmdWxsIG5hbWUgaXMgaW5kZWVkIGBoYXNoX25ldDRfdmFyaWFudGAuIEFuZCB0aGVuLCBgTVRZUEVgIGlzIGBoYXNoX25ldDRgLCB3aGljaCBtZWFucyBgbXR5cGVfdmFyaWFudGAgbXVzdCBhbHNvIHJlc29sdmUgdG8gYGhhc2hfbmV0NF92YXJpYW50YC4KCk5vdywgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIOKAkyB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZXhwb3J0ZWQuIFRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyB0aGV5IHdvbiYjMzk7dCBoYXZlIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpbWFnZSB1bmxlc3MgdGhleSBhcmUgKm5vdCogaW5saW5lZC4gQmVjYXVzZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycywgdGhleSBkZWZpbml0ZWx5IGNhbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGlzIHdpbGwgZ2VuZXJhdGUgc3ltYm9scyEgVGhlaXIgbmFtZXMgd2lsbCBiZSBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9mbHVzaGAsIGFuZCBzbyBvbi4KCkhhbmcgb24uLi4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgaGFzaF9uZXQ0X2FkZGAgaXMgdGhlIGFjdHVhbCBuYW1lLiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gT2theSwgc28gYG10eXBlX2FkZGAgaXMgZGVmaW5lZCBhcyBgc3RhdGljIGludCBtdHlwZV9hZGQoLi4uKWAuIEFoYSEgQnV0IGBtdHlwZV9hZGRgIGlzIGEgbWFjcm8sIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2Ny0jZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjg6I2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjktI2RlZmluZSBtdHlwZV9kZWxfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjc5LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyODA6I2RlZmluZSBtdHlwZV9hZGRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3ODcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBNYXBwaW5nIGZvciBJUCBTZXQgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbXR5cGVfYWRkYCBpcyBpbmRlZWQgbWFwcGVkIHRvIGBoYXNoX25ldDRfYWRkYC4gTm93IEkgY2FuIGxpc3QgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGZvciBJUHY0LCBJUHY2LCBwb3J0LCBpbnRlcmZhY2UsIGFuZCBuZXR3b3JrIHZhcmlhdGlvbnM6IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYGhhc2hfbmV0Nl9hZGRgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX25ldDZfdGVzdGAsIGBoYXNoX25ldDZfZmx1c2hgLCBhbmQgc28gb24sIGNvdmVyaW5nIGFsbCB0aGUgcGVybXV0YXRpb25zLgoKQnV0IGhhbmcgb24sIEkgc2VlIGBtdHlwZV9hZGRfY2lkcmAsIHdoaWNoIGxvb2tzIGxpa2UgYSBtYWNyby4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbjogYCNkZWZpbmUgbXR5cGVfYWRkX2NpZHIgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilgIGNvbmZpcm1zIGl0LiBTbywgdGhhdCBtZWFucyBgaGFzaF9uZXQ0X2FkZF9jaWRyYCBpcyBhbHNvIGEgc3ltYm9sIHRvIGNvbnNpZGVyLiBUaGUgY2hhbGxlbmdlIHdpdGggdGhpcyBgbXR5cGVfYWRkX2NpZHJgIGZ1bmN0aW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgIGFuZCBgbXR5cGVfcmVzaXplYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBJcyBpdCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gU2luY2UgaXQmIzM5O3Mgc3RhdGljLCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlLgoKSSBzaG91bGQgdmVyaWZ5IGJ5IGNoZWNraW5nIHdoZXRoZXIgYGhhc2hfbmV0NF9hZGRgIGlzIGEgYmV0dGVyIHRhcmdldC4gUmlnaHQsIGBoYXNoX25ldDRfYWRkYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBpbmxpbmUgaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50IG1ha2VzIHRoYXQgZnVuY3Rpb24gYSBjbGVhcmVyIHRhcmdldC4KCk5vdywgd2FpdCwgaXMgYG10eXBlX3Rlc3RfY2lkcnNgIGFub3RoZXIgbWFjcm8/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjgyOiNkZWZpbmUgbXR5cGVfdGVzdF9jaWRyc1x0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0X2NpZHJzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODMtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpcHNldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBtdHlwZV90ZXN0X2NpZHJzYCBpcyBlcXVpdmFsZW50IHRvIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AuIEdvdCBpdC4gQW5kIGBtdHlwZV90ZXN0YCBjYWxscyB0aGF0LiBOb3csIEkmIzM5O20gY3VyaW91cyBpZiBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgaW5saW5lZC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbCBjYW5kaWRhdGUgZm9yIGlubGluaW5nLiBIb3dldmVyLCBgaGFzaF9uZXQ0X3Rlc3RgIGlzbiYjMzk7dCBpbmxpbmVkLCBzbyB0aGF0JiMzOTtzIGEgY2x1ZS4KClRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zLiBUaGUgcmVsZXZhbnQgZmlsZXMgc2VlbSB0byBiZSBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AsIGBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNgLCBhbmQgdGhlIGhlYWRlciBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBJJiMzOTtsbCBvcGVuIHVwIHRoZSBLY29uZmlnIGZpbGVzIGZvciB0aGVzZSB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGNvbmZpZ3VyZWQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9oYXNoX25ldGlmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipEaXZpbmcgaW50byB0aGUgaXBzZXQgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJlYXN0OiBgbmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZWAuIEl0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGlwc2V0IGlzIGRlZmluZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgc3lzdGVtIGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgZ2V0cyBjb21waWxlZCBhbmQgbGlua2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIGFuZCBhbnkgc3BlY2lmaWMgZmxhZ3MgdGhhdCBhcmUgYmVpbmcgdXNlZCwgcGFydGljdWxhcmx5IG9wdGltaXphdGlvbiBzZXR0aW5ncyBhbmQgYW55IGxpbmtlciB0cmlja3MuIEkmIzM5O20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGN1c3RvbSBydWxlcyBvciBtb2R1bGVzIGJlaW5nIGVtcGxveWVkLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSB0cm91Ymxlc2hvb3QgcG90ZW50aWFsIGlzc3VlcywgdW5kZXJzdGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBldmVuIHByb3Bvc2UgZnV0dXJlIGVuaGFuY2VtZW50cy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGJ1cmllZCB3aXRoaW4gdGhpcyBmaWxlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9oYXNoX25ldGlmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUKSAmIzQzOz0gaXBfc2V0X2hhc2hfbmV0cG9ydC5vXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRSkgJiM0Mzs9IGlwX3NldF9oYXNoX25ldGlmYWNlLm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMjctb2JqLSQoQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVCkgJiM0Mzs9IGlwX3NldF9oYXNoX25ldG5ldC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzkwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIElQc2V0IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBJUHNldCBjb25maWd1cmF0aW9uczogYENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFuZCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVGAuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCwgcHJvYmFibHkgaW4gdGhlIHdheSB0aGF0IHRoZSBoYXNoIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQuIFRoZSBuZXRwb3J0bmV0IG9uZSBpbW1lZGlhdGVseSBmbGFncywgc2luY2UgaXQgaGFzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gcG9ydCBhbmQgbmV0d29yaywgd2hpY2ggYWx3YXlzIHByZXNlbnRzIGNoYWxsZW5nZXMgZm9yIHNjYWxpbmcuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcyBvZiBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9gIGZvciB0aGF0IG9wdGlvbi4gVGhhdCBmaWxlIHNob3VsZCBkZWZpbmUgaXQsIGFuZCBzaG93IGl0cyBkZXBlbmRlbmNpZXMuIEhvcGVmdWxseSwgaXQmIzM5O2xsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBvbiBob3cgdGhlc2UgYXJlIHJlbGF0ZWQgYW5kIHdoZXRoZXIgb25lIGRlcGVuZHMgb24gb3RoZXJzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cyBvciBjbGV2ZXIgY29tYmluYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX1NFVF9IQVNIX05FVElGQUNFYC4gVGhhdCBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIGJhY2sgZnJvbSB0aGF0IHNwZWNpZmljIHNldCB0eXBlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgbGlicmFyaWVzIGl0IHJlbGllcyBvbiDigJMga2VybmVsIG1vZHVsZXMsIG90aGVyIElQIHNldCBmdW5jdGlvbmFsaXR5LCBtYXliZSBzcGVjaWZpYyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIGVsZW1lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoZWFkZXIgZmlsZSBpbmNsdWRlcywgZnVuY3Rpb24gY2FsbHMsIG9yIGFueSBraW5kIG9mIGRpcmVjdCBvciBpbmRpcmVjdCByZWZlcmVuY2VzLiBJdOKAmXMgYWxzbyB3b3J0aCBjb25zaWRlcmluZyBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBjb2RlIG9yLCBtb3JlIGxpa2VseSwgc29tZXRoaW5nIEkmIzM5O2xsIGNvbnN0cnVjdCBtZW50YWxseSBhcyBJIHdvcmsgdGhyb3VnaCB0aGUgcmVsYXRpb25zaGlwcy4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLCBlc3BlY2lhbGx5IGFzIGl0IHJlbGF0ZXMgdG8gaW50ZXJmYWNlLXNwZWNpZmljIElQIHNldCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU4Olx0Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG4gMTU5Olx0XHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFwmIzM0O1xuIDE2MDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAxNjE6XHRcdGhlbHBcbiAxNjI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgaGFzaDpuZXQsaWZhY2Ugc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2hcbiAxNjM6XHRcdCAgb25lIGNhbiBzdG9yZSBJUHY0L0lQdjYgbmV0d29yayBhZGRyZXNzL3ByZWZpeCBhbmRcbiAxNjQ6XHRcdCAgaW50ZXJmYWNlIG5hbWUgcGFpcnMgYXMgZWxlbWVudHMgaW4gYSBzZXQuXG4gMTY1Olx0XG4gMTY2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE2NzpcdFxuIDE2ODpcdGNvbmZpZyBJUF9TRVRfTElTVF9TRVRcbiAxNjk6XHRcdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4gMTcwOlx0XHRkZXBlbmRzIG9uIElQX1NFVFxuIDE3MTpcdFx0aGVscFxuIDE3MjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsaXN0OnNldCBzZXQgdHlwZSBzdXBwb3J0LiBJbiB0aGlzXG4gMTczOlx0XHQgIGtpbmQgb2Ygc2V0IG9uZSBjYW4gc3RvcmUgdGhlIG5hbWUgb2Ygb3RoZXIgc2V0cyBhbmQgaXQgZm9ybXNcbiAxNzQ6XHRcdCAgYW4gb3JkZXJlZCB1bmlvbiBvZiB0aGUgbWVtYmVyIHNldHMuXG4gMTc1Olx0XG4gMTc2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE3NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBoaW5nZXMgb24gdGhpcyBgSVBfU0VUYC4gVGhhdCYjMzk7cyB0aGUga2V5IHZhcmlhYmxlIGhlcmUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICppdCYjMzk7cyBhbGwgYWJvdXQgaG93IGBJUF9TRVRgIGlzIGJlaW5nIHVzZWQsIGFuZCB3aGF0JiMzOTtzIGNvbm5lY3RlZCB0byBpdCouIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7d2hhdCBvdGhlciBjb21wb25lbnRzLCBzeXN0ZW1zLCBvciBydWxlcyByZWx5IG9uIHRoZSBzdGF0ZSBvciBjb250ZW50cyBvZiBgSVBfU0VUYD8mIzM0Oy4gSXMgaXQgZGlyZWN0bHkgZmVlZGluZyBpbnRvIGZpcmV3YWxsIHJ1bGVzPyBJcyBpdCBsaW5rZWQgdG8gYSBkeW5hbWljIHJvdXRpbmcgcHJvdG9jb2w/IEFyZSB0aGVyZSBtb25pdG9yaW5nIHRvb2xzIHRoYXQgYXJlIGtleWVkIHRvIGNoYW5nZXMgaW4gdGhhdCBzZXQ/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBpZiBgSVBfU0VUYCBiZWhhdmVzIHVuZXhwZWN0ZWRseS4gU28sIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMsIHN5c3RlbSBsb2dzLCBhbmQgbWF5YmUgZXZlbiBsb29rIGZvciBhbnkgbW9uaXRvcmluZyBkYXNoYm9hcmRzIHRoYXQgcmVmZXJlbmNlIHRoYXQgaWRlbnRpZmllci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdHJhY2sgZG93biBldmVyeSBkaXJlY3QgYW5kIGluZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYElQX1NFVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uZnVzaW9uKioKCkhtbSwganVzdCBhIHF1aWNrIG1lbnRhbCBjaGVjayBoZXJlLiBJIHdhcyBqdXN0IHJldmlld2luZyBzb21lIGBuZXRmaWx0ZXJgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBxdWlja2x5LiBXaGVyZSBleGFjdGx5IGlzIHRoZSBgSVBfU0VUYCBLY29uZmlnIHN5bWJvbCBkZWZpbmVkPyBJcyBpdCBkaXJlY3RseSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIG9yIGFtIEkgdGhpbmtpbmcgb2YgaXQgYmVpbmcgdW5kZXIgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgIHN1YmRpcmVjdG9yeT8gSXQmIzM5O3MgZWFzeSB0byBnZXQgdGhlc2UgZGV0YWlscyBtdWRkbGVkIHdoZW4geW91JiMzOTtyZSBqdW1waW5nIGFyb3VuZCB2YXJpb3VzIGtlcm5lbCBjb21wb25lbnRzLiBJIHJlYWxseSBzaG91bGQgYmUgYWJsZSB0byBpbnN0YW50bHkgcmVjYWxsIHRoaXMsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgcXVpY2sgY2hlY2sgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IGNvbmZ1c2VkIHRoZSByZWxldmFudCBsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1lbnVjb25maWcgSVBfU0VUYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG1lbnVjb25maWdgIHNldHVwLCBzcGVjaWZpY2FsbHkgdGhlIGBJUF9TRVRgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG9wdGlvbnMgb3IgbW9kdWxlcyBtaWdodCBiZSByZXF1aXJlZCwgb3IgaWYgYElQX1NFVGAgaXRzZWxmIGRlcGVuZHMgb24gYSBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgc3RhY2sgY29uZmlndXJhdGlvbiBvciBzZWN1cml0eSBmZWF0dXJlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBgSVBfU0VUYCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHZhcmlhYmxlcyBhbmQgc3ltYm9scyBuZWVkIHRvIGJlIHNldCBvciBlbmFibGVkIGZvciBgSVBfU0VUYCB0byB3b3JrLiBJIGFsc28gZXhwZWN0IHRoYXQgdGhlcmUmIzM5O2xsIGJlIHNvbWUgZG9jdW1lbnRhdGlvbiB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gYnJvd3NlIGZvciBhbnkgYWRkaXRpb25hbCBwcmVyZXF1aXNpdGVzLiBJJiMzOTttIHByaW1hcmlseSB0aGlua2luZyBhYm91dCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdHMgdXNlLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdGluZyBzZXR0aW5ncy4gSSBhbSB0cnlpbmcgdG8gYXNjZXJ0YWluIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkaXJlY3Qgb3IgaW5kaXJlY3QuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGFibGUgdG8gYWNjdXJhdGVseSBjb25maWd1cmUgYElQX1NFVGAgYW5kIGludGVncmF0ZSBpdCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElQX1NFVFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxuICAgODpcdFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XG4gICA5Olx0XHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcJiMzNDtzZXRcJiMzNDsgbWF0Y2hcbiAgMTA6XHRcdCAgYW5kIFwmIzM0O1NFVFwmIzM0OyB0YXJnZXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGlmIElQX1NFVFxuICAxNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAzMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFNldCBDb25maWd1cmF0aW9uIGFuZCBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYElQX1NFVGAgZGVwZW5kZW5jeSDigJMgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgcmVsaWVzIG9uIGJvdGggYElORVRgIGFuZCBgTkVURklMVEVSYCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gYmUgZW5hYmxlZC4gSSBzZWUgYElQX1NFVGAsIG5hdHVyYWxseSwgYnV0IGFsc28gYSBzdHJpbmcgb2YgaGFzaC1iYXNlZCBjb25maWd1cmF0aW9uczogYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBHb3QgaXQuCgpIb2xkIG9uLCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCYjMzk7cyBhIHNoYXJlZCBoZWFkZXIgZm9yIGFsbCBoYXNoIHR5cGVzLiBMb29raW5nIGNsb3NlciwgaXQgYXBwZWFycyB0aGUgbW9kaWZpY2F0aW9uIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBjb2RlIHBhdGhzLiBBaCwgcmlnaHQuIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB3aGljaCB0eXBlcyBhY3R1YWxseSBkZWZpbmUgdGhpcy4gT2theSwgdGhvc2UgYXJlOiBgaGFzaF9uZXRgLCBgaGFzaF9uZXRwb3J0YCwgYGhhc2hfbmV0aWZhY2VgLCBgaGFzaF9uZXRuZXRgLCBgaGFzaF9pcHBvcnRuZXRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldGAuIFNvLCB0aGUgbGlzdCBvZiBjb25maWdzIEkgaWRlbnRpZmllZCBhYm92ZSBpcyBjb3JyZWN0LiBXZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYWxsIG9mIHRob3NlIHRvIHByb3Blcmx5IGFkZHJlc3MgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcy4gSSYjMzk7dmUgZ290IGEgbG9uZyBsaXN0IG9mIGZ1bmN0aW9ucyBoZXJlOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgZXRjLiBFc3NlbnRpYWxseSwgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGFkZGluZywgZGVsZXRpbmcsIHRlc3RpbmcsIGFuZCBmbHVzaGluZyBvZiB0aGUgZGlmZmVyZW50IG5ldCBhbmQgcG9ydCBoYXNoIHR5cGVzLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIHdoZW4gYW5hbHl6aW5nIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHBhdGNoLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSBhZnRlciB0aGUgbW9kaWZpY2F0aW9uLgoKTm93LCBhIHF1aWNrIHF1ZXN0aW9uIHBvcHMgdXAuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljPyBJdCB3b3VsZCBiZSBnb29kIHRvIHZlcmlmeS4gT2theSwgdGhleSBhcmUgc3RhdGljLiBIb3dldmVyLCBzaW5jZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBgbXR5cGVfdmFyaWFudGAgc3RydWN0LCB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkIGFuZCB0aGUga2VybmVsIGltYWdlIHdpbGwgYWN0dWFsbHkgaGF2ZSBzeW1ib2xzIGZvciB0aGVtLiBHb29kIHRvIG5vdGUuIEkgc3RpbGwgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRpYyBhdHRyaWJ1dGUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCB0aG91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBtdHlwZV9hZGRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJlY2FsbGluZyBQcmlvciBSZXNlYXJjaCoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIGBtdHlwZV9hZGQoYCBlYXJsaWVyLiBUaGUgZmFjdCB0aGF0IEkgaGFkIHRoYXQgcXVlcnkgaW4gbXkgc2VhcmNoIGhpc3RvcnkgbWVhbnMgc29tZXRoaW5nLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZSBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB3aHkgd2FzIEkgbG9va2luZyBhdCBpdD8gV2hhdCB3YXMgdGhlIHJlbGV2YW50IHByb2JsZW0gc3BhY2UgdGhlbiwgYW5kIGlzIGl0IGNvbm5lY3RlZCB0byB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIGN1cnJlbnRseT8gSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgbG9vayBhdCBteSBzZWFyY2ggaGlzdG9yeSBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2RlIHNuaXBwZXRzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgaWYgdGhhdCBlYXJsaWVyIGludmVzdGlnYXRpb24gcHJvdmlkZXMgYSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQgb3IgY2x1ZS4gVGhlIG1lbnRhbCBtb2RlbCBzaG91bGQgYWxyZWFkeSBiZSBwcmltZWQsIHNvIGl0JiMzOTtzIGEgbWF0dGVyIG9mIHJldHJpZXZpbmcgYW5kIHJlLWV2YWx1YXRpbmcgdGhlIHJlbGV2YW5jZSBub3cuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIGl0IHdpbGwgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2FkZFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA0LVx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1Olx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjk4ODptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTg5LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA0NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3ltYm9sIFZhbGlkaXR5IGFuZCBJbmxpbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXR5cGVfYWRkYCBmdW5jdGlvbi4uLiByaWdodCwgaXQmIzM5O3MgYSBtYWNybyBleHBhbmRpbmcgdG8gc29tZXRoaW5nIGxpa2UgYGhhc2hfbmV0NF9hZGRgLiBBbmQgc2luY2UgdGhlc2UgYGhhc2hfbmV0NF9hZGRgIHZhcmlhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGBtdHlwZV92YXJpYW50LmFkdFtJUFNFVF9BRERdYCwgdGhlIGNvbXBpbGVyICpoYXMqIHRvIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBmb3IgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGFkZHJlc3MtdGFrZW4uIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgdmFsaWQgc3ltYm9scyBmb3IgbWUgdG8gZm9jdXMgb24uIEV4Y2VsbGVudC4KCk5vdywgd2hhdCBhYm91dCBgbXR5cGVfYWRkX2NpZHJgPyBBaCwgdGhhdCYjMzk7cyBqdXN0IGEgc2hvcnRoYW5kIGZvciBgaGFzaF9uZXQ0X2FkZF9jaWRyYC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgICh3aGljaCB3ZSBrbm93IGlzIGBoYXNoX25ldDRfYWRkYCkgYW5kIGBtdHlwZV9yZXNpemVgLiBJcyAqaXQqIGFkZHJlc3MtdGFrZW4/IE5vcGUuIE9rYXksIHNvIGlubGluaW5nIGlzIHRoZSBjb25jZXJuIGhlcmUuIEl0JiMzOTtzIGBzdGF0aWNgLCBzbyBpdCAqY291bGQqIGJlIGlubGluZWQuIEl0JiMzOTtzIGEgZGVjZW50bHkgc2l6ZWQgZnVuY3Rpb24gdGhvdWdoLCBzbyBwZXJoYXBzIG5vdC4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgZGVmaW5pdGVseSAqaXNuJiMzOTt0KiBpbmxpbmVkIGJlY2F1c2UgaXQmIzM5O3MgYWRkcmVzcy10YWtlbi4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IG1lYW5zIGZvY3VzaW5nIG9uIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YCBpcyB0aGUgc2FmZXIgYmV0IHRvIGVuc3VyZSBzdGFiaWxpdHkuCgpIYW5nIG9uLi4uIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZWxzZS4gYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGNhbGxlZCBieSBgbXR5cGVfdGVzdGAuIEFuZCBgbXR5cGVfdGVzdGAgaXMsIGluIGZhY3QsIGBoYXNoX25ldDRfdGVzdGAuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbXR5cGVfdGVzdGAgZm9yIGEgbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV90ZXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzODc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzg4Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTM4OS1cdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODcwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFzaCBUYWJsZSBNb2R1bGUmIzM5O3MgVGVzdCBhbmQgRmx1c2ggRnVuY3Rpb25zKioKCk9rYXksIHNvIGBtdHlwZV90ZXN0YCAqaXMqIGFjdHVhbGx5IGBoYXNoX25ldDRfdGVzdGAuIEdvb2QsIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlIHRoZXJlLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUuCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGxpc3QgdGhlbSBvdXQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZToKKiAgIEFsbCB0aGUgYGhhc2hfbmV0NGAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0NmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0cG9ydDRgIHZhcmlhbnRzCiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnQ2YCB2YXJpYW50cwoqICAgQWxsIHRoZSBgaGFzaF9uZXRpZmFjZTRgIHZhcmlhbnRzCiogICBBbGwgdGhlIGBoYXNoX25ldGlmYWNlNmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0bmV0NGAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0bmV0NmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfaXBwb3J0bmV0NGAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfaXBwb3J0bmV0NmAgdmFyaWFudHMKKiAgIEFsbCB0aGUgYGhhc2hfbmV0cG9ydG5ldDRgIHZhcmlhbnRzCiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnRuZXQ2YCB2YXJpYW50cwoKVGhpcyBsb29rcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIHNldCBvZiBoYXNoIHRhYmxlIG9wZXJhdGlvbnM6IGFkZCwgZGVsZXRlLCB0ZXN0LCBhbmQgZmx1c2guIFRoZSB2YXJpYXRpb25zIHNlZW0gdG8gaW5kaWNhdGUgZGlmZmVyZW50IGtleSB0eXBlczogYG5ldDRgLCBgbmV0NmAsIGBwb3J0YCwgYGlmYWNlYCwgYG5ldG5ldGAsIGFuZCBgaXBwb3J0bmV0YCwgcHJvYmFibHkgcmVsYXRpbmcgdG8gSVB2NCwgSVB2NiwgcG9ydCBudW1iZXJzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBjb21iaW5hdGlvbnMgb2YgdGhlc2UuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuCgpXYWl0IGEgc2Vjb25kLi4uICphbHNvKiBgbXR5cGVfZmx1c2hgIGlzIGEgbWFjcm8/IEludGVyZXN0aW5nLiBUaGF0IG1heSBhZmZlY3QgaG93IHRoaXMgd29ya3MsIGF0IGxlYXN0IHRoZSBtYWNybyBleHBhbnNpb24gb2YgdGhlIGNvZGUuIFRoaXMgbWVhbnMgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IG1hY3JvIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW5kaXZpZHVhbCBgZmx1c2hgIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUuIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGV4YW1pbmF0aW9uIG9mIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtdHlwZV9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjcxLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVx0SVBTRVRfVE9LRU4oTVRZUEUsIF9haGFzaF9tZW1zaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNzI6I2RlZmluZSBtdHlwZV9mbHVzaFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzMtI2RlZmluZSBtdHlwZV9kZXN0cm95XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVzdHJveSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwNDAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgSVAgU2V0IEhhc2ggTmV0IE1vZHVsZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdXp6aW5nIHRoZSBgaGFzaF9uZXQ0X2ZsdXNoYCBmdW5jdGlvbiBhbmQgc2ltaWxhciByb3V0aW5lcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3Npbmcgb3RoZXIgY3J1Y2lhbCBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBzZWUgaWYgYGhhc2hfbmV0NF91YWR0YCBhbmQgYGhhc2hfbmV0NF9rYWR0YCBhcmUgYWxzbyBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIE1ha2VzIHNlbnNlIOKAkyB0aG9zZSBhcmUgdGhlIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSBlbnRyeSBwb2ludHMsIHJlc3BlY3RpdmVseS4gSG1tLCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBtdHlwZV91YWR0YCBhbmQgYG10eXBlX2thZHRgIHJlZmVyZW5jZXMsIHNpbmNlIHRoZXkgYXJlbiYjMzk7dCBkaXJlY3RseSBkZWZpbmVkIGFzIG1hY3JvcyBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBBaGEhIFdhaXQgYSBzZWNvbmQuLi4gSSBzZWUgaXQgbm93LiBgbXR5cGVfdWFkdGAgKmlzKiBhY3R1YWxseSBgaGFzaF9uZXQ0X3VhZHRgIHVuZGVyIHRoZSBob29kLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQgbWUgc3dpdGNoIGdlYXJzIGFuZCBjb25zdWx0IGBpcF9zZXRfaGFzaF9uZXQuY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0X3VhZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTM1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTM3LVx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU1NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiB0aGUgaXBfc2V0X2hhc2ggQ29kZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBoYXNoX25ldDRfdWFkdGAgaXMgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9uZXQuY2AuIEJ1dCB0aGlzIHBhdGNoIHRvdWNoZXMgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYW5kIGBtdHlwZV90ZXN0X2NpZHJzYCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgYnkgdGhlIGNvcmUgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RgIG9wZXJhdGlvbnMuIFRoZXJlZm9yZSwgdGhlIG1vc3QgZWZmaWNpZW50IHBhdGggdG8gY29uZmlybSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBpbnZvbHZlcyBkaXJlY3RseSBleGFtaW5pbmcgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfZmx1c2hgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YC4KCkxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgaXMgYWN0dWFsbHkgY2FsbGluZyBgaGFzaF9uZXQ0X2FkZF9jaWRyYC4gTG9va2luZyBhdCBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBJIHNlZToKCmBgYGMKc3RhdGljIGludAptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKCSAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncykKewouLi4KI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwoJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspCgkJbXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaSksIGkpOwojZW5kaWYKLi4uCn0KYGBgCgpZZXMsIGl0IGRvZXMuIEV4Y2VsbGVudC4KCk5vdywgaG9sZCBvbi4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYCBieSByZW1vdmluZyBgI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVDBgLiBUaW1lIHRvIGNoZWNrIHdoYXQgYElQX1NFVF9IQVNIX1dJVEhfTkVUMGAgd2FzIGRvaW5nLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB0byBleGFtaW5lIGFzIHBhcnQgb2YgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9IQVNIX1dJVEhfTkVUMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MzYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHNvIHRoZSBvcmlnaW5hbCBjb2RlIGVsZW1lbnQgaXMgZ29uZSwgdGhhbmtzIHRvIHRoZSByZWNlbnQgcGF0Y2guIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCB3aGljaCBJJiMzOTtkIGNvbmZpcm1lZCB3aGVuIHJldmlld2luZyB0aGUgcGF0Y2ggaW5pdGlhbGx5LiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gQmVmb3JlIEkgbW92ZSBvbiB3aXRoIG15IG93biB3b3JrLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgKmNvbXBsZXRlbHkqIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBpdCYjMzk7cyBzb21laG93IGxpbmdlcmVkIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEl0IHdvdWxkbiYjMzk7dCBiZSB0aGUgZmlyc3QgdGltZSBJJiMzOTt2ZSBlbmNvdW50ZXJlZCBhIHNlZW1pbmdseSBjbGVhbiByZW1vdmFsIHRoYXQgbGVmdCBjcnVmdCBiZWhpbmQsIG9yIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiByZWZhY3RvcmVkIGFuZCBtb3ZlZC4gQSBxdWljayBpbnNwZWN0aW9uIG9mIHRoYXQgaGVhZGVyIGZpbGUgaXMgd2FycmFudGVkLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNyaXRpY2FsIG5ldHdvcmtpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9TRVRfSEFTSF9XSVRIX05FVDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MDMKCQkJCQkJCW91dHB1dDogNzA2CgkJCQkJCQl0aG91Z2h0czogMTcxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENvbmZpZ3VyYXRpb24gYW5kIEFuYWx5c2lzIGZvciBpcF9zZXQgQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSBhIGNydWNpYWwgY2hhbmdlIHdhcyBtYWRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBiZWluZyBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBhIG1hY3JvLCBgSVBfU0VUX0hBU0hfV0lUSF9ORVQwYCwgd2FzIHJlbW92ZWQgZnJvbSBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AgYW5kIGBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNgLiAgVGhhdCBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIHJlZmFjdG9yaW5nIG9yIHBlcmhhcHMgcmVtb3ZhbCBvZiBhbiBvYnNvbGV0ZSBmZWF0dXJlLgoKVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHNlcWNvdW50X3NwaW5sb2NrX3Qgc2VxYCB0byBgc3RydWN0IG5ldF9wcmVmaXhlc2AuICBUaGlzLCBjb3VwbGVkIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIHRoZSBgc2VxY291bnRgIG1lY2hhbmlzbSwgc3Ryb25nbHkgc3VnZ2VzdHMgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHRhcmdldGluZyBsb2NrbGVzcyByZWFkZXJzLiBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBleGVyY2lzaW5nIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBidWlsZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoZW0gZW5hYmxlZC4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczoKCiogICBgSVBfU0VUYAoqICAgYElQX1NFVF9IQVNIX05FVGAKKiAgIGBJUF9TRVRfSEFTSF9ORVRQT1JUYAoqICAgYElQX1NFVF9IQVNIX05FVElGQUNFYAoqICAgYElQX1NFVF9IQVNIX05FVE5FVGAKKiAgIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgCiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAKClRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgSVBfU0VUYCBzZWVtIHRvIGJlIHRoZSBzdGFuZGFyZCBgSU5FVGAgYW5kIGBORVRGSUxURVJgIHNldHRpbmdzLCBzbyBubyBpc3N1ZXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byBmdXp6OgoKQmFzZWQgb24gdGhlIGNvZGUsIHRoZSBrZXkgZnVuY3Rpb24gcGFpcnMgZm9yIGZ1enppbmcgYXJlOgoqICAgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfZmx1c2hgCiogICBgaGFzaF9uZXQ2X2FkZGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfbmV0Nl90ZXN0YCwgYGhhc2hfbmV0Nl9mbHVzaGAKKiAgIGBoYXNoX25ldHBvcnQ0X2FkZGAsIGBoYXNoX25ldHBvcnQ0X2RlbGAsIGBoYXNoX25ldHBvcnQ0X3Rlc3RgLCBgaGFzaF9uZXRwb3J0NF9mbHVzaGAKKiAgIGBoYXNoX25ldHBvcnQ2X2FkZGAsIGBoYXNoX25ldHBvcnQ2X2RlbGAsIGBoYXNoX25ldHBvcnQ2X3Rlc3RgLCBgaGFzaF9uZXRwb3J0Nl9mbHVzaGAKKiAgIGBoYXNoX25ldGlmYWNlNF9hZGRgLCBgaGFzaF9uZXRpZmFjZTRfZGVsYCwgYGhhc2hfbmV0aWZhY2U0X3Rlc3RgLCBgaGFzaF9uZXRpZmFjZTRfZmx1c2hgCiogICBgaGFzaF9uZXRpZmFjZTZfYWRkYCwgYGhhc2hfbmV0aWZhY2U2X2RlbGAsIGBoYXNoX25ldGlmYWNlNl90ZXN0YCwgYGhhc2hfbmV0aWZhY2U2X2ZsdXNoYAoqICAgYGhhc2hfbmV0bmV0NF9hZGRgLCBgaGFzaF9uZXRuZXQ0X2RlbGAsIGBoYXNoX25ldG5ldDRfdGVzdGAsIGBoYXNoX25ldG5ldDRfZmx1c2hgCiogICBgaGFzaF9uZXRuZXQ2X2FkZGAsIGBoYXNoX25ldG5ldDZfZGVsYCwgYGhhc2hfbmV0bmV0Nl90ZXN0YCwgYGhhc2hfbmV0bmV0Nl9mbHVzaGAKKiAgIGBoYXNoX2lwcG9ydG5ldDRfYWRkYCwgYGhhc2hfaXBwb3J0bmV0NF9kZWxgLCBgaGFzaF9pcHBvcnRuZXQ0X3Rlc3RgLCBgaGFzaF9pcHBvcnRuZXQ0X2ZsdXNoYAoqICAgYGhhc2hfaXBwb3J0bmV0Nl9hZGRgLCBgaGFzaF9pcHBvcnRuZXQ2X2RlbGAsIGBoYXNoX2lwcG9ydG5ldDZfdGVzdGAsIGBoYXNoX2lwcG9ydG5ldDZfZmx1c2hgCiogICBgaGFzaF9uZXRwb3J0bmV0NF9hZGRgLCBgaGFzaF9uZXRwb3J0bmV0NF9kZWxgLCBgaGFzaF9uZXRwb3J0bmV0NF90ZXN0YCwgYGhhc2hfbmV0cG9ydG5ldDRfZmx1c2hgCiogICBgaGFzaF9uZXRwb3J0bmV0Nl9hZGRgLCBgaGFzaF9uZXRwb3J0bmV0Nl9kZWxgLCBgaGFzaF9uZXRwb3J0bmV0Nl90ZXN0YCwgYGhhc2hfbmV0cG9ydG5ldDZfZmx1c2hgCgpJIHdpbGwgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgbWFuaXB1bGF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCwgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBgc2VxY291bnRgLiBUaGUgdW5kZXJseWluZyB1c2Ugb2YgQ0lEUnMgZm9yIG5ldHdvcmsgcHJlZml4ZXMgYWxzbyB3YXJyYW50cyBzcGVjaWFsIGF0dGVudGlvbi4gU28gdGhpcyBpcyB3aGF0IEkmIzM5O20gZ29pbmcgdG8gc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0bmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBpcHNldCBoYXNoIHR5cGVzIHRoYXQgdXNlIG5ldHdvcmsgcHJlZml4ZXMgKENJRFIpIGJ5IGludHJvZHVjaW5nIGEgc2VxY291bnQgdG8gZ3VhcmQgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiB0aGUgcHJlZml4ZXMgYXJyYXkuIFRoaXMgYWZmZWN0cyB0aGUgYWRkLCBkZWwsIHRlc3QsIGFuZCBmbHVzaCBvcGVyYXRpb25zIGZvciBzZXZlcmFsIGhhc2ggdHlwZXMgKG5ldCwgbmV0cG9ydCwgbmV0aWZhY2UsIG5ldG5ldCwgaXBwb3J0bmV0LCBuZXRwb3J0bmV0KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmV0ZmlsdGVyIGlwc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tsZXNzIHJlYWRlciBsb2dpYyBhbmQgYXJyYXkgc2hpZnRpbmcgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfSVBQT1JUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYXNoX25ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRwb3J0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0aWZhY2U2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRpZmFjZTZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldGlmYWNlNl9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDZfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwcG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfaXBwb3J0bmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X3Rlc3QmIzM0OywKICAgICYjMzQ7aGFzaF9pcHBvcnRuZXQ2X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydG5ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaGFzaCB0eXBlcyB0aGF0IHVzZSBuZXR3b3JrIHByZWZpeGVzIChDSURSKSBieSBpbnRyb2R1Y2luZyBhIHNlcWNvdW50IHRvIGd1YXJkIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgdGhlIHByZWZpeGVzIGFycmF5LiBUaGlzIGFmZmVjdHMgdGhlIGFkZCwgZGVsLCB0ZXN0LCBhbmQgZmx1c2ggb3BlcmF0aW9ucyBmb3Igc2V2ZXJhbCBoYXNoIHR5cGVzIChuZXQsIG5ldHBvcnQsIG5ldGlmYWNlLCBuZXRuZXQsIGlwcG9ydG5ldCwgbmV0cG9ydG5ldCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5ldGZpbHRlciBpcHNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyByZWFkZXIgbG9naWMgYW5kIGFycmF5IHNoaWZ0aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MTguMjIwMzU2OTc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTExNzExNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfZGVsXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfYWRkXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9kZWxcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGlwc2V0IGhhc2ggdHlwZXMgdGhhdCB1c2UgbmV0d29yayBwcmVmaXhlcyAoQ0lEUikgYnkgaW50cm9kdWNpbmcgYSBzZXFjb3VudCB0byBndWFyZCBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIHRoZSBwcmVmaXhlcyBhcnJheS4gVGhpcyBhZmZlY3RzIHRoZSBhZGQsIGRlbCwgdGVzdCwgYW5kIGZsdXNoIG9wZXJhdGlvbnMgZm9yIHNldmVyYWwgaGFzaCB0eXBlcyAobmV0LCBuZXRwb3J0LCBuZXRpZmFjZSwgbmV0bmV0LCBpcHBvcnRuZXQsIG5ldHBvcnRuZXQpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZXRmaWx0ZXIgaXBzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3MgcmVhZGVyIGxvZ2ljIGFuZCBhcnJheSBzaGlmdGluZyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MTguMjIwMzg0NDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg3ODAzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMTIwNjc4OWViM2QxYjU4NjcwMjk1NDAyMTk3ZjczMDdkYjY2YjYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMDA6NDk6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5pbmRleCBmMDBjODJhY2Q3ZjA1Li5lYTcyYjk3OTRmODgwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcWxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxcdTAwM2VcXG4gXFxuQEAgLTk4LDE0ICs5OSwzNCBAQCBzdHJ1Y3QgaHRhYmxlIHtcXG4gI2RlZmluZSBJUFNFVF9ORVRfQ09VTlRcXHRcXHQxXFxuICNlbmRpZlxcbiBcXG4tLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXFxuKy8qKlxcbisgKiBzdHJ1Y3QgbmV0X3ByZWZpeCAtIFJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBwcmVmaXguXFxuKyAqIEBjaWRyOiBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoLlxcbisgKiBAY291bnQ6IE51bWJlciBvZiBvY2N1cnJlbmNlcy5cXG4rICovXFxuIHN0cnVjdCBuZXRfcHJlZml4IHtcXG4tXFx0dTggY2lkcjtcXHRcXHRcXHQvKiB0aGUgY2lkciB2YWx1ZSAqL1xcbi1cXHR1MzIgY291bnQ7XFx0XFx0XFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqL1xcbitcXHR1MzIgY2lkcjo4O1xcbitcXHR1MzIgY291bnQ6MjQ7XFxuIH07XFxuIFxcbisjZGVmaW5lIENJRFJfTUFYX0NPVU5UICgoMSBcXHUwMDNjXFx1MDAzYyAyNCkgLSAxKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBuZXRfcHJlZml4ZXMgLSBBIGNvbGxlY3Rpb24gb2YgbmV0d29yayBwcmVmaXhlcy5cXG4rICogQHJjdTogUkNVIGhlYWRcXG4rICogQHNlcTogU2VxdWVuY2UgY291bnRlciBndWFyZGluZyBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIEBuZXRzXFxuKyAqIEBsZW46IE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheS5cXG4rICogQG5ldHM6IEFycmF5IG9mIG5ldF9wcmVmaXggc3RydWN0dXJlcyAoc29ydGVkIGJ5IENJRFIgZGVzY2VuZGluZykuXFxuKyAqXFxuKyAqIEBuZXRzIGVudHJpZXMgYXJlIHVwZGF0ZWQgaW4gcGxhY2UgdW5kZXIgQHNldCdzIGxvY2suIEEgc2luZ2xlIGVudHJ5J3NcXG4rICogY2lkci9jb3VudCBwYWlyIGlzIGFsd2F5cyB1cGRhdGVkIGF0b21pY2FsbHkgdmlhIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSxcXG4rICogYnV0IHJlbW92aW5nIGFuIGVudHJ5IGFsc28gc2hpZnRzIGV2ZXJ5IGZvbGxvd2luZyBlbnRyeSBkb3duIGJ5IG9uZSBzbG90LlxcbisgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlXFxuKyAqIGluZGV4ZWQgc2xvdCkgbXVzdCB1c2UgQHNlcSB0byBkZXRlY3QgYW5kIHJldHJ5IGFjcm9zcyBzdWNoIGEgc2hpZnQuXFxuKyAqL1xcbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0c2VxY291bnRfc3BpbmxvY2tfdCBzZXE7XFxuIFxcdHU4IGxlbjtcXG4gXFx0c3RydWN0IG5ldF9wcmVmaXggbmV0c1tdIF9fY291bnRlZF9ieShsZW4pO1xcbiB9O1xcbkBAIC0xNDMsOCArMTY0LDExIEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxcbiAjZW5kaWZcXG4gXFxuICNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykgKHtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTtcXHRcXHRcXFxcXFxuLVxcdERDSURSX1BVVCgoX19uKS1cXHUwMDNlbGVuID8gKF9fbiktXFx1MDAzZW5ldHNbMF0uY2lkciA6IGhvc3RfbWFzayk7XFxcXFxcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7XFx0XFxcXFxcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBfX3AgPVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19uLVxcdTAwM2VsZW4gPyBSRUFEX09OQ0UoX19uLVxcdTAwM2VuZXRzWzBdKVxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0IDogKHN0cnVjdCBuZXRfcHJlZml4KXt9O1xcdFxcdFxcXFxcXG4rXFx0RENJRFJfUFVUKF9fcC5jb3VudCA/IF9fcC5jaWRyIDogaG9zdF9tYXNrKTtcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXFxuQEAgLTMxOCwyNyArMzQyLDQzIEBAIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xcbiB9O1xcbiBcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50XFxuLSAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciArIDEgdG8gc3VwcG9ydCAvMC5cXG4rLyoqXFxuKyAqIG10eXBlX2FkZF9jaWRyIC0gQWRkIGEgQ0lEUiBlbnRyeSB0byBoYXNoIHRhYmxlIGJvb2trZWVwaW5nXFxuKyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbisgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGVcXG4rICogQGNpZHI6IFRoZSBDSURSIHByZWZpeCBsZW5ndGhcXG4rICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byBhZGQgQGNpZHIgdG9cXG4rICpcXG4rICogUGVyZm9ybXMgYW4gdXBkYXRlIGlmIEBjaWRyIGlzIGZvdW5kLCBvdGhlcndpc2UgcGVyZm9ybXMgQ09XLXN0eWxlXFxuKyAqIGFsbG9jYXRpb24gYW5kIHJlcGxhY2VtZW50IHZpYSBSQ1UuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XFxuIFxcdGludCBpLCBqLCBmb3VuZCwgbGVuID0gMCwgcmV0ID0gMDtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXggbnA7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIFxcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXFx1MDAzZXJuZXRzW25dKTtcXG4gXFx0LyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqL1xcbiBcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4tXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdG5wID0gUkVBRF9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbaV0pO1xcbitcXHRcXHRpZiAobnAuY291bnQpXFxuIFxcdFxcdFxcdGxlbisrO1xcbiBcXHRcXHRpZiAoZm91bmQgIT0gLTEpIHtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyIFxcdTAwM2MgY2lkcikge1xcbitcXHRcXHR9IGVsc2UgaWYgKG5wLmNpZHIgXFx1MDAzYyBjaWRyKSB7XFxuIFxcdFxcdFxcdGZvdW5kID0gaTtcXG4tXFx0XFx0fSBlbHNlIGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xcbi1cXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50Kys7XFxuK1xcdFxcdH0gZWxzZSBpZiAobnAuY2lkciA9PSBjaWRyKSB7XFxuK1xcdFxcdFxcdGlmIChucC5jb3VudCBcXHUwMDNjIENJRFJfTUFYX0NPVU5UKSB7XFxuK1xcdFxcdFxcdFxcdG5wLmNvdW50Kys7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UobmV0cy1cXHUwMDNlbmV0c1tpXSwgbnApO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRU9WRVJGTE9XO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMzUwLDYgKzM5MCw3IEBAIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiBcXHR9XFxuIFxcbiBcXHR0bXAtXFx1MDAzZWxlbiA9IGxlbjtcXG4rXFx0c2VxY291bnRfc3BpbmxvY2tfaW5pdChcXHUwMDI2dG1wLVxcdTAwM2VzZXEsIFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKSB7XFxuIFxcdFxcdGlmIChpID09IGZvdW5kKSB7XFxuIFxcdFxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcXG5AQCAtMzcxLDQyICs0MTIsNjAgQEAgbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBtdHlwZV9kZWxfY2lkciAtIFJlbW92ZSBDSURSIGVudHJ5IGFuZCBtYWludGFpbiBhcnJheSBpbnRlZ3JpdHkuXFxuKyAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldC5cXG4rICogQGg6IFBvaW50ZXIgdG8gdGhlIGh0eXBlLlxcbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aC5cXG4rICogQG46IFRoZSBpbmRleCBvZiB0aGUgbmV0X3ByZWZpeCBhcnJheSB0byByZW1vdmUgQGNpZHIgZnJvbVxcbisgKlxcbisgKiBJZiBDSURSIGVudHJ5IGNvdW50IGZhbGxzIHRvIDAsIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBcXFwic2hpZnQtbGVmdFxcXCJcXG4rICogb3BlcmF0aW9uIG9uIGFsbCBmb2xsb3dpbmcgZWxlbWVudHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSByZW1haW5zXFxuKyAqIGNvbnRpZ3VvdXMgYW5kIG1haW50YWlucyBpdHMgZGVzY2VuZGluZyBvcmRlciBieSBDSURSLiBUaGUgdmFjYXRlZCBzbG90XFxuKyAqIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5IGlzIHplcm9lZCBvdXQgKGNpZHI9MCwgY291bnQ9MCkuXFxuKyAqL1xcbiBzdGF0aWMgdm9pZFxcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbi1cXHR1OCBpLCBqLCBsZW4gPSAwO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBucDtcXG4gXFx0aW50IGZvdW5kO1xcbitcXHR1OCBpLCBqO1xcbitcXG4rXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCkgIT0gc2l6ZW9mKHUzMikpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVxcdTAwM2VybmV0c1tuXSk7XFxuIFxcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGkrKykge1xcbi1cXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudClcXG4tXFx0XFx0XFx0bGVuKys7XFxuLVxcdFxcdGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcilcXG4rXFx0XFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cXHUwMDNlbmV0c1tpXSk7XFxuK1xcdFxcdGlmIChucC5jb3VudCBcXHUwMDI2XFx1MDAyNiBucC5jaWRyID09IGNpZHIpIHtcXG4rXFx0XFx0XFx0bnAuY291bnQtLTtcXG4gXFx0XFx0XFx0Zm91bmQgPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdGlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXG4tXFx0bmV0cy1cXHUwMDNlbmV0c1tmb3VuZF0uY291bnQtLTtcXG4tXFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLmNvdW50KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4tXFx0bGVuLS07XFxuLVxcdHRtcCA9IGt6YWxsb2NfZmxleCgqdG1wLCBuZXRzLCBsZW4sIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAoIXRtcClcXG4tXFx0XFx0LyogTGVhdmUgYSBob2xlICovXFxuK1xcdGlmIChucC5jb3VudCkge1xcbitcXHRcXHRXUklURV9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLCBucCk7XFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuIFxcbi1cXHR0bXAtXFx1MDAzZWxlbiA9IGxlbjtcXG4rXFx0d3JpdGVfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSk7XFxuIFxcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4tXFx0XFx0aWYgKCFuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50IHx8IGkgPT0gZm91bmQpXFxuK1xcdFxcdGlmIChpID09IGZvdW5kKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHI7XFxuLVxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudDtcXG4rXFxuK1xcdFxcdG5wID0gUkVBRF9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbaV0pO1xcbitcXHRcXHRpZiAoaSAhPSBqKVxcbitcXHRcXHRcXHRXUklURV9PTkNFKG5ldHMtXFx1MDAzZW5ldHNbal0sIG5wKTtcXG4rXFx0XFx0aisrO1xcbiBcXHR9XFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVxcdTAwM2VybmV0c1tuXSwgdG1wKTtcXG4tXFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XFxuK1xcbitcXHR3aGlsZSAoaiBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbilcXG4rXFx0XFx0V1JJVEVfT05DRShuZXRzLVxcdTAwM2VuZXRzW2orK10sIChzdHJ1Y3QgbmV0X3ByZWZpeCl7fSk7XFxuK1xcdHdyaXRlX3NlcWNvdW50X2VuZChcXHUwMDI2bmV0cy1cXHUwMDNlc2VxKTtcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4gfVxcbkBAIC00NTEsNyArNTEwLDcgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi1cXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xcbiAjZW5kaWZcXG4gXFx0c3RydWN0IGh0YWJsZSAqdDtcXG4gXFx0c3RydWN0IGhidWNrZXQgKm47XFxuQEAgLTQ3NywxNyArNTM2LDE1IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4gXFx0fVxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbi1cXHRcXHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVxcdTAwM2VybmV0c1tpXSk7XFxuLVxcdFxcdHRtcCA9IGt6YWxsb2Nfb2JqKCp0bXAsIEdGUF9BVE9NSUMpO1xcbi1cXHRcXHRpZiAoIXRtcCkge1xcbi1cXHRcXHRcXHR1OCBqO1xcbitcXHRcXHR1OCBqO1xcbiBcXG4tXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaisrKVxcbi1cXHRcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2pdLmNvdW50ID0gMDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW2ldLCB0bXApO1xcbi1cXHRcXHRcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4tXFx0XFx0fVxcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXFx1MDAzZXJuZXRzW2ldKTtcXG4rXFx0XFx0d3JpdGVfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGorKylcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShuZXRzLVxcdTAwM2VuZXRzW2pdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xcbitcXHRcXHR3cml0ZV9zZXFjb3VudF9lbmQoXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHR9XFxuICNlbmRpZlxcbiB9XFxuQEAgLTEyNTMsMzEgKzEzMTAsNDEgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcTE7XFxuIFxcdGludCByZXQsIGksIGosIGs7XFxuICNlbHNlXFxuIFxcdGludCByZXQsIGksIGo7XFxuICNlbmRpZlxcbi1cXHR1MzIga2V5LCBtdWx0aSA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBzZXEwO1xcbitcXHR1MzIga2V5LCBtdWx0aTtcXG4gXFx0dTggcG9zO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcInRlc3QgYnkgbmV0c1xcXFxuXFxcIik7XFxuIFxcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rcmV0cnk6XFxuK1xcdG11bHRpID0gMDtcXG4gXFx0bmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNlcm5ldHNbMF0pO1xcbitcXHRzZXEwID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bmV0czAtXFx1MDAzZXNlcSk7XFxuICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxcbiBcXHRuZXRzMSA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVxcdTAwM2VybmV0c1sxXSk7XFxuK1xcdHNlcTEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZXRzMS1cXHUwMDNlc2VxKTtcXG4gI2VuZGlmXFxuIFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzMC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaisrKSB7XFxuLVxcdFxcdGlmICghbmV0czAtXFx1MDAzZW5ldHNbal0uY291bnQpXFxuK1xcdFxcdHN0cnVjdCBuZXRfcHJlZml4IHAwID0gUkVBRF9PTkNFKG5ldHMwLVxcdTAwM2VuZXRzW2pdKTtcXG4rXFxuK1xcdFxcdGlmICghcDAuY291bnQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0XFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFxcdTAwMjZvcmlnKTtcXG4tXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVxcdTAwM2VuZXRzW2pdLmNpZHIsIGZhbHNlKTtcXG4rXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAwLmNpZHIsIGZhbHNlKTtcXG4gXFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIG5ldHMxLVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjYgIW11bHRpOyBrKyspIHtcXG4tXFx0XFx0XFx0aWYgKCFuZXRzMS1cXHUwMDNlbmV0c1trXS5jb3VudClcXG4rXFx0XFx0XFx0c3RydWN0IG5ldF9wcmVmaXggcDEgPSBSRUFEX09OQ0UobmV0czEtXFx1MDAzZW5ldHNba10pO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFwMS5jb3VudClcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cXHUwMDNlbmV0c1trXS5jaWRyLCB0cnVlKTtcXG4rXFx0XFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAxLmNpZHIsIHRydWUpO1xcbiAjZWxzZVxcbi1cXHRcXHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXFx1MDAzZW5ldHNbal0uY2lkcik7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBwMC5jaWRyKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGtleSA9IEhLRVkoZCwgaC1cXHUwMDNlaW5pdHZhbCwgdC1cXHUwMDNlaHRhYmxlX2JpdHMpO1xcbiBcXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XFxuQEAgLTEzMDIsNiArMTM2OSwxMyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXFxuIFxcdFxcdH1cXG4gI2VuZGlmXFxuIFxcdH1cXG4rXFxuK1xcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXRzMC1cXHUwMDNlc2VxLCBzZXEwKSlcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXFxuK1xcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXRzMS1cXHUwMDNlc2VxLCBzZXExKSlcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rI2VuZGlmXFxuIFxcdHJldCA9IDA7XFxuIHVubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuQEAgLTE3MDcsNiArMTc4MSw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4gXFx0XFx0XFx0XFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVxcdTAwM2VybmV0c1stLWldKSk7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9ocmVnaW9uO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNlcWNvdW50X3NwaW5sb2NrX2luaXQoXFx1MDAyNm5ldHMtXFx1MDAzZXNlcSwgXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaC1cXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xcbiBcXHR9XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcXG5pbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbkBAIC0zOCw3ICszOCw2IEBAIE1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LGlmYWNlXFxcIik7XFxuICNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldGlmYWNlXFxuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxcbiBcXG4gI2RlZmluZSBTVFJTQ1BZKGEsIGIpXFx0c3Ryc2NweShhLCBiLCBJRk5BTVNJWilcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcXG5pbmRleCA2MjkxNTMyYmU3YTVhLi42MWFmMWNlMjcxMjc5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcXG5AQCAtMzYsNyArMzYsNiBAQCBNT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxwb3J0LG5ldFxcXCIpO1xcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cXG4gI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4gI2RlZmluZSBJUFNFVF9ORVRfQ09VTlQgMlxcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxcbiBcXG4gLyogSVB2NCB2YXJpYW50ICovXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OToxOC42MzAwMjA5MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDgxMDIwMzcwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfbmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfYWRkXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9kZWxcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9hZGRcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0bmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0bmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0bmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0bmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldG5ldDZfZmx1c2hcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF9hZGRcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl9kZWxcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaGFzaCB0eXBlcyB0aGF0IHVzZSBuZXR3b3JrIHByZWZpeGVzIChDSURSKSBieSBpbnRyb2R1Y2luZyBhIHNlcWNvdW50IHRvIGd1YXJkIGluLXBsYWNlIHJlb3JkZXJpbmcgb2YgdGhlIHByZWZpeGVzIGFycmF5LiBUaGlzIGFmZmVjdHMgdGhlIGFkZCwgZGVsLCB0ZXN0LCBhbmQgZmx1c2ggb3BlcmF0aW9ucyBmb3Igc2V2ZXJhbCBoYXNoIHR5cGVzIChuZXQsIG5ldHBvcnQsIG5ldGlmYWNlLCBuZXRuZXQsIGlwcG9ydG5ldCwgbmV0cG9ydG5ldCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG5ldGZpbHRlciBpcHNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NrbGVzcyByZWFkZXIgbG9naWMgYW5kIGFycmF5IHNoaWZ0aW5nIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMTIwNjc4OWViM2QxYjU4NjcwMjk1NDAyMTk3ZjczMDdkYjY2YjYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMDo0OToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXG5pbmRleCBmMDBjODJhY2Q3ZjA1Li5lYTcyYjk3OTRmODgwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcdTAwM2VcbiBcbkBAIC05OCwxNCArOTksMzQgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2RlZmluZSBJUFNFVF9ORVRfQ09VTlRcdFx0MVxuICNlbmRpZlxuIFxuLS8qIEJvb2sta2VlcGluZyBvZiB0aGUgcHJlZml4ZXMgYWRkZWQgdG8gdGhlIHNldCAqL1xuKy8qKlxuKyAqIHN0cnVjdCBuZXRfcHJlZml4IC0gUmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIHByZWZpeC5cbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aC5cbisgKiBAY291bnQ6IE51bWJlciBvZiBvY2N1cnJlbmNlcy5cbisgKi9cbiBzdHJ1Y3QgbmV0X3ByZWZpeCB7XG4tXHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4tXHR1MzIgY291bnQ7XHRcdFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqL1xuK1x0dTMyIGNpZHI6ODtcbitcdHUzMiBjb3VudDoyNDtcbiB9O1xuIFxuKyNkZWZpbmUgQ0lEUl9NQVhfQ09VTlQgKCgxIFx1MDAzY1x1MDAzYyAyNCkgLSAxKVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBuZXRfcHJlZml4ZXMgLSBBIGNvbGxlY3Rpb24gb2YgbmV0d29yayBwcmVmaXhlcy5cbisgKiBAcmN1OiBSQ1UgaGVhZFxuKyAqIEBzZXE6IFNlcXVlbmNlIGNvdW50ZXIgZ3VhcmRpbmcgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiBAbmV0c1xuKyAqIEBsZW46IE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheS5cbisgKiBAbmV0czogQXJyYXkgb2YgbmV0X3ByZWZpeCBzdHJ1Y3R1cmVzIChzb3J0ZWQgYnkgQ0lEUiBkZXNjZW5kaW5nKS5cbisgKlxuKyAqIEBuZXRzIGVudHJpZXMgYXJlIHVwZGF0ZWQgaW4gcGxhY2UgdW5kZXIgQHNldCdzIGxvY2suIEEgc2luZ2xlIGVudHJ5J3NcbisgKiBjaWRyL2NvdW50IHBhaXIgaXMgYWx3YXlzIHVwZGF0ZWQgYXRvbWljYWxseSB2aWEgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpLFxuKyAqIGJ1dCByZW1vdmluZyBhbiBlbnRyeSBhbHNvIHNoaWZ0cyBldmVyeSBmb2xsb3dpbmcgZW50cnkgZG93biBieSBvbmUgc2xvdC5cbisgKiBMb2NrbGVzcyByZWFkZXJzIHRoYXQgc2NhbiB0aGUgd2hvbGUgYXJyYXkgKGkuZS4gbW9yZSB0aGFuIGEgc2luZ2xlXG4rICogaW5kZXhlZCBzbG90KSBtdXN0IHVzZSBAc2VxIHRvIGRldGVjdCBhbmQgcmV0cnkgYWNyb3NzIHN1Y2ggYSBzaGlmdC5cbisgKi9cbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRzZXFjb3VudF9zcGlubG9ja190IHNlcTtcbiBcdHU4IGxlbjtcbiBcdHN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXSBfX2NvdW50ZWRfYnkobGVuKTtcbiB9O1xuQEAgLTE0Myw4ICsxNjQsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXG4gI2VuZGlmXG4gXG4gI2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoe1x0XHRcdFx0XFxcbi1cdGNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTtcdFx0XFxcbi1cdERDSURSX1BVVCgoX19uKS1cdTAwM2VsZW4gPyAoX19uKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spO1xcXG4rXHRjb25zdCBzdHJ1Y3QgbmV0X3ByZWZpeGVzICpfX24gPSByY3VfZGVyZWZlcmVuY2Uobik7XHRcXFxuK1x0c3RydWN0IG5ldF9wcmVmaXggX19wID1cdFx0XHRcdFx0XFxcbitcdFx0X19uLVx1MDAzZWxlbiA/IFJFQURfT05DRShfX24tXHUwMDNlbmV0c1swXSlcdFx0XFxcbitcdFx0XHQgOiAoc3RydWN0IG5ldF9wcmVmaXgpe307XHRcdFxcXG4rXHREQ0lEUl9QVVQoX19wLmNvdW50ID8gX19wLmNpZHIgOiBob3N0X21hc2spO1x0XHRcXFxuIH0pXG4gXG4gI2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xuQEAgLTMxOCwyNyArMzQyLDQzIEBAIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xuIH07XG4gXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLS8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcbi0gKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgKyAxIHRvIHN1cHBvcnQgLzAuXG4rLyoqXG4rICogbXR5cGVfYWRkX2NpZHIgLSBBZGQgYSBDSURSIGVudHJ5IHRvIGhhc2ggdGFibGUgYm9va2tlZXBpbmdcbisgKiBAc2V0OiBQb2ludGVyIHRvIHRoZSBpcF9zZXRcbisgKiBAaDogUG9pbnRlciB0byB0aGUgaHR5cGVcbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aFxuKyAqIEBuOiBUaGUgaW5kZXggb2YgdGhlIG5ldF9wcmVmaXggYXJyYXkgdG8gYWRkIEBjaWRyIHRvXG4rICpcbisgKiBQZXJmb3JtcyBhbiB1cGRhdGUgaWYgQGNpZHIgaXMgZm91bmQsIG90aGVyd2lzZSBwZXJmb3JtcyBDT1ctc3R5bGVcbisgKiBhbGxvY2F0aW9uIGFuZCByZXBsYWNlbWVudCB2aWEgUkNVLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4gbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbiBcdGludCBpLCBqLCBmb3VuZCwgbGVuID0gMCwgcmV0ID0gMDtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeCBucDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbi1cdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbitcdFx0aWYgKG5wLmNvdW50KVxuIFx0XHRcdGxlbisrO1xuIFx0XHRpZiAoZm91bmQgIT0gLTEpIHtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciBcdTAwM2MgY2lkcikge1xuK1x0XHR9IGVsc2UgaWYgKG5wLmNpZHIgXHUwMDNjIGNpZHIpIHtcbiBcdFx0XHRmb3VuZCA9IGk7XG4tXHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xuLVx0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCsrO1xuK1x0XHR9IGVsc2UgaWYgKG5wLmNpZHIgPT0gY2lkcikge1xuK1x0XHRcdGlmIChucC5jb3VudCBcdTAwM2MgQ0lEUl9NQVhfQ09VTlQpIHtcbitcdFx0XHRcdG5wLmNvdW50Kys7XG4rXHRcdFx0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tpXSwgbnApO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRyZXQgPSAtRU9WRVJGTE9XO1xuK1x0XHRcdH1cbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0fVxuQEAgLTM1MCw2ICszOTAsNyBAQCBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiBcdH1cbiBcbiBcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNnRtcC1cdTAwM2VzZXEsIFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSsrKSB7XG4gXHRcdGlmIChpID09IGZvdW5kKSB7XG4gXHRcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG5AQCAtMzcxLDQyICs0MTIsNjAgQEAgbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBtdHlwZV9kZWxfY2lkciAtIFJlbW92ZSBDSURSIGVudHJ5IGFuZCBtYWludGFpbiBhcnJheSBpbnRlZ3JpdHkuXG4rICogQHNldDogUG9pbnRlciB0byB0aGUgaXBfc2V0LlxuKyAqIEBoOiBQb2ludGVyIHRvIHRoZSBodHlwZS5cbisgKiBAY2lkcjogVGhlIENJRFIgcHJlZml4IGxlbmd0aC5cbisgKiBAbjogVGhlIGluZGV4IG9mIHRoZSBuZXRfcHJlZml4IGFycmF5IHRvIHJlbW92ZSBAY2lkciBmcm9tXG4rICpcbisgKiBJZiBDSURSIGVudHJ5IGNvdW50IGZhbGxzIHRvIDAsIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBcInNoaWZ0LWxlZnRcIlxuKyAqIG9wZXJhdGlvbiBvbiBhbGwgZm9sbG93aW5nIGVsZW1lbnRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXkgcmVtYWluc1xuKyAqIGNvbnRpZ3VvdXMgYW5kIG1haW50YWlucyBpdHMgZGVzY2VuZGluZyBvcmRlciBieSBDSURSLiBUaGUgdmFjYXRlZCBzbG90XG4rICogYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgaXMgemVyb2VkIG91dCAoY2lkcj0wLCBjb3VudD0wKS5cbisgKi9cbiBzdGF0aWMgdm9pZFxuIG10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4tXHR1OCBpLCBqLCBsZW4gPSAwO1xuK1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cztcbitcdHN0cnVjdCBuZXRfcHJlZml4IG5wO1xuIFx0aW50IGZvdW5kO1xuK1x0dTggaSwgajtcbitcbitcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpICE9IHNpemVvZih1MzIpKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbi1cdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbi1cdFx0XHRsZW4rKztcbi1cdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXG4rXHRcdG5wID0gUkVBRF9PTkNFKG5ldHMtXHUwMDNlbmV0c1tpXSk7XG4rXHRcdGlmIChucC5jb3VudCBcdTAwMjZcdTAwMjYgbnAuY2lkciA9PSBjaWRyKSB7XG4rXHRcdFx0bnAuY291bnQtLTtcbiBcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbiBcdGlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0bmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudC0tO1xuLVx0aWYgKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuLVx0bGVuLS07XG4tXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghdG1wKVxuLVx0XHQvKiBMZWF2ZSBhIGhvbGUgKi9cbitcdGlmIChucC5jb3VudCkge1xuK1x0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0sIG5wKTtcbiBcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXG4tXHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuK1x0d3JpdGVfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0cy1cdTAwM2VzZXEpO1xuIFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbi1cdFx0aWYgKCFuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQgfHwgaSA9PSBmb3VuZClcbitcdFx0aWYgKGkgPT0gZm91bmQpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbi1cdFx0dG1wLVx1MDAzZW5ldHNbaisrXS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbitcbitcdFx0bnAgPSBSRUFEX09OQ0UobmV0cy1cdTAwM2VuZXRzW2ldKTtcbitcdFx0aWYgKGkgIT0gailcbitcdFx0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tqXSwgbnApO1xuK1x0XHRqKys7XG4gXHR9XG4tXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbi1cdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuK1xuK1x0d2hpbGUgKGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuKVxuK1x0XHRXUklURV9PTkNFKG5ldHMtXHUwMDNlbmV0c1tqKytdLCAoc3RydWN0IG5ldF9wcmVmaXgpe30pO1xuK1x0d3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNm5ldHMtXHUwMDNlc2VxKTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gfVxuQEAgLTQ1MSw3ICs1MTAsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaHRhYmxlICp0O1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG5AQCAtNDc3LDE3ICs1MzYsMTUgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0fVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKSB7XG4tXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuLVx0XHR0bXAgPSBremFsbG9jX29iaigqdG1wLCBHRlBfQVRPTUlDKTtcbi1cdFx0aWYgKCF0bXApIHtcbi1cdFx0XHR1OCBqO1xuK1x0XHR1OCBqO1xuIFxuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBqKyspXG4tXHRcdFx0XHRuZXRzLVx1MDAzZW5ldHNbal0uY291bnQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVx1MDAzZXJuZXRzW2ldLCB0bXApO1xuLVx0XHRcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuLVx0XHR9XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4rXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuK1x0XHR3cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBqKyspXG4rXHRcdFx0V1JJVEVfT05DRShuZXRzLVx1MDAzZW5ldHNbal0sIChzdHJ1Y3QgbmV0X3ByZWZpeCl7fSk7XG4rXHRcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZuZXRzLVx1MDAzZXNlcSk7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdH1cbiAjZW5kaWZcbiB9XG5AQCAtMTI1MywzMSArMTMxMCw0MSBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4gXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMTtcbiBcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcbitcdHVuc2lnbmVkIGludCBzZXExO1xuIFx0aW50IHJldCwgaSwgaiwgaztcbiAjZWxzZVxuIFx0aW50IHJldCwgaSwgajtcbiAjZW5kaWZcbi1cdHUzMiBrZXksIG11bHRpID0gMDtcbitcdHVuc2lnbmVkIGludCBzZXEwO1xuK1x0dTMyIGtleSwgbXVsdGk7XG4gXHR1OCBwb3M7XG4gXG4gXHRwcl9kZWJ1ZyhcInRlc3QgYnkgbmV0c1xcblwiKTtcbiBcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbityZXRyeTpcbitcdG11bHRpID0gMDtcbiBcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMF0pO1xuK1x0c2VxMCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0czAtXHUwMDNlc2VxKTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMV0pO1xuK1x0c2VxMSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0czEtXHUwMDNlc2VxKTtcbiAjZW5kaWZcbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMwLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBqKyspIHtcbi1cdFx0aWYgKCFuZXRzMC1cdTAwM2VuZXRzW2pdLmNvdW50KVxuK1x0XHRzdHJ1Y3QgbmV0X3ByZWZpeCBwMCA9IFJFQURfT05DRShuZXRzMC1cdTAwM2VuZXRzW2pdKTtcbitcbitcdFx0aWYgKCFwMC5jb3VudClcbiBcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XG4rXHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBwMC5jaWRyLCBmYWxzZSk7XG4gXHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG5ldHMxLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBrKyspIHtcbi1cdFx0XHRpZiAoIW5ldHMxLVx1MDAzZW5ldHNba10uY291bnQpXG4rXHRcdFx0c3RydWN0IG5ldF9wcmVmaXggcDEgPSBSRUFEX09OQ0UobmV0czEtXHUwMDNlbmV0c1trXSk7XG4rXG4rXHRcdFx0aWYgKCFwMS5jb3VudClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cdTAwM2VuZXRzW2tdLmNpZHIsIHRydWUpO1xuK1x0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBwMS5jaWRyLCB0cnVlKTtcbiAjZWxzZVxuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyKTtcbitcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIHAwLmNpZHIpO1xuICNlbmRpZlxuIFx0XHRrZXkgPSBIS0VZKGQsIGgtXHUwMDNlaW5pdHZhbCwgdC1cdTAwM2VodGFibGVfYml0cyk7XG4gXHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfYmgoaGJ1Y2tldCh0LCBrZXkpKTtcbkBAIC0xMzAyLDYgKzEzNjksMTMgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHR9XG4gI2VuZGlmXG4gXHR9XG4rXG4rXHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZuZXRzMC1cdTAwM2VzZXEsIHNlcTApKVxuK1x0XHRnb3RvIHJldHJ5O1xuKyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuK1x0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0czEtXHUwMDNlc2VxLCBzZXExKSlcbitcdFx0Z290byByZXRyeTtcbisjZW5kaWZcbiBcdHJldCA9IDA7XG4gdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG5AQCAtMTcwNyw2ICsxNzgxLDcgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzWy0taV0pKTtcbiBcdFx0XHRnb3RvIGZyZWVfaHJlZ2lvbjtcbiBcdFx0fVxuK1x0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNm5ldHMtXHUwMDNlc2VxLCBcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2VybmV0c1tpXSwgbmV0cyk7XG4gXHR9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCBiNDRiOTVmNzY2YjdhLi5iNjAyY2M0MzU2NWRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbkBAIC0zOCw3ICszOCw2IEBAIE1PRFVMRV9BTElBUyhcImlwX3NldF9oYXNoOm5ldCxpZmFjZVwiKTtcbiAjZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0aWZhY2VcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwXG4gXG4gI2RlZmluZSBTVFJTQ1BZKGEsIGIpXHRzdHJzY3B5KGEsIGIsIElGTkFNU0laKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbmluZGV4IDYyOTE1MzJiZTdhNWEuLjYxYWYxY2UyNzEyNzkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbkBAIC0zNiw3ICszNiw2IEBAIE1PRFVMRV9BTElBUyhcImlwX3NldF9oYXNoOm5ldCxwb3J0LG5ldFwiKTtcbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbiAjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuICNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcbi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuIFxuIC8qIElQdjQgdmFyaWFudCAqL1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MTguNjMwMDIyNzE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5MDI1NjI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwc2V0IFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGVkIGEgZmV3IGZpbGVzIGluIHRoZSBgbmV0ZmlsdGVyL2lwc2V0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBgaXBfc2V0X2hhc2hfbmV0aWZhY2UuY2AsIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gSXQncyBpbnRyb2R1Y2luZyBhIGBzZXFjb3VudF9zcGlubG9ja190YCB0byBwcm90ZWN0IHNvbWUgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiBgbmV0c2Agd2l0aGluIGBzdHJ1Y3QgbmV0X3ByZWZpeGVzYC4gVGhhdCBzaWduYWxzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGNvbmNlcm4gdGhleSdyZSBhZGRyZXNzaW5nLCB3aGljaCBpcyB3b3J0aCBrZWVwaW5nIGluIG1pbmQuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGhvdyBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIGZ1bmN0aW9uLiBBbmQgaXQgc2VlbXMgdG8gYmUgcmVtb3ZpbmcgYCNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwYCBmcm9tIHRob3NlIGxhc3QgdHdvIGAuY2AgZmlsZXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEdpdmVuIHRoYXQgaXQncyBwYXJ0IG9mIHRoZSBuZXRmaWx0ZXIgaXBzZXQgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3ZSdyZSB0YWxraW5nIGFib3V0IGhhc2ggdHlwZXMgaW4gcGFydGljdWxhciwgaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gYGlwX3NldF9oYXNoX2dlbi5oYCBpcyBhIHRlbXBsYXRlIGhlYWRlciwgc28gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoZXJlIHdpbGwgZ2V0IGluc3RhbnRpYXRlZCBhY3Jvc3MgbXVsdGlwbGUgYGlwX3NldF9oYXNoXyouY2AgZmlsZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgLiBUaGV5J3JlIHN0YXRpYyB3aXRoaW4gYSBoZWFkZXIsIG1lYW5pbmcgdGhleSdsbCBtYW5pZmVzdCBhcyBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXRfYWRkX2NpZHJgLCBgaGFzaF9uZXRwb3J0X2FkZF9jaWRyYCwgZXRjLlxuXG5XYWl0LCBgbXR5cGVfYWRkX2NpZHJgIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgbXR5cGVfYWRkX2NpZHIoLi4uKWAuIFNpbmNlIGl0J3MgaW4gYSBoZWFkZXIsIGl0J3MgaW5jbHVkZWQgaW4gbXVsdGlwbGUgQyBmaWxlcy4gSW50ZXJlc3RpbmcuIExldCdzIHNlZSBob3cgYG10eXBlX2FkZF9jaWRyYCBnZXRzIHVzZWQuIEFoLCBpdCdzIGNhbGxlZCBieSBgbXR5cGVfYWRkYC4gUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBoZWFkZXIgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlIHRoYXQgc3RyYWlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OToyNC43MjAyODEzNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0Nzc1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfYWRkX2NpZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOS0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIyMDojdW5kZWYgbXR5cGVfYWRkX2NpZHJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyMS0jdW5kZWYgbXR5cGVfZGVsX2NpZHJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MjQuNzY5NzY1MTE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1OTcyMDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFNFVCBJbnN0YW50aWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIElQU0VUIHRva2Vucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5J3JlIGluc3RhbnRpYXRlZC4gVGhlIGNvZGUncyB1c2luZyBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgbmFpbCBkb3duIHdoYXQgdGhpcyBgTVRZUEVgIGlzLiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLiBVbmRlcnN0YW5kaW5nIGBNVFlQRWAgd2lsbCBnaXZlIHVzIHRoZSBjb250ZXh0IGZvciBob3cgdGhpcyBwYXJ0aWN1bGFyIENJRFIgYWRkaXRpb24gaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgSVBTRVQgZnJhbWV3b3JrLiBJdOKAmXMgdGhlIGNyaXRpY2FsIHBpZWNlIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBwdXJwb3NlIG9mIHRoZSBpbnN0YW50aWF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlIG9yIHR5cGUgYE1UWVBFYCByZXByZXNlbnRzLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjY4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MjcuNzI5NDg4NzgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjUyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTVRZUEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9pcFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDppcCxtYWNcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzozNTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX2lwbWFjXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0yNz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6cG9ydFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMjgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoyOTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX3BvcnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTMwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTcwPWhhc2hfaXA0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqbmV4dCwgY29uc3Qgc3RydWN0IGhhc2hfaXA0X2VsZW0gKmUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjc1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy03Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjAyPWhhc2hfaXA2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqbmV4dCwgY29uc3Qgc3RydWN0IGhhc2hfaXA2X2VsZW0gKmUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMDk6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXA2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIxMC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTcyPWhhc2hfaXBtYWM0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hYzRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6Nzg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYWM0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTc5LSNkZWZpbmUgUEZcXHRcXHQ0XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MTgwPWhhc2hfaXBtYWM2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hYzZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xODktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjE5MDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hYzZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTkxLSNkZWZpbmUgUEZcXHRcXHQ2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFyazRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMTItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYXJrNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy04NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yNTctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg0LS8qIENvbW1vbiBmdW5jdGlvbnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0aXA0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMjgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zODctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy02NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX21hYzRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yODAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI4PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRpZmFjZTRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjI9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM2OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcwOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldGlmYWNlNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzEtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xMzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEyMy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNDItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzE9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTEzNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzg6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI1PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00MzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM0OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjQ5OjI3Ljc3NjE0Nzc2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDc1NjAyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgSGFzaCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJUCBzZXQgaGFzaCB0eXBlcy4gSXQgc2VlbXMgYE1UWVBFYCBpcyBhIHBsYWNlaG9sZGVyLCBhbmQgaXQgZXhwYW5kcyB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCB2YXJpYXRpb25zOiBgaGFzaF9uZXQ0YCwgYGhhc2hfbmV0NmAsIGBoYXNoX25ldHBvcnQ0YCwgYGhhc2hfbmV0cG9ydDZgLCBhbmQgdGhlIGxpa2UuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlJ3JlIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgYWRkcmVzcyB0eXBlcyBhbmQgcG9ydCBjb21iaW5hdGlvbnMuIFRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgbmFtZWQgYWNjb3JkaW5nbHksIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgc28gZmFyLlxuXG5XYWl0LCBJIG5lZWQgdG8gem9vbSBpbiBoZXJlIGZvciBhIG1vbWVudC4uLiBpdCBsb29rcyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoYXQncyBub3QgZXhwb3NlZCBleHRlcm5hbGx5LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU28gdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSBwYXJ0IG9mIHRoZSBgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRgLCBhcmUgYWN0dWFsbHkgYGhhc2hfbmV0NF9rYWR0YCwgYGhhc2hfbmV0NF91YWR0YCwgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCBgaGFzaF9uZXQ0X3Rlc3RgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLlxuXG5JJ20gZ29pbmcgdG8gY2hlY2sgaG93IGBtdHlwZV9hZGRgIGlzIGRlZmluZWQgdG8gY2xhcmlmeSB0aGVzZSBudWFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMyOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTozMS45ODM3MTE1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM5MDIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTozMi4wMzQxMDk3MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA1OTg3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaXBfc2V0X3R5cGVfdmFyaWFudGAgRXhwb3J0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBleHBvcnRzIGFzc29jaWF0ZWQgd2l0aCBgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0J3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFdoYXQgbWV0aG9kcyBhcmUgKm1lYW50KiB0byBiZSBjYWxsZWQgdGhyb3VnaCB0aGF0IGludGVyZmFjZT8gSSdtIGFzc3VtaW5nIHRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgSVAgc2V0IGZyYW1ld29yaywgd2hpY2ggaXMgd2h5IHdlIGFyZSBsb29raW5nIGhlcmUuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nIHRoZSBiZWhhdmlvciBvZiBkaWZmZXJlbnQgSVAgc2V0IHR5cGVzLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIE15IGZvY3VzIHdpbGwgYmUgdG8gaWRlbnRpZnkgdGhlIG1ldGhvZHMgdGhhdCBlbmFibGUgZGlmZmVyZW50IHR5cGVzIG9mIElQIHNldHMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkluaXRpYWxpemF0aW9uIGFuZCBEZXN0cnVjdGlvbjoqKiBIb3cgYXJlIHRoZXNlIElQIHNldCB0eXBlcyBpbnN0YW50aWF0ZWQgYW5kIGNsZWFuZWQgdXA/IEFyZSB0aGVyZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBkaWZmZXJlbnQgdHlwZXM/XG4qICAgKipJbnNlcnRpb24gYW5kIERlbGV0aW9uOioqIEhvdyBhcmUgSVAgYWRkcmVzc2VzIG9yIG5ldHdvcmtzIGFkZGVkIHRvIGFuZCByZW1vdmVkIGZyb20gdGhlc2Ugc2V0cz8gSSdtIGJldHRpbmcgdGhlcmUncyBhIHBvbHltb3JwaGljIGFzcGVjdCBoZXJlLlxuKiAgICoqTWVtYmVyc2hpcCBDaGVja2luZzoqKiBJcyB0aGUgQVBJIHByb3ZpZGVkIHRvIGNoZWNrIGlmIGFuIElQIGFkZHJlc3Mgb3IgbmV0d29yayBpcyBwcmVzZW50IGluIGEgc2V0PyBIb3cgZWZmaWNpZW50IGlzIHRoaXM/XG4qICAgKipJdGVyYXRpb246KiogQ2FuIEkgaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhbiBJUCBzZXQgb2YgdGhpcyB0eXBlPyBXaGF0J3MgdGhlIGludGVyZmFjZSBmb3IgdGhhdD9cbiogICAqKlBlcnNpc3RlbmNlL1NlcmlhbGl6YXRpb246KiogSG93IGFyZSB0aGUgSVAgc2V0cyBzYXZlZCBhbmQgcmVzdG9yZWQ/IFdoYXQgZGF0YSBmb3JtYXRzIGFyZSB0aGV5IHVzaW5nP1xuKiAgICoqSW50ZXJuYWwgRGV0YWlsczoqKiBBbnkgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIG1lbW9yeSBvciBzcGVjaWFsIHR5cGVzLlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgSSBuZWVkIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgdGhpcyBjb2RlIGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlIGFuZCBlZmZpY2llbmN5LiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBiZSB1c2VkIGluIHRoZSBrZXJuZWwuIEZpbmFsbHksIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHN0YW5kYXJkIEFQSSwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjQ5OjM1Ljk0MDA5OTg4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MzYzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mjg9SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjMyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cXHQua2FkdFxcdD0gbXR5cGVfa2FkdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MzUuOTg3NzQxMzU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjIxMDc3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIGBtdHlwZV92YXJpYW50YCBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBgbXR5cGVfdmFyaWFudGAgZGVmaW5pdGlvbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgdGhpcyB0aGluZyAqaXMqLiBJIHdhbnQgdG8gc2VlIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBpdHMgc3RydWN0dXJlLCBpdHMgcHJvcGVydGllcywgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIHN5c3RlbSBvciBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBjb21wb25lbnRzLiBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBbiBhYnN0cmFjdCBjb25jZXB0PyBIb3cgZG9lcyBpdCByZWxhdGUgdG8gb3RoZXIgKm10eXBlKiBkZWZpbml0aW9ucywgb3Igb3RoZXIgdmFyaWFudHM/IEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSAtIGlzIGl0IGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGdlbmVyaWNzIG9yIHBvbHltb3JwaGlzbT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGVmaW5pdGlvbiBpdHNlbGY/IExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODYwLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6MzkuMjQ5ODUxNzA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQxMzYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTozOS4yOTUyNzE0MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1ODczMTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbXR5cGVfdmFyaWFudGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIFRoZSB0aG91Z2h0IHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBUaGUgY29yZSBvZiBteSBjdXJyZW50IHdvcmsgaW52b2x2ZXMgdW5kZXJzdGFuZGluZyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgbGV2ZXJhZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBgbXR5cGVfdmFyaWFudGAuIFNvLCBuYXR1cmFsbHksIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgY3J5c3RhbC1jbGVhciBwaWN0dXJlIG9mIHdoYXQgaXQgKmlzKi4gVGhhdCBtZWFucyB0aGUgZGVmaW5pdGlvbiBpcyBwYXJhbW91bnQuIEknbSBnb2luZyB0byBwb3JlIG92ZXIgaXQsIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHN0cnVjdHVyZSwgYW55IGFzc29jaWF0ZWQgY29uc3RyYWludHMgb3IgcHJlY29uZGl0aW9ucywgYW5kIGVzcGVjaWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMsIG5vdCBqdXN0IGEgc3VyZmFjZS1sZXZlbCBvdmVydmlldy4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciB0eXBlIHNhZmV0eSwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwZXJmb3JtYW5jZSBvbmNlIEknbSBsb29raW5nIGF0IGl0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBhdCBhIGxldmVsIG9mIGRldGFpbCB0aGF0IGFsbG93cyBmb3IgY29uZmlkZW50IGRlY2lzaW9uLW1ha2luZyByZWdhcmRpbmcgaXRzIGFwcGxpY2F0aW9uIG9yIHBvdGVudGlhbCByZWZhY3RvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo0Mi40NTQwMDU3MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTYzMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYzMjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4xNjMzOlxcdFxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcbjE2MzQ6XFx0XFx0LnVhZHRcXHQ9IG10eXBlX3VhZHQsXFxuMTYzNTpcXHRcXHQuYWR0XFx0PSB7XFxuMTYzNjpcXHRcXHRcXHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcXG4xNjM3OlxcdFxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbjE2Mzg6XFx0XFx0XFx0W0lQU0VUX1RFU1RdID0gbXR5cGVfdGVzdCxcXG4xNjM5OlxcdFxcdH0sXFxuMTY0MDpcXHRcXHQuZGVzdHJveSA9IG10eXBlX2Rlc3Ryb3ksXFxuMTY0MTpcXHRcXHQuZmx1c2hcXHQ9IG10eXBlX2ZsdXNoLFxcbjE2NDI6XFx0XFx0LmhlYWRcXHQ9IG10eXBlX2hlYWQsXFxuMTY0MzpcXHRcXHQubGlzdFxcdD0gbXR5cGVfbGlzdCxcXG4xNjQ0OlxcdFxcdC51cmVmXFx0PSBtdHlwZV91cmVmLFxcbjE2NDU6XFx0XFx0LnJlc2l6ZVxcdD0gbXR5cGVfcmVzaXplLFxcbjE2NDY6XFx0XFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXFxuMTY0NzpcXHRcXHQuY2FuY2VsX2djID0gbXR5cGVfY2FuY2VsX2djLFxcbjE2NDg6XFx0XFx0LnJlZ2lvbl9sb2NrID0gdHJ1ZSxcXG4xNjQ5OlxcdH07XFxuMTY1MDpcXHRcXG4xNjUxOlxcdCNpZmRlZiBJUF9TRVRfRU1JVF9DUkVBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NDIuNDU0MTE4MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjU1MDM1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIGRpdmluZyBpbnRvIHRoaXMgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaW1wbGVtZW50YXRpb24uLi5cblxuKipBbmFseXppbmcgdGhlIE1UWVBFIEZ1bmN0aW9uIEluc3RhbnRpYXRpb24qKlxuXG5SaWdodCwgc28gdGhlc2UgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzOiBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0YCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2thZHRgLCBgbXR5cGVfdWFkdGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0YW5kYXJkIHN0dWZmLCBidXQgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgY29udGV4dCByaWdodC4gVGhlc2UgYXJlIGluc3RhbnRpYXRlZCAqcGVyKiBgTVRZUEVgLiBUaGF0J3MgdGhlIGtleS4gRWFjaCBgTVRZUEVgIGdldHMgaXRzIG93biBzZXQgb2YgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBpbiBvcmRlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgc2V0LCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0IGBNVFlQRWBzIGRlZmluZSB0aGUgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgdHlwZS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuIEkndmUgZ290IHRvIGZvbGxvdyB0aGUgZGVmaW5pdGlvbnMgYW5kIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGNhbGxzIGFyZSBwdXQgaW50byBvcGVyYXRpb24gZm9yIHRoZSBicm9hZGVyIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NDUuOTE5NjI2NjEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzMjMzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM2PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6aXAscG9ydCxuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDQtICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0NTojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zNi0jZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNT1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxpZmFjZVxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4LSNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldGlmYWNlXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM5OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQwLSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzUtI2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbmV0bmV0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0tcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTM1PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LHBvcnRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjQwOiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtNDEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzo0NjojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0zNi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzozNzojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM4LSNkZWZpbmUgSVBTRVRfTkVUX0NPVU5UIDJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NDUuOTY2NTYzMjI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzMwMjUzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSGFzaCBNVFlQRXMgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2UgTVRZUEVzOiBgaGFzaF9pcHBvcnRuZXQ0YCwgYGhhc2hfaXBwb3J0bmV0NmAsIGBoYXNoX25ldDRgLCBgaGFzaF9uZXQ2YCwgYGhhc2hfbmV0aWZhY2U0YCwgYGhhc2hfbmV0aWZhY2U2YCwgYGhhc2hfbmV0bmV0NGAsIGBoYXNoX25ldG5ldDZgLCBgaGFzaF9uZXRwb3J0NGAsIGBoYXNoX25ldHBvcnQ2YCwgYGhhc2hfbmV0cG9ydG5ldDRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldDZgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBoZXJlLiBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlaXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYF9hZGRgLCBgX2RlbGAsIGBfdGVzdGAsIGFuZCBgX2ZsdXNoYCBmdW5jdGlvbnMgZm9yIGVhY2ggdHlwZS4gSSdtIHRoaW5raW5nLCBmb3IgZXhhbXBsZSwgYWJvdXQgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGFuZCBgaGFzaF9uZXQ0X2ZsdXNoYDsgYW5kIHNpbWlsYXJseSBmb3IgYG5ldDZgLCBgbmV0cG9ydGAsIGBuZXRpZmFjZWAsIGFuZCB0aGUgY29tYmluZWQgdHlwZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyBvcGVyYXRlcyB3aXRoaW4gaXRzIHJlc3BlY3RpdmUgY29udGV4dC5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBsaXN0ZWQgaW4gdGhlIGhlYWRlci4gVGhhdCBtZWFucyB0aGV5J3JlIGVpdGhlciBpbmxpbmVkIG9yIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIG9iamVjdCBmaWxlLCBhbmQgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIElzIGBtdHlwZV9hZGRfY2lkcmAgb25lIG9mIHRoZW0/IEFuZCBgbXR5cGVfYWRkYD8gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgYWN0dWFsbHkgKmlzKiBleHBvcnRlZCBhcyBhIHN5bWJvbCwgb3IgaWYgaXQncyBhbHNvIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCBvciBoaWRkZW4uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NTIuMzM5NTkwNDc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo1Mi4zODUwOTU1OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzA4MTE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYG10eXBlX2FkZGAgYW5kIGBtdHlwZV92YXJpYW50YCoqXG5cblJpZ2h0LCBzbyBgbXR5cGVfYWRkYC4uLiBJIHJlY2FsbCB0aGF0J3MgZGVjbGFyZWQgc3RhdGljLiBBbmQgaXQncyBhc3NpZ25lZCB0byBhIHNwZWNpZmljIGVsZW1lbnQgd2l0aGluIGBtdHlwZV92YXJpYW50LmFkdGAsIHNwZWNpZmljYWxseSB0aGUgb25lIGluZGV4ZWQgYnkgYElQU0VUX0FERGAuIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBmbGFnLiBTaW5jZSBgbXR5cGVfYWRkYCBpcyBzdGF0aWMsIGl0J3Mgc2NvcGVkIHRvIHRoZSBmaWxlIG9yIHRyYW5zbGF0aW9uIHVuaXQuIFRoZW4gdGhlcmUncyBgbXR5cGVfdmFyaWFudGAsIHdoaWNoIGlzICphbHNvKiBzdGF0aWMhIFRoYXQgc3VnZ2VzdHMgdGhpcyBzdHJ1Y3R1cmUgaXMgY29yZSB0byBhIGxpbWl0ZWQgc2NvcGUsIG1heWJlIGV2ZW4gYSBzaW5nbGV0b24gcGF0dGVybiwgb3IgYXQgbGVhc3QgYSB0aWdodGx5IGNvbnRyb2xsZWQgYWNjZXNzIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgZmFjdCB0aGF0IGJvdGggYXJlIHN0YXRpYyB0ZWxscyBtZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIGRlc2lnbi4gV2hlcmUsIGFuZCBob3cgaXMgYG10eXBlX3ZhcmlhbnRgIGFjdHVhbGx5IGJlaW5nIHVzZWQ/IEtub3dpbmcgaXRzIHVzYWdlIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgc3RhdGljIGFzc2lnbm1lbnQuIExldCdzIHRyYWNlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTk2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NTUuNjEyMTgwMjk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzMDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV92YXJpYW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiN1bmRlZiBtdHlwZV92YXJpYW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctI3VuZGVmIG10eXBlX2RhdGFfbWF0Y2hcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjkzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyOTQ6I2RlZmluZSBtdHlwZV92YXJpYW50XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjk1LSNkZWZpbmUgbXR5cGVfZGF0YV9tYXRjaFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9tYXRjaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo1NS42NTc3MTY0MDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwOTA4NDcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIFNldCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBgbXR5cGVfdmFyaWFudGAgaXMgdGllZCB0byBhIHNwZWNpZmljIGhhc2ggdmFyaWFudCwgaW4gdGhpcyBjYXNlLCBgaGFzaF9uZXQ0X3ZhcmlhbnRgIGFuZCB0aGUgbGlrZS4gVGhhdCdzIHRoZSBmaXJzdCBjb25uZWN0aW9uLiBOb3cgSSByZWNhbGwgdGhhdCB0aGlzIGBtdHlwZV92YXJpYW50YCBpcyB0aGVuIHBhc3NlZCB0byBgaXBfc2V0X3R5cGVfcmVnaXN0ZXJgLiBIbW0sIEkgc2hvdWxkIHRyYWNlIHRoYXQuXG5cblRoaXMgY2FsbHMgZm9yIGEgY2xvc2VyIGxvb2sgYXQgYGlwX3NldF9oYXNoX25ldC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhcmlhbnRzIGFyZSByZWdpc3RlcmVkIGFuZCBob3cgdGhlaXIgc3BlY2lmaWMgcHJvcGVydGllcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgSVAgc2V0IGZyYW1ld29yay4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGBtdHlwZV92YXJpYW50YCBhc3NvY2lhdGlvbi4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIGludm9sdmVkPyBJIGV4cGVjdCB0byBmaW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2hpbmcgbG9naWMsIHRoZSBjb2xsaXNpb24gaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWMgdG8gdGhlc2UgbmV0LWJhc2VkIHNldHMuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo0OTo1OS41NjY4MDQyMDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDY5OTM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NDk6NTkuNjExODg2MjYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzI4NTM3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbXR5cGVfdmFyaWFudGAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIGxldCBtZSBqdXN0IHRoaW5rIHRoaXMgdGhyb3VnaC4uLiB0aGUgYG10eXBlX3ZhcmlhbnRgIGlzIGRlZmluZWQgYXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfdmFyaWFudClgLiBSaWdodCwgc28gdGhhdCdzIHRoZSBiYXNlIHN0cnVjdHVyZS4gTm93LCBpZiBgTVRZUEVgIGhhcHBlbnMgdG8gYmUgYGhhc2hfbmV0NGAsIHRoZW4sIGFuZCBvbmx5IHRoZW4sIGBtdHlwZV92YXJpYW50YCBiZWNvbWVzIGBoYXNoX25ldDRfdmFyaWFudGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgaGFzaF9uZXQ0YCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgaXBfc2V0X2hhc2hfbmV0LmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIGFuZCBpbXBsZW1lbnRhdGlvbnMgb2YgYGhhc2hfbmV0NGAuIEhvcGVmdWxseSwgaXQncyB3ZWxsLWRvY3VtZW50ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjExLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MDIuNzg0NzgxNDkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwOTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTQxLS8qIE1lbWJlciBlbGVtZW50cyAgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjQyOnN0cnVjdCBoYXNoX25ldDRfZWxlbSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00My1cXHRfX2JlMzIgaXA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTUxPXN0YXRpYyBib29sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MjpoYXNoX25ldDRfZGF0YV9lcXVhbChjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmlwMSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjUzOlxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICppcDIsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy01NC1cXHRcXHQgICAgIHUzMiAqbXVsdGkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTYwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjYxOmhhc2hfbmV0NF9kb19kYXRhX21hdGNoKGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTYyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9NjY9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjY3Omhhc2hfbmV0NF9kYXRhX3NldF9mbGFncyhzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0sIHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTY4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9NzI9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjczOmhhc2hfbmV0NF9kYXRhX3Jlc2V0X2ZsYWdzKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggKmZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz03OD1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Nzk6aGFzaF9uZXQ0X2RhdGFfbmV0bWFzayhzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0sIHU4IGNpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy04MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTg1PXN0YXRpYyBib29sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo4NjpoYXNoX25ldDRfZGF0YV9saXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTg3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAxPXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDI6aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDM6XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTYte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTE3OlxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTgtXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTE5OlxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIwLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzNy1cXHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMzgte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM5OlxcdHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xNDAtXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQxOlxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQyLVxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTk3LVxcdFxcdGlmIChpIFxcdTAwM2UgSVBTRVRfTUFYX1JBTkdFKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxOTg6XFx0XFx0XFx0aGFzaF9uZXQ0X2RhdGFfbmV4dChcXHUwMDI2aC1cXHUwMDNlbmV4dCwgXFx1MDAyNmUpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTk5LVxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDowMi44MzMzOTg5MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODM0NDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBJUCBTZXQgSGFzaCBHZW5lcmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgcmVmZXJlbmNpbmcgYG10eXBlX3ZhcmlhbnRgLiBSaWdodCwgSSByZWNhbGwgdGhhdCdzIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfaGFzaF9nZW4uaGAg4oCTIHRoYXQncyB0aGUgaGVhZGVyIHdoZXJlIHdlIGhhdmUgYWxsIHRob3NlIHR5cGUtc3BlY2lmaWMgaGVscGVyIG1hY3JvcyBhbmQgc3RydWN0dXJlcyBmb3IgZ2VuZXJhdGluZyB0aGUgaGFzaCBzZXRzLiBBaCwgYW5kIGl0J3MgdXNlZCAqd2l0aGluKiB0aGF0IHNhbWUgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2U7IHByb2JhYmx5IGEgbG9jYWwgc3RydWN0dXJlLiBIYW5nIG9uLi4uIGxldCdzIGNvbmZpcm0gdGhlIGRldGFpbHMuIGBtdHlwZV92YXJpYW50YCBpcyAqc3RhdGljIGNvbnN0Kiwgc28gaXQgaXMgZGVmaW5lZCBhdCBjb21waWxlIHRpbWUgYW5kIHNjb3BlZCBpbnRlcm5hbGx5LiBJdCBpcyBhIGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAsIHNvIHRoZSB0eXBlIGlzIGNyaXRpY2FsLiBBaGEsIHllcywgSSdtIHNlZWluZyBpdCBub3c6IGBtdHlwZV92YXJpYW50ID0geyAuLi4gfWAuIFRoYXQgY29uZmlybXMgaXQsIGl0J3MgYSBjb25zdGFudCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBsb29rdXAgdGFibGUgb2Ygc29ydHMgY29udGFpbmluZyBkaWZmZXJlbnQgc2V0dGluZ3MsIG9wdGlvbnMsIG9yIG1ldGFkYXRhIGZvciBoYXNoIHR5cGVzLiBOb3cgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgZ29lcy4uLi4gT2theSwgYW5kIGl0J3MgYmVpbmcgdXNlZCBieSBgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpYC4gSG1tLCBub3cgdGhlIG1hY3JvIGlzIHRoZSBrZXkuIFRoYXQgZXhwYW5kcyB0byBgaGFzaF9uZXRfY3JlYXRlYCDigJMgdGhhdCdzIHRoZSBnZW5lcmljIG5ldCBoYXNoIGNyZWF0aW9uIGZ1bmN0aW9uISBTbyBgbXR5cGVfdmFyaWFudGAgbXVzdCBmZWVkIGludG8gdGhlIGhhc2ggY3JlYXRpb24gcHJvY2VzcyBpdHNlbGYuIFRoYXQgYF9jcmVhdGVgIGZ1bmN0aW9uIHByb2JhYmx5IHVzZXMgdmFsdWVzIGZyb20gYG10eXBlX3ZhcmlhbnRgIHRvIGNvbmZpZ3VyZSB0aGluZ3MgbGlrZSB0aGUgaGFzaGluZyBhbGdvcml0aG0sIHRoZSBidWNrZXQgc2l6ZSwgb3Igb3RoZXIgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBzcGVjaWZpYyBoYXNoIG5ldCBiZWluZyBjcmVhdGVkLiBQZXJmZWN0LCBub3cgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaXRzIHVzYWdlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDgyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MDcuMDkxNzQ3NjQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ0MDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV92YXJpYW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiN1bmRlZiBtdHlwZV92YXJpYW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctI3VuZGVmIG10eXBlX2RhdGFfbWF0Y2hcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjkzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyOTQ6I2RlZmluZSBtdHlwZV92YXJpYW50XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF92YXJpYW50KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjk1LSNkZWZpbmUgbXR5cGVfZGF0YV9tYXRjaFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9tYXRjaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYyOD1JUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMzLVxcdC5rYWR0XFx0PSBtdHlwZV9rYWR0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDowNy4xNDgxOTQwOTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNDMwNDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgY2hlY2ssIHNwZWFraW5nIGFzIG15c2VsZiwgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gYGlwX3NldF9oYXNoX2dlbi5oYCoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXNoIG5ldCBjcmVhdGlvbiBhbmQgdmFyaWFudCBtYW5hZ2VtZW50IGFyZSBpbXBsZW1lbnRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB3aXRoaW4sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGluc3RhbmNlcyB3aGVyZSBgaGFzaF9uZXRfY3JlYXRlYCBvciBgbXR5cGVfdmFyaWFudGAgYXJlIHVzZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCwgdGhlIHBhcmFtZXRlcnMgdGhleSB0YWtlLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgdGhleSBpbXBsZW1lbnQuIElzIHRoZSBgaGFzaF9uZXRfY3JlYXRlYCBmdW5jdGlvbiBwcm9wZXJseSBtYW5hZ2luZyBtZW1vcnk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSB2YXJpYW50IHVzYWdlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtdHlwZV92YXJpYW50YCBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IGBoYXNoX25ldGAgdHlwZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIHRpbWUgdG8gZmluZCBob3cgdGhlc2UgZWxlbWVudHMgY29tYmluZSBhbmQgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gaXMgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjEwLjk4MjUwNDAwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MTczNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10eXBlX3ZhcmlhbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0NS0jdW5kZWYgbXR5cGVfY2FuY2VsX2djXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDY6I3VuZGVmIG10eXBlX3ZhcmlhbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0Ny0jdW5kZWYgbXR5cGVfZGF0YV9tYXRjaFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTMtI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI5NDojZGVmaW5lIG10eXBlX3ZhcmlhbnRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3ZhcmlhbnQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yOTUtI2RlZmluZSBtdHlwZV9kYXRhX21hdGNoXFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX21hdGNoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjI4PUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjMxLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzMjpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzMtXFx0LmthZHRcXHQ9IG10eXBlX2thZHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjExLjI3MTY4NDEwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIzMjg1MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHdvcms6XG5cbioqSHVudGluZyBEb3duIFRoYXQgYF92YXJpYW50YCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpczogSSBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIGBfdmFyaWFudGAgdGhpbmcgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlwX3NldF9oYXNoX2dlbi5oYCBmaWxlLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHNvbWUgSVAgc2V0IGhhc2ggZ2VuZXJhdGlvbiBwcm9jZXNzLiBGaW5kaW5nIHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGFuZCB3aGF0IHRoZSBhc3NvY2lhdGVkIGxvZ2ljIGlzIGRvaW5nLiBMZXTigJlzIGdldCB0byBzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MTQuMTk0OTczODM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY2ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ1LSN1bmRlZiBtdHlwZV9jYW5jZWxfZ2NcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0NjojdW5kZWYgbXR5cGVfdmFyaWFudFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQ3LSN1bmRlZiBtdHlwZV9kYXRhX21hdGNoXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5My0jZGVmaW5lIG10eXBlX2NhbmNlbF9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfY2FuY2VsX2djKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mjk0OiNkZWZpbmUgbXR5cGVfdmFyaWFudFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdmFyaWFudClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI5NS0jZGVmaW5lIG10eXBlX2RhdGFfbWF0Y2hcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfbWF0Y2gpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mjg9SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjMyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzMy1cXHQua2FkdFxcdD0gbXR5cGVfa2FkdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTY1Mz1JUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE4MjItI2VuZGlmXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxODIzOlxcdFxcdHNldC1cXHUwMDNldmFyaWFudCA9IFxcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNF92YXJpYW50KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE4MjQtXFx0XFx0c2V0LVxcdTAwM2Vkc2l6ZSA9IGlwX3NldF9lbGVtX2xlbihzZXQsIHRiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xODI4LVxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxODI5OlxcdFxcdHNldC1cXHUwMDNldmFyaWFudCA9IFxcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNl92YXJpYW50KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE4MzAtXFx0XFx0c2V0LVxcdTAwM2Vkc2l6ZSA9IGlwX3NldF9lbGVtX2xlbihzZXQsIHRiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoxNC4yNDI2NTE4NTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MjY2NjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBsaW5lLCBgc2V0LVx1MDAzZXZhcmlhbnQgPSBcdTAwMjZJUFNFVF9UT0tFTihIVFlQRSwgNF92YXJpYW50KTtgIOKAkyB0aGF0J3MgdGhlIGtleS4gU28gYGhhc2hfbmV0NF92YXJpYW50YCBpcyB0aGUgYWN0dWFsIG5hbWUsIHdoaWNoIGlzIGdvb2QuIExldCBtZSBzZWUsIGBIVFlQRWAgaXMgZGVmaW5lZCBhcyBgaGFzaF9uZXRgLCBzbyB0aGUgZnVsbCBuYW1lIGlzIGluZGVlZCBgaGFzaF9uZXQ0X3ZhcmlhbnRgLiBBbmQgdGhlbiwgYE1UWVBFYCBpcyBgaGFzaF9uZXQ0YCwgd2hpY2ggbWVhbnMgYG10eXBlX3ZhcmlhbnRgIG11c3QgYWxzbyByZXNvbHZlIHRvIGBoYXNoX25ldDRfdmFyaWFudGAuXG5cbk5vdywgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIOKAkyB0aGV5IGFyZW4ndCBkaXJlY3RseSBleHBvcnRlZC4gVGhleSdyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgdGhleSB3b24ndCBoYXZlIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpbWFnZSB1bmxlc3MgdGhleSBhcmUgKm5vdCogaW5saW5lZC4gQmVjYXVzZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycywgdGhleSBkZWZpbml0ZWx5IGNhbid0IGJlIGlubGluZWQuIFRoaXMgd2lsbCBnZW5lcmF0ZSBzeW1ib2xzISBUaGVpciBuYW1lcyB3aWxsIGJlIHNvbWV0aGluZyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYW5kIHNvIG9uLlxuXG5IYW5nIG9uLi4uIExldCdzIGNvbmZpcm0gdGhhdCBgaGFzaF9uZXQ0X2FkZGAgaXMgdGhlIGFjdHVhbCBuYW1lLiBMZXQncyB0cmFjZSBpdCBiYWNrLiBPa2F5LCBzbyBgbXR5cGVfYWRkYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IG10eXBlX2FkZCguLi4pYC4gQWhhISBCdXQgYG10eXBlX2FkZGAgaXMgYSBtYWNybywgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkxNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoxOC43MjUzMjE1ODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzIxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgbXR5cGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjg6I2RlZmluZSBtdHlwZV9hZGRfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjktI2RlZmluZSBtdHlwZV9kZWxfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI3OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI4MDojZGVmaW5lIG10eXBlX2FkZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjgxLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjE4Ljc3NTY2MzQ5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjc2Nzk1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gTWFwcGluZyBmb3IgSVAgU2V0IE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEkndmUgY29uZmlybWVkIHRoYXQgYG10eXBlX2FkZGAgaXMgaW5kZWVkIG1hcHBlZCB0byBgaGFzaF9uZXQ0X2FkZGAuIE5vdyBJIGNhbiBsaXN0IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBmb3IgSVB2NCwgSVB2NiwgcG9ydCwgaW50ZXJmYWNlLCBhbmQgbmV0d29yayB2YXJpYXRpb25zOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9mbHVzaGAsIGBoYXNoX25ldDZfYWRkYCwgYGhhc2hfbmV0Nl9kZWxgLCBgaGFzaF9uZXQ2X3Rlc3RgLCBgaGFzaF9uZXQ2X2ZsdXNoYCwgYW5kIHNvIG9uLCBjb3ZlcmluZyBhbGwgdGhlIHBlcm11dGF0aW9ucy5cblxuQnV0IGhhbmcgb24sIEkgc2VlIGBtdHlwZV9hZGRfY2lkcmAsIHdoaWNoIGxvb2tzIGxpa2UgYSBtYWNyby4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbjogYCNkZWZpbmUgbXR5cGVfYWRkX2NpZHIgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilgIGNvbmZpcm1zIGl0LiBTbywgdGhhdCBtZWFucyBgaGFzaF9uZXQ0X2FkZF9jaWRyYCBpcyBhbHNvIGEgc3ltYm9sIHRvIGNvbnNpZGVyLiBUaGUgY2hhbGxlbmdlIHdpdGggdGhpcyBgbXR5cGVfYWRkX2NpZHJgIGZ1bmN0aW9uIGlzIHRoYXQgaXQncyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBhbmQgaXQncyBvbmx5IGNhbGxlZCBieSBgbXR5cGVfYWRkYCBhbmQgYG10eXBlX3Jlc2l6ZWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBJcyBpdCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gU2luY2UgaXQncyBzdGF0aWMsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZS5cblxuSSBzaG91bGQgdmVyaWZ5IGJ5IGNoZWNraW5nIHdoZXRoZXIgYGhhc2hfbmV0NF9hZGRgIGlzIGEgYmV0dGVyIHRhcmdldC4gUmlnaHQsIGBoYXNoX25ldDRfYWRkYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIGNhbid0IGlubGluZSBpdC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gVGhlIGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudCBtYWtlcyB0aGF0IGZ1bmN0aW9uIGEgY2xlYXJlciB0YXJnZXQuXG5cbk5vdywgd2FpdCwgaXMgYG10eXBlX3Rlc3RfY2lkcnNgIGFub3RoZXIgbWFjcm8/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoyNS4wNTI0NjIxNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NzMyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBtdHlwZV90ZXN0X2NpZHJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xODg9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODEtI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI4MjojZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODMtI2RlZmluZSBtdHlwZV90ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDoyNS4wOTkyNDM1NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTIxOTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwc2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgZXF1aXZhbGVudCB0byBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgLiBHb3QgaXQuIEFuZCBgbXR5cGVfdGVzdGAgY2FsbHMgdGhhdC4gTm93LCBJJ20gY3VyaW91cyBpZiBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgaW5saW5lZC4gSXQncyBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuIEhvd2V2ZXIsIGBoYXNoX25ldDRfdGVzdGAgaXNuJ3QgaW5saW5lZCwgc28gdGhhdCdzIGEgY2x1ZS5cblxuVGltZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ2xsIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIHJlbGV2YW50IGZpbGVzIHNlZW0gdG8gYmUgYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgLCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYCwgYW5kIHRoZSBoZWFkZXIgYGlwX3NldF9oYXNoX2dlbi5oYC4gSSdsbCBvcGVuIHVwIHRoZSBLY29uZmlnIGZpbGVzIGZvciB0aGVzZSB0byBzZWUgaG93IHRoZXkncmUgY29uZmlndXJlZC4gVGhhdCBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjI5LjA1ODQ2NjIzNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2ODk0NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9oYXNoX25ldGlmYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MjkuMTA3MTcwMjlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwOTMzMjAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgaXBzZXQgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgYmVhc3Q6IGBuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlYC4gSXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBpcHNldCBpcyBkZWZpbmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWxkIHN5c3RlbSBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGdldHMgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIGFuZCBhbnkgc3BlY2lmaWMgZmxhZ3MgdGhhdCBhcmUgYmVpbmcgdXNlZCwgcGFydGljdWxhcmx5IG9wdGltaXphdGlvbiBzZXR0aW5ncyBhbmQgYW55IGxpbmtlciB0cmlja3MuIEknbSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY3VzdG9tIHJ1bGVzIG9yIG1vZHVsZXMgYmVpbmcgZW1wbG95ZWQuIEtub3dpbmcgdGhlIGJ1aWxkIHByb2Nlc3Mgd2lsbCBoZWxwIG1lIHRyb3VibGVzaG9vdCBwb3RlbnRpYWwgaXNzdWVzLCB1bmRlcnN0YW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGV2ZW4gcHJvcG9zZSBmdXR1cmUgZW5oYW5jZW1lbnRzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgd2l0aGluIHRoaXMgZmlsZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjMyLjQxNjUwNTI4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzODE3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X2hhc2hfbmV0aWZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUKSArPSBpcF9zZXRfaGFzaF9uZXRwb3J0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRSkgKz0gaXBfc2V0X2hhc2hfbmV0aWZhY2Uub1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMjctb2JqLSQoQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVCkgKz0gaXBfc2V0X2hhc2hfbmV0bmV0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzIuNDY4ODkzNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk2NjE0Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVBzZXQgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJUHNldCBjb25maWd1cmF0aW9uczogYENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFuZCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVGAuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSdyZSByZWxhdGVkLCBwcm9iYWJseSBpbiB0aGUgd2F5IHRoYXQgdGhlIGhhc2ggc3RydWN0dXJlcyBhcmUgZGVmaW5lZC4gVGhlIG5ldHBvcnRuZXQgb25lIGltbWVkaWF0ZWx5IGZsYWdzLCBzaW5jZSBpdCBoYXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiBwb3J0IGFuZCBuZXR3b3JrLCB3aGljaCBhbHdheXMgcHJlc2VudHMgY2hhbGxlbmdlcyBmb3Igc2NhbGluZy5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMgb2YgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBmb3IgdGhhdCBvcHRpb24uIFRoYXQgZmlsZSBzaG91bGQgZGVmaW5lIGl0LCBhbmQgc2hvdyBpdHMgZGVwZW5kZW5jaWVzLiBIb3BlZnVsbHksIGl0J2xsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBvbiBob3cgdGhlc2UgYXJlIHJlbGF0ZWQgYW5kIHdoZXRoZXIgb25lIGRlcGVuZHMgb24gb3RoZXJzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBmb3IgY29uZmxpY3RzIG9yIGNsZXZlciBjb21iaW5hdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzkwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzUuODY1NTEwNzY4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODgzMDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNDg9Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE1ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzUuOTE0MzQ5NTUzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzU2NDczNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX1NFVF9IQVNIX05FVElGQUNFYC4gVGhhdCBtZWFucyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgYmFjayBmcm9tIHRoYXQgc3BlY2lmaWMgc2V0IHR5cGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBsaWJyYXJpZXMgaXQgcmVsaWVzIG9uIOKAkyBrZXJuZWwgbW9kdWxlcywgb3RoZXIgSVAgc2V0IGZ1bmN0aW9uYWxpdHksIG1heWJlIHNwZWNpZmljIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUgZWxlbWVudHMuIEknbGwgYmUgbG9va2luZyBmb3IgaGVhZGVyIGZpbGUgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBvciBhbnkga2luZCBvZiBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVmZXJlbmNlcy4gSXTigJlzIGFsc28gd29ydGggY29uc2lkZXJpbmcgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvci4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgZm9yIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBjb2RlIG9yLCBtb3JlIGxpa2VseSwgc29tZXRoaW5nIEknbGwgY29uc3RydWN0IG1lbnRhbGx5IGFzIEkgd29yayB0aHJvdWdoIHRoZSByZWxhdGlvbnNoaXBzLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgc3RhY2ssIGVzcGVjaWFsbHkgYXMgaXQgcmVsYXRlcyB0byBpbnRlcmZhY2Utc3BlY2lmaWMgSVAgc2V0IGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6MzkuNjUwMDAwMzg1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTg6XFx0Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxuIDE1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAxNjE6XFx0XFx0aGVscFxcbiAxNjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBoYXNoOm5ldCxpZmFjZSBzZXQgdHlwZSBzdXBwb3J0LCBieSB3aGljaFxcbiAxNjM6XFx0XFx0ICBvbmUgY2FuIHN0b3JlIElQdjQvSVB2NiBuZXR3b3JrIGFkZHJlc3MvcHJlZml4IGFuZFxcbiAxNjQ6XFx0XFx0ICBpbnRlcmZhY2UgbmFtZSBwYWlycyBhcyBlbGVtZW50cyBpbiBhIHNldC5cXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTY3OlxcdFxcbiAxNjg6XFx0Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbiAxNjk6XFx0XFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcbiAxNzA6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG4gMTcxOlxcdFxcdGhlbHBcXG4gMTcyOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbGlzdDpzZXQgc2V0IHR5cGUgc3VwcG9ydC4gSW4gdGhpc1xcbiAxNzM6XFx0XFx0ICBraW5kIG9mIHNldCBvbmUgY2FuIHN0b3JlIHRoZSBuYW1lIG9mIG90aGVyIHNldHMgYW5kIGl0IGZvcm1zXFxuIDE3NDpcXHRcXHQgIGFuIG9yZGVyZWQgdW5pb24gb2YgdGhlIG1lbWJlciBzZXRzLlxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNzc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjM5LjY1MDA3NzMwNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg4MjMyMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBoaW5nZXMgb24gdGhpcyBgSVBfU0VUYC4gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogKml0J3MgYWxsIGFib3V0IGhvdyBgSVBfU0VUYCBpcyBiZWluZyB1c2VkLCBhbmQgd2hhdCdzIGNvbm5lY3RlZCB0byBpdCouIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZywgXCJ3aGF0IG90aGVyIGNvbXBvbmVudHMsIHN5c3RlbXMsIG9yIHJ1bGVzIHJlbHkgb24gdGhlIHN0YXRlIG9yIGNvbnRlbnRzIG9mIGBJUF9TRVRgP1wiLiBJcyBpdCBkaXJlY3RseSBmZWVkaW5nIGludG8gZmlyZXdhbGwgcnVsZXM/IElzIGl0IGxpbmtlZCB0byBhIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbD8gQXJlIHRoZXJlIG1vbml0b3JpbmcgdG9vbHMgdGhhdCBhcmUga2V5ZWQgdG8gY2hhbmdlcyBpbiB0aGF0IHNldD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIGBJUF9TRVRgIGJlaGF2ZXMgdW5leHBlY3RlZGx5LiBTbywgSSdsbCBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLCBzeXN0ZW0gbG9ncywgYW5kIG1heWJlIGV2ZW4gbG9vayBmb3IgYW55IG1vbml0b3JpbmcgZGFzaGJvYXJkcyB0aGF0IHJlZmVyZW5jZSB0aGF0IGlkZW50aWZpZXIuIExldCdzIGRpZyBpbiBhbmQgdHJhY2sgZG93biBldmVyeSBkaXJlY3QgYW5kIGluZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYElQX1NFVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODE4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo0My43MzgzMTI1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTMzODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo0My43ODUxMzQ5NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MDk4MjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uZnVzaW9uKipcblxuSG1tLCBqdXN0IGEgcXVpY2sgbWVudGFsIGNoZWNrIGhlcmUuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHNvbWUgYG5ldGZpbHRlcmAgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIHF1aWNrbHkuIFdoZXJlIGV4YWN0bHkgaXMgdGhlIGBJUF9TRVRgIEtjb25maWcgc3ltYm9sIGRlZmluZWQ/IElzIGl0IGRpcmVjdGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgb3IgYW0gSSB0aGlua2luZyBvZiBpdCBiZWluZyB1bmRlciB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2Agc3ViZGlyZWN0b3J5PyBJdCdzIGVhc3kgdG8gZ2V0IHRoZXNlIGRldGFpbHMgbXVkZGxlZCB3aGVuIHlvdSdyZSBqdW1waW5nIGFyb3VuZCB2YXJpb3VzIGtlcm5lbCBjb21wb25lbnRzLiBJIHJlYWxseSBzaG91bGQgYmUgYWJsZSB0byBpbnN0YW50bHkgcmVjYWxsIHRoaXMsIGJ1dCBJJ2xsIG1ha2UgYSBxdWljayBjaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4ndCBjb25mdXNlZCB0aGUgcmVsZXZhbnQgbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjQ2Ljc2NjEyMDc5NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MDk4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo0Ni44MTg1NDIyMzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMjExMzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBtZW51Y29uZmlnIElQX1NFVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbWVudWNvbmZpZ2Agc2V0dXAsIHNwZWNpZmljYWxseSB0aGUgYElQX1NFVGAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyBvciBtb2R1bGVzIG1pZ2h0IGJlIHJlcXVpcmVkLCBvciBpZiBgSVBfU0VUYCBpdHNlbGYgZGVwZW5kcyBvbiBhIHBhcnRpY3VsYXIgbmV0d29ya2luZyBzdGFjayBjb25maWd1cmF0aW9uIG9yIHNlY3VyaXR5IGZlYXR1cmUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBgSVBfU0VUYCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHZhcmlhYmxlcyBhbmQgc3ltYm9scyBuZWVkIHRvIGJlIHNldCBvciBlbmFibGVkIGZvciBgSVBfU0VUYCB0byB3b3JrLiBJIGFsc28gZXhwZWN0IHRoYXQgdGhlcmUnbGwgYmUgc29tZSBkb2N1bWVudGF0aW9uIHRoYXQgSSdsbCBuZWVkIHRvIGJyb3dzZSBmb3IgYW55IGFkZGl0aW9uYWwgcHJlcmVxdWlzaXRlcy4gSSdtIHByaW1hcmlseSB0aGlua2luZyBhYm91dCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdHMgdXNlLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdGluZyBzZXR0aW5ncy4gSSBhbSB0cnlpbmcgdG8gYXNjZXJ0YWluIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkaXJlY3Qgb3IgaW5kaXJlY3QuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGFibGUgdG8gYWNjdXJhdGVseSBjb25maWd1cmUgYElQX1NFVGAgYW5kIGludGVncmF0ZSBpdCBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo1MC4zNDA2NTg3NTVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElQX1NFVFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHNldCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgSVAgc2V0IHN1cHBvcnQgdG8gdGhlIGtlcm5lbC5cXG4gICA4OlxcdFxcdCAgSW4gb3JkZXIgdG8gZGVmaW5lIGFuZCB1c2UgdGhlIHNldHMsIHlvdSBuZWVkIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxcbiAgIDk6XFx0XFx0ICBpcHNldCg4KS4gWW91IGNhbiB1c2UgdGhlIHNldHMgaW4gbmV0ZmlsdGVyIHZpYSB0aGUgXFxcInNldFxcXCIgbWF0Y2hcXG4gIDEwOlxcdFxcdCAgYW5kIFxcXCJTRVRcXFwiIHRhcmdldC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgSVBfU0VUXFxuICAxNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTA6NTAuMzQwNzI3MDE1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDQ5NDI1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgQ29uZmlndXJhdGlvbiBhbmQgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSVBfU0VUYCBkZXBlbmRlbmN5IOKAkyBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IHJlbGllcyBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gYmUgZW5hYmxlZC4gSSBzZWUgYElQX1NFVGAsIG5hdHVyYWxseSwgYnV0IGFsc28gYSBzdHJpbmcgb2YgaGFzaC1iYXNlZCBjb25maWd1cmF0aW9uczogYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBHb3QgaXQuXG5cbkhvbGQgb24sIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQncyBhIHNoYXJlZCBoZWFkZXIgZm9yIGFsbCBoYXNoIHR5cGVzLiBMb29raW5nIGNsb3NlciwgaXQgYXBwZWFycyB0aGUgbW9kaWZpY2F0aW9uIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBjb2RlIHBhdGhzLiBBaCwgcmlnaHQuIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB3aGljaCB0eXBlcyBhY3R1YWxseSBkZWZpbmUgdGhpcy4gT2theSwgdGhvc2UgYXJlOiBgaGFzaF9uZXRgLCBgaGFzaF9uZXRwb3J0YCwgYGhhc2hfbmV0aWZhY2VgLCBgaGFzaF9uZXRuZXRgLCBgaGFzaF9pcHBvcnRuZXRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldGAuIFNvLCB0aGUgbGlzdCBvZiBjb25maWdzIEkgaWRlbnRpZmllZCBhYm92ZSBpcyBjb3JyZWN0LiBXZSdsbCBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhvc2UgdG8gcHJvcGVybHkgYWRkcmVzcyB0aGUgcGF0Y2gncyBjaGFuZ2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcy4gSSd2ZSBnb3QgYSBsb25nIGxpc3Qgb2YgZnVuY3Rpb25zIGhlcmU6IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBldGMuIEVzc2VudGlhbGx5LCB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYWRkaW5nLCBkZWxldGluZywgdGVzdGluZywgYW5kIGZsdXNoaW5nIG9mIHRoZSBkaWZmZXJlbnQgbmV0IGFuZCBwb3J0IGhhc2ggdHlwZXMuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGluIG1pbmQgd2hlbiBhbmFseXppbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgcGF0Y2guIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSB0byBlbnN1cmUgcHJvcGVyIGZ1bmN0aW9uYWxpdHkgYWZ0ZXIgdGhlIG1vZGlmaWNhdGlvbi5cblxuTm93LCBhIHF1aWNrIHF1ZXN0aW9uIHBvcHMgdXAuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXhwb3J0ZWQgb3IgYXJlIHRoZXkgc3RhdGljPyBJdCB3b3VsZCBiZSBnb29kIHRvIHZlcmlmeS4gT2theSwgdGhleSBhcmUgc3RhdGljLiBIb3dldmVyLCBzaW5jZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBgbXR5cGVfdmFyaWFudGAgc3RydWN0LCB0aGV5IHdvbid0IGJlIGlubGluZWQgYW5kIHRoZSBrZXJuZWwgaW1hZ2Ugd2lsbCBhY3R1YWxseSBoYXZlIHN5bWJvbHMgZm9yIHRoZW0uIEdvb2QgdG8gbm90ZS4gSSBzdGlsbCBuZWVkIHRvIHZlcmlmeSB0aGUgc3RhdGljIGF0dHJpYnV0ZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIHRob3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwMzIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MDo1Ny45ODU2NzMxMzFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzM2MDY1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IG10eXBlX2FkZFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUwOjU4LjAzMzAyMDY0NloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzEwNDYwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJlY2FsbGluZyBQcmlvciBSZXNlYXJjaCoqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYG10eXBlX2FkZChgIGVhcmxpZXIuIFRoZSBmYWN0IHRoYXQgSSBoYWQgdGhhdCBxdWVyeSBpbiBteSBzZWFyY2ggaGlzdG9yeSBtZWFucyBzb21ldGhpbmcuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZSBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB3aHkgd2FzIEkgbG9va2luZyBhdCBpdD8gV2hhdCB3YXMgdGhlIHJlbGV2YW50IHByb2JsZW0gc3BhY2UgdGhlbiwgYW5kIGlzIGl0IGNvbm5lY3RlZCB0byB3aGF0IEknbSBkZWFsaW5nIHdpdGggY3VycmVudGx5PyBJIHNob3VsZCBwcm9iYWJseSBnbyBiYWNrIGFuZCBsb29rIGF0IG15IHNlYXJjaCBoaXN0b3J5IGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvZGUgc25pcHBldHMgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNlZSBpZiB0aGF0IGVhcmxpZXIgaW52ZXN0aWdhdGlvbiBwcm92aWRlcyBhIHVzZWZ1bCBzdGFydGluZyBwb2ludCBvciBjbHVlLiBUaGUgbWVudGFsIG1vZGVsIHNob3VsZCBhbHJlYWR5IGJlIHByaW1lZCwgc28gaXQncyBhIG1hdHRlciBvZiByZXRyaWV2aW5nIGFuZCByZS1ldmFsdWF0aW5nIHRoZSByZWxldmFuY2Ugbm93LiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0IHdpbGwgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MDMuNzQzNDg0MjYzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU5ODMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MTowMy43ODkwODk4NzlaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NTEwOTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3ltYm9sIFZhbGlkaXR5IGFuZCBJbmxpbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG10eXBlX2FkZGAgZnVuY3Rpb24uLi4gcmlnaHQsIGl0J3MgYSBtYWNybyBleHBhbmRpbmcgdG8gc29tZXRoaW5nIGxpa2UgYGhhc2hfbmV0NF9hZGRgLiBBbmQgc2luY2UgdGhlc2UgYGhhc2hfbmV0NF9hZGRgIHZhcmlhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGBtdHlwZV92YXJpYW50LmFkdFtJUFNFVF9BRERdYCwgdGhlIGNvbXBpbGVyICpoYXMqIHRvIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBmb3IgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGFkZHJlc3MtdGFrZW4uIFRoYXQgbWVhbnMgdGhleSdyZSB2YWxpZCBzeW1ib2xzIGZvciBtZSB0byBmb2N1cyBvbi4gRXhjZWxsZW50LlxuXG5Ob3csIHdoYXQgYWJvdXQgYG10eXBlX2FkZF9jaWRyYD8gQWgsIHRoYXQncyBqdXN0IGEgc2hvcnRoYW5kIGZvciBgaGFzaF9uZXQ0X2FkZF9jaWRyYC4gSXQncyBjYWxsZWQgYnkgYG10eXBlX2FkZGAgKHdoaWNoIHdlIGtub3cgaXMgYGhhc2hfbmV0NF9hZGRgKSBhbmQgYG10eXBlX3Jlc2l6ZWAuIElzICppdCogYWRkcmVzcy10YWtlbj8gTm9wZS4gT2theSwgc28gaW5saW5pbmcgaXMgdGhlIGNvbmNlcm4gaGVyZS4gSXQncyBgc3RhdGljYCwgc28gaXQgKmNvdWxkKiBiZSBpbmxpbmVkLiBJdCdzIGEgZGVjZW50bHkgc2l6ZWQgZnVuY3Rpb24gdGhvdWdoLCBzbyBwZXJoYXBzIG5vdC4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCBgaGFzaF9uZXQ0X2FkZGAgZGVmaW5pdGVseSAqaXNuJ3QqIGlubGluZWQgYmVjYXVzZSBpdCdzIGFkZHJlc3MtdGFrZW4uIFRoYXQncyBnb29kLCB0aGF0IG1lYW5zIGZvY3VzaW5nIG9uIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YCBpcyB0aGUgc2FmZXIgYmV0IHRvIGVuc3VyZSBzdGFiaWxpdHkuXG5cbkhhbmcgb24uLi4gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBgbXR5cGVfdGVzdF9jaWRyc2AgaXMgY2FsbGVkIGJ5IGBtdHlwZV90ZXN0YC4gQW5kIGBtdHlwZV90ZXN0YCBpcywgaW4gZmFjdCwgYGhhc2hfbmV0NF90ZXN0YC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGBtdHlwZV90ZXN0YCBmb3IgYSBtb21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDQ3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjEwLjAzNDIwMjM5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE1OTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV90ZXN0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzODc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTM4ODptdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzg5LVxcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjEwLjA3OTM2NzQzNVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njk1MTk3ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFzaCBUYWJsZSBNb2R1bGUncyBUZXN0IGFuZCBGbHVzaCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgbXR5cGVfdGVzdGAgKmlzKiBhY3R1YWxseSBgaGFzaF9uZXQ0X3Rlc3RgLiBHb29kLCB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlIHRoZXJlLiBOb3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gbGlzdCB0aGVtIG91dCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSB3aG9sZSBwaWN0dXJlOlxuKiAgIEFsbCB0aGUgYGhhc2hfbmV0NGAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldDZgIHZhcmlhbnRzXG4qICAgQWxsIHRoZSBgaGFzaF9uZXRwb3J0NGAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnQ2YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0aWZhY2U0YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0aWZhY2U2YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0bmV0NGAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldG5ldDZgIHZhcmlhbnRzXG4qICAgQWxsIHRoZSBgaGFzaF9pcHBvcnRuZXQ0YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfaXBwb3J0bmV0NmAgdmFyaWFudHNcbiogICBBbGwgdGhlIGBoYXNoX25ldHBvcnRuZXQ0YCB2YXJpYW50c1xuKiAgIEFsbCB0aGUgYGhhc2hfbmV0cG9ydG5ldDZgIHZhcmlhbnRzXG5cblRoaXMgbG9va3MgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBzZXQgb2YgaGFzaCB0YWJsZSBvcGVyYXRpb25zOiBhZGQsIGRlbGV0ZSwgdGVzdCwgYW5kIGZsdXNoLiBUaGUgdmFyaWF0aW9ucyBzZWVtIHRvIGluZGljYXRlIGRpZmZlcmVudCBrZXkgdHlwZXM6IGBuZXQ0YCwgYG5ldDZgLCBgcG9ydGAsIGBpZmFjZWAsIGBuZXRuZXRgLCBhbmQgYGlwcG9ydG5ldGAsIHByb2JhYmx5IHJlbGF0aW5nIHRvIElQdjQsIElQdjYsIHBvcnQgbnVtYmVycywgbmV0d29yayBpbnRlcmZhY2VzLCBhbmQgY29tYmluYXRpb25zIG9mIHRoZXNlLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5XYWl0IGEgc2Vjb25kLi4uICphbHNvKiBgbXR5cGVfZmx1c2hgIGlzIGEgbWFjcm8/IEludGVyZXN0aW5nLiBUaGF0IG1heSBhZmZlY3QgaG93IHRoaXMgd29ya3MsIGF0IGxlYXN0IHRoZSBtYWNybyBleHBhbnNpb24gb2YgdGhlIGNvZGUuIFRoaXMgbWVhbnMgSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgbWFjcm8gZnVydGhlciB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBpbmRpdmlkdWFsIGBmbHVzaGAgZnVuY3Rpb25zIGxpc3RlZCBhYm92ZS4gVGhpcyByZXF1aXJlcyBjbG9zZXIgZXhhbWluYXRpb24gb2YgdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg3MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MToxNi43NzQ1Njg0NFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1OTQxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBtdHlwZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjcxLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI3MjojZGVmaW5lIG10eXBlX2ZsdXNoXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9mbHVzaClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI3My0jZGVmaW5lIG10eXBlX2Rlc3Ryb3lcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2Rlc3Ryb3kpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjE2LjgyMzE2NzU3NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQxNjA4NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIElQIFNldCBIYXNoIE5ldCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZ1enppbmcgdGhlIGBoYXNoX25ldDRfZmx1c2hgIGZ1bmN0aW9uIGFuZCBzaW1pbGFyIHJvdXRpbmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIG90aGVyIGNydWNpYWwgZW50cnkgcG9pbnRzLiBMZXQncyBzZWUgaWYgYGhhc2hfbmV0NF91YWR0YCBhbmQgYGhhc2hfbmV0NF9rYWR0YCBhcmUgYWxzbyBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIE1ha2VzIHNlbnNlIOKAkyB0aG9zZSBhcmUgdGhlIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSBlbnRyeSBwb2ludHMsIHJlc3BlY3RpdmVseS4gSG1tLCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBtdHlwZV91YWR0YCBhbmQgYG10eXBlX2thZHRgIHJlZmVyZW5jZXMsIHNpbmNlIHRoZXkgYXJlbid0IGRpcmVjdGx5IGRlZmluZWQgYXMgbWFjcm9zIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIEFoYSEgV2FpdCBhIHNlY29uZC4uLiBJIHNlZSBpdCBub3cuIGBtdHlwZV91YWR0YCAqaXMqIGFjdHVhbGx5IGBoYXNoX25ldDRfdWFkdGAgdW5kZXIgdGhlIGhvb2QuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBzd2l0Y2ggZ2VhcnMgYW5kIGNvbnN1bHQgYGlwX3NldF9oYXNoX25ldC5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDQwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUxOjIwLjc2NDc4MDQwNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NzU0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaF9uZXQ0X3VhZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEzNT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMzY6aGFzaF9uZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTM3LVxcdCAgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MjAuODExNzY0MTlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2ODIzMzYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0IG9uIHRoZSBpcF9zZXRfaGFzaCBDb2RlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgaGFzaF9uZXQ0X3VhZHRgIGlzIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgaXBfc2V0X2hhc2hfbmV0LmNgLiBCdXQgdGhpcyBwYXRjaCB0b3VjaGVzIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGFuZCBgbXR5cGVfdGVzdF9jaWRyc2AgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGJ5IHRoZSBjb3JlIGBtdHlwZV9hZGRgLCBgbXR5cGVfZGVsYCwgYG10eXBlX2ZsdXNoYCwgYW5kIGBtdHlwZV90ZXN0YCBvcGVyYXRpb25zLiBUaGVyZWZvcmUsIHRoZSBtb3N0IGVmZmljaWVudCBwYXRoIHRvIGNvbmZpcm0gdGhlIHBhdGNoJ3MgY2hhbmdlcyBpbnZvbHZlcyBkaXJlY3RseSBleGFtaW5pbmcgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfZmx1c2hgLCBhbmQgYGhhc2hfbmV0NF90ZXN0YC5cblxuTGV0J3MgbWFrZSBzdXJlIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGlzIGFjdHVhbGx5IGNhbGxpbmcgYGhhc2hfbmV0NF9hZGRfY2lkcmAuIExvb2tpbmcgYXQgYGlwX3NldF9oYXNoX2dlbi5oYCwgSSBzZWU6XG5cbmBgYGNcbnN0YXRpYyBpbnRcbm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG57XG4uLi5cbiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcblx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXG5cdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG4jZW5kaWZcbi4uLlxufVxuYGBgXG5cblllcywgaXQgZG9lcy4gRXhjZWxsZW50LlxuXG5Ob3csIGhvbGQgb24uIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBpcF9zZXRfaGFzaF9uZXRpZmFjZS5jYCBhbmQgYGlwX3NldF9oYXNoX25ldHBvcnRuZXQuY2AgYnkgcmVtb3ZpbmcgYCNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVQwYC4gVGltZSB0byBjaGVjayB3aGF0IGBJUF9TRVRfSEFTSF9XSVRIX05FVDBgIHdhcyBkb2luZy4gVGhpcyBpcyBhbm90aGVyIGFyZWEgdG8gZXhhbWluZSBhcyBwYXJ0IG9mIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MjYuMTgwMDAwNTAzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQwNjAxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfU0VUX0hBU0hfV0lUSF9ORVQwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MToyNi4yMjY0MTI4NThaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNzI0Njg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvZGUgQ2hhbmdlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBvcmlnaW5hbCBjb2RlIGVsZW1lbnQgaXMgZ29uZSwgdGhhbmtzIHRvIHRoZSByZWNlbnQgcGF0Y2guIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIHdoaWNoIEknZCBjb25maXJtZWQgd2hlbiByZXZpZXdpbmcgdGhlIHBhdGNoIGluaXRpYWxseS4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEJlZm9yZSBJIG1vdmUgb24gd2l0aCBteSBvd24gd29yaywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgKmNvbXBsZXRlbHkqIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBpdCdzIHNvbWVob3cgbGluZ2VyZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gSXQgd291bGRuJ3QgYmUgdGhlIGZpcnN0IHRpbWUgSSd2ZSBlbmNvdW50ZXJlZCBhIHNlZW1pbmdseSBjbGVhbiByZW1vdmFsIHRoYXQgbGVmdCBjcnVmdCBiZWhpbmQsIG9yIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiByZWZhY3RvcmVkIGFuZCBtb3ZlZC4gQSBxdWljayBpbnNwZWN0aW9uIG9mIHRoYXQgaGVhZGVyIGZpbGUgaXMgd2FycmFudGVkLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNyaXRpY2FsIG5ldHdvcmtpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MzYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MToyOS45NjM2NjI3NThaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODczMjI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9TRVRfSEFTSF9XSVRIX05FVDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6MzAuMDA5NTQ1OTMzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjM2ODUxNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ29uZmlndXJhdGlvbiBhbmQgQW5hbHlzaXMgZm9yIGlwX3NldCBDb25jdXJyZW5jeSBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYSBjcnVjaWFsIGNoYW5nZSB3YXMgbWFkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgYSBtYWNybywgYElQX1NFVF9IQVNIX1dJVEhfTkVUMGAsIHdhcyByZW1vdmVkIGZyb20gYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gIFRoYXQgaW5kaWNhdGVzIHNvbWUga2luZCBvZiByZWZhY3RvcmluZyBvciBwZXJoYXBzIHJlbW92YWwgb2YgYW4gb2Jzb2xldGUgZmVhdHVyZS5cblxuVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHNlcWNvdW50X3NwaW5sb2NrX3Qgc2VxYCB0byBgc3RydWN0IG5ldF9wcmVmaXhlc2AuICBUaGlzLCBjb3VwbGVkIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZmx1c2hgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIHRoZSBgc2VxY291bnRgIG1lY2hhbmlzbSwgc3Ryb25nbHkgc3VnZ2VzdHMgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHRhcmdldGluZyBsb2NrbGVzcyByZWFkZXJzLiBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIGV4ZXJjaXNpbmcgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGJ1aWxkIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyB0byBnZXQgdGhlbSBlbmFibGVkLiBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6XG5cbiogICBgSVBfU0VUYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVFBPUlRgXG4qICAgYElQX1NFVF9IQVNIX05FVElGQUNFYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRORVRgXG4qICAgYElQX1NFVF9IQVNIX0lQUE9SVE5FVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGBcblxuVGhlIGJhc2UgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGBJUF9TRVRgIHNlZW0gdG8gYmUgdGhlIHN0YW5kYXJkIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgc2V0dGluZ3MsIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGZ1eno6XG5cbkJhc2VkIG9uIHRoZSBjb2RlLCB0aGUga2V5IGZ1bmN0aW9uIHBhaXJzIGZvciBmdXp6aW5nIGFyZTpcbiogICBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9mbHVzaGBcbiogICBgaGFzaF9uZXQ2X2FkZGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfbmV0Nl90ZXN0YCwgYGhhc2hfbmV0Nl9mbHVzaGBcbiogICBgaGFzaF9uZXRwb3J0NF9hZGRgLCBgaGFzaF9uZXRwb3J0NF9kZWxgLCBgaGFzaF9uZXRwb3J0NF90ZXN0YCwgYGhhc2hfbmV0cG9ydDRfZmx1c2hgXG4qICAgYGhhc2hfbmV0cG9ydDZfYWRkYCwgYGhhc2hfbmV0cG9ydDZfZGVsYCwgYGhhc2hfbmV0cG9ydDZfdGVzdGAsIGBoYXNoX25ldHBvcnQ2X2ZsdXNoYFxuKiAgIGBoYXNoX25ldGlmYWNlNF9hZGRgLCBgaGFzaF9uZXRpZmFjZTRfZGVsYCwgYGhhc2hfbmV0aWZhY2U0X3Rlc3RgLCBgaGFzaF9uZXRpZmFjZTRfZmx1c2hgXG4qICAgYGhhc2hfbmV0aWZhY2U2X2FkZGAsIGBoYXNoX25ldGlmYWNlNl9kZWxgLCBgaGFzaF9uZXRpZmFjZTZfdGVzdGAsIGBoYXNoX25ldGlmYWNlNl9mbHVzaGBcbiogICBgaGFzaF9uZXRuZXQ0X2FkZGAsIGBoYXNoX25ldG5ldDRfZGVsYCwgYGhhc2hfbmV0bmV0NF90ZXN0YCwgYGhhc2hfbmV0bmV0NF9mbHVzaGBcbiogICBgaGFzaF9uZXRuZXQ2X2FkZGAsIGBoYXNoX25ldG5ldDZfZGVsYCwgYGhhc2hfbmV0bmV0Nl90ZXN0YCwgYGhhc2hfbmV0bmV0Nl9mbHVzaGBcbiogICBgaGFzaF9pcHBvcnRuZXQ0X2FkZGAsIGBoYXNoX2lwcG9ydG5ldDRfZGVsYCwgYGhhc2hfaXBwb3J0bmV0NF90ZXN0YCwgYGhhc2hfaXBwb3J0bmV0NF9mbHVzaGBcbiogICBgaGFzaF9pcHBvcnRuZXQ2X2FkZGAsIGBoYXNoX2lwcG9ydG5ldDZfZGVsYCwgYGhhc2hfaXBwb3J0bmV0Nl90ZXN0YCwgYGhhc2hfaXBwb3J0bmV0Nl9mbHVzaGBcbiogICBgaGFzaF9uZXRwb3J0bmV0NF9hZGRgLCBgaGFzaF9uZXRwb3J0bmV0NF9kZWxgLCBgaGFzaF9uZXRwb3J0bmV0NF90ZXN0YCwgYGhhc2hfbmV0cG9ydG5ldDRfZmx1c2hgXG4qICAgYGhhc2hfbmV0cG9ydG5ldDZfYWRkYCwgYGhhc2hfbmV0cG9ydG5ldDZfZGVsYCwgYGhhc2hfbmV0cG9ydG5ldDZfdGVzdGAsIGBoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoYFxuXG5JIHdpbGwgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgbWFuaXB1bGF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCwgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBgc2VxY291bnRgLiBUaGUgdW5kZXJseWluZyB1c2Ugb2YgQ0lEUnMgZm9yIG5ldHdvcmsgcHJlZml4ZXMgYWxzbyB3YXJyYW50cyBzcGVjaWFsIGF0dGVudGlvbi4gU28gdGhpcyBpcyB3aGF0IEknbSBnb2luZyB0byBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzAzLCJPdXRwdXRUb2tlbnMiOjcwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTE6NDYuNjQ2NDAwNzkyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2NTMxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfZGVsXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfYWRkXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9kZWxcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2ZsdXNoXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwcG9ydG5ldDZfdGVzdFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGlwc2V0IGhhc2ggdHlwZXMgdGhhdCB1c2UgbmV0d29yayBwcmVmaXhlcyAoQ0lEUikgYnkgaW50cm9kdWNpbmcgYSBzZXFjb3VudCB0byBndWFyZCBpbi1wbGFjZSByZW9yZGVyaW5nIG9mIHRoZSBwcmVmaXhlcyBhcnJheS4gVGhpcyBhZmZlY3RzIHRoZSBhZGQsIGRlbCwgdGVzdCwgYW5kIGZsdXNoIG9wZXJhdGlvbnMgZm9yIHNldmVyYWwgaGFzaCB0eXBlcyAobmV0LCBuZXRwb3J0LCBuZXRpZmFjZSwgbmV0bmV0LCBpcHBvcnRuZXQsIG5ldHBvcnRuZXQpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChuZXRmaWx0ZXIgaXBzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2xlc3MgcmVhZGVyIGxvZ2ljIGFuZCBhcnJheSBzaGlmdGluZyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFzaF9uZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnQ2X2ZsdXNoXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNF9hZGRcIixcbiAgICBcImhhc2hfbmV0aWZhY2U0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0aWZhY2U2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRpZmFjZTZfZGVsXCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldGlmYWNlNl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0bmV0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9pcHBvcnRuZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfaXBwb3J0bmV0Nl9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0cG9ydG5ldDZfYWRkXCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0bmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldHBvcnRuZXQ2X2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBpcHNldCBoYXNoIHR5cGVzIHRoYXQgdXNlIG5ldHdvcmsgcHJlZml4ZXMgKENJRFIpIGJ5IGludHJvZHVjaW5nIGEgc2VxY291bnQgdG8gZ3VhcmQgaW4tcGxhY2UgcmVvcmRlcmluZyBvZiB0aGUgcHJlZml4ZXMgYXJyYXkuIFRoaXMgYWZmZWN0cyB0aGUgYWRkLCBkZWwsIHRlc3QsIGFuZCBmbHVzaCBvcGVyYXRpb25zIGZvciBzZXZlcmFsIGhhc2ggdHlwZXMgKG5ldCwgbmV0cG9ydCwgbmV0aWZhY2UsIG5ldG5ldCwgaXBwb3J0bmV0LCBuZXRwb3J0bmV0KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAobmV0ZmlsdGVyIGlwc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tsZXNzIHJlYWRlciBsb2dpYyBhbmQgYXJyYXkgc2hpZnRpbmcgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[1] Phase: Succeeded StartedAt: 2026-08-07 00:51:57 +0000 UTC FinishedAt: 2026-08-07 00:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 00:51:57 +0000 UTC FinishedAt: 2026-08-07 00:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2] Phase: Succeeded StartedAt: 2026-08-07 00:51:57 +0000 UTC FinishedAt: 2026-08-07 04:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 00:51:57 +0000 UTC FinishedAt: 2026-08-07 04:36:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 00:51:57 +0000 UTC FinishedAt: 2026-08-07 00:52:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 00:51:57 +0000 UTC FinishedAt: 2026-08-07 00:52:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowjmcmv/series-workflowjmcmv-convert-artifact-462022523/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 00:52:07 +0000 UTC FinishedAt: 2026-08-07 01:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 00:52:07 +0000 UTC FinishedAt: 2026-08-07 01:09:09 +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:*6994968a-aa53-4bac-b23b-3d78def0ecf1,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-workflowjmcmv/series-workflowjmcmv-convert-artifact-462022523/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": "d38e95fc-a0d7-4cff-91de-3c40d4fa75ef", "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-workflowjmcmv/series-workflowjmcmv-build-action-797742777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 00:52:07 +0000 UTC FinishedAt: 2026-08-07 01:08:59 +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:*6994968a-aa53-4bac-b23b-3d78def0ecf1,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-workflowjmcmv/series-workflowjmcmv-convert-artifact-462022523/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": "d38e95fc-a0d7-4cff-91de-3c40d4fa75ef", "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-workflowjmcmv/series-workflowjmcmv-build-action-797742777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 01:09:09 +0000 UTC FinishedAt: 2026-08-07 01:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 01:09:09 +0000 UTC FinishedAt: 2026-08-07 01:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 01:09:09 +0000 UTC FinishedAt: 2026-08-07 01:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 01:09:09 +0000 UTC FinishedAt: 2026-08-07 01:09:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowjmcmv/series-workflowjmcmv-convert-artifact-3236066514/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 01:09:20 +0000 UTC FinishedAt: 2026-08-07 01:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 01:09:20 +0000 UTC FinishedAt: 2026-08-07 01:11:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d38e95fc-a0d7-4cff-91de-3c40d4fa75ef,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-workflowjmcmv/series-workflowjmcmv-build-action-797742777/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-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 01:11:25 +0000 UTC FinishedAt: 2026-08-07 01:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 01:11:25 +0000 UTC FinishedAt: 2026-08-07 01:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 01:11:25 +0000 UTC FinishedAt: 2026-08-07 01:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 01:11:25 +0000 UTC FinishedAt: 2026-08-07 01:31:23 +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:*6994968a-aa53-4bac-b23b-3d78def0ecf1,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-workflowjmcmv/series-workflowjmcmv-convert-artifact-3236066514/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": "b9052f1c-9620-44a8-aea4-1bacdbef5697", "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-workflowjmcmv/series-workflowjmcmv-build-action-88142694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 01:11:25 +0000 UTC FinishedAt: 2026-08-07 01:31:13 +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:*6994968a-aa53-4bac-b23b-3d78def0ecf1,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-workflowjmcmv/series-workflowjmcmv-convert-artifact-3236066514/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": "b9052f1c-9620-44a8-aea4-1bacdbef5697", "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-workflowjmcmv/series-workflowjmcmv-build-action-88142694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 01:31:23 +0000 UTC FinishedAt: 2026-08-07 01:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 01:31:23 +0000 UTC FinishedAt: 2026-08-07 01:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 01:31:23 +0000 UTC FinishedAt: 2026-08-07 01:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 01:31:23 +0000 UTC FinishedAt: 2026-08-07 01:33:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9052f1c-9620-44a8-aea4-1bacdbef5697,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-build-action-88142694/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-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 04:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 04:36:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d38e95fc-a0d7-4cff-91de-3c40d4fa75ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9052f1c-9620-44a8-aea4-1bacdbef5697,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-build-action-797742777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-build-action-88142694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 01:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 01:33:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-convert-artifact-3954425895/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 01:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 01:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 01:33:27 +0000 UTC FinishedAt: 2026-08-07 01:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 01:33:47 +0000 UTC FinishedAt: 2026-08-07 04:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmcmv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_flush","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_flush","hash_netport4_add","hash_netport4_del","hash_netport4_test","hash_netport4_flush","hash_netport6_add","hash_netport6_del","hash_netport6_test","hash_netport6_flush","hash_netiface4_add","hash_netiface4_del","hash_netiface4_test","hash_netiface4_flush","hash_netiface6_add","hash_netiface6_del","hash_netiface6_test","hash_netiface6_flush","hash_netnet4_add","hash_netnet4_del","hash_netnet4_test","hash_netnet4_flush","hash_netnet6_add","hash_netnet6_del","hash_netnet6_test","hash_netnet6_flush","hash_ipportnet4_add","hash_ipportnet4_del","hash_ipportnet4_test","hash_ipportnet4_flush","hash_ipportnet6_add","hash_ipportnet6_del","hash_ipportnet6_test","hash_ipportnet6_flush","hash_netportnet4_add","hash_netportnet4_del","hash_netportnet4_test","hash_netportnet4_flush","hash_netportnet6_add","hash_netportnet6_del","hash_netportnet6_test","hash_netportnet6_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"ca99eedb-67ba-4856-beb2-69efec574e33","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 01:33:47 +0000 UTC FinishedAt: 2026-08-07 04:36:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d38e95fc-a0d7-4cff-91de-3c40d4fa75ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9052f1c-9620-44a8-aea4-1bacdbef5697,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-build-action-797742777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-build-action-88142694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjmcmv/series-workflowjmcmv-convert-artifact-3954425895/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}