Name: series-workflowwr9nn Phase: Succeeded StartedAt: 2026-09-06 05:02:01 +0000 UTC FinishedAt: 2026-09-06 06:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[0] Phase: Succeeded StartedAt: 2026-09-06 05:02:01 +0000 UTC FinishedAt: 2026-09-06 05:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 05:02:01 +0000 UTC FinishedAt: 2026-09-06 05:25:49 +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": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT", "NETFILTER", "NETFILTER_XT_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT", "NETFILTER", "NETFILTER_XT_SET" ], "series_id": "a38ada7e-71dd-4b01-ac04-41235b1744df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bitmap_ip_add", "bitmap_ipmac_add", "bitmap_port_add", "bitmap_ip_kadt", "bitmap_ipmac_kadt", "bitmap_port_kadt", "bitmap_ip_uadt", "bitmap_ipmac_uadt", "bitmap_port_uadt", "ip_set_init_comment" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVBNQUMmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9QT1JUJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Yml0bWFwX2lwX2FkZCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBtYWNfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X2FkZCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBfa2FkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBtYWNfa2FkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfcG9ydF9rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcF91YWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY191YWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X3VhZHQmIzM0OywKICAgICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYG10eXBlX2FkZCgpYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCB0byBjaGVjayBgIWV4dC1cdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cblxuLSBBbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYXJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgSVBfU0VUX0lOSVRfS0VYVGAgb3IgYElQX1NFVF9JTklUX1VFWFRgKSwgd2hpY2ggZnVsbHkgemVybyBhbGwgdW5tZW50aW9uZWQgZmllbGRzLCBlbnN1cmluZyBgZXh0LVx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlIGVtaXNzaW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBUaGUgYnVnIGZpeGVkIGlzIGEgbG9naWMgaXNzdWUgKHVuaW50ZW5kZWQgY29tbWVudCBkZWxldGlvbiBkdXJpbmcga2VybmVsLXNwYWNlIHBhY2tldCBtYXRjaGluZy90YXJnZXQgZXhlY3V0aW9uKS5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtdHlwZV9hZGQoKSBpbiBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggdG8gYXZvaWQgY2FsbGluZyBpcF9zZXRfaW5pdF9jb21tZW50KCkgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgdmlhIGtlcm5lbC1zaWRlIG5ldGZpbHRlciBwYWNrZXQgcGF0aHMgKHdoZXJlIGV4dC1cdTAwM2V0YXJnZXQgaXMgdHJ1ZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIGlwc2V0IGJpdG1hcCB0eXBlcyAoYml0bWFwOmlwLCBiaXRtYXA6aXAsbWFjLCBiaXRtYXA6cG9ydCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGV4dGVuc2lvbiBoYW5kbGluZyBhbmQgY29tbWVudCBsaWZlY3ljbGUgcmVtYWluIHNvdW5kIGFjcm9zcyB1c2Vyc3BhY2UgbmV0bGluayBhbmQgcGFja2V0LXByb2Nlc3NpbmcgZXhlY3V0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU3MDllYmM5MjU1Yjk5YmQ5M2FlOTNiYjk2M2IxYmIxMDg5MDBhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MjI6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5pbmRleCBkNmE3ZTY2MDQ1NDIyLi5hZTM3NmZhM2U3YTNiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcbkBAIC0xNTksNyAmIzQzOzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFxuIFx0aWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSlcbiBcdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpO1xuLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbiYjNDM7XHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbiBcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XG4gXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuIFx0XHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKHgsIHNldCksIGV4dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaXRtYXBfaXBfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcF9rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfdWFkdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG10eXBlX2FkZCgpIGluIG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCB0byBhdm9pZCBjYWxsaW5nIGlwX3NldF9pbml0X2NvbW1lbnQoKSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCB2aWEga2VybmVsLXNpZGUgbmV0ZmlsdGVyIHBhY2tldCBwYXRocyAod2hlcmUgZXh0LVx1MDAzZXRhcmdldCBpcyB0cnVlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgaXBzZXQgYml0bWFwIHR5cGVzIChiaXRtYXA6aXAsIGJpdG1hcDppcCxtYWMsIGJpdG1hcDpwb3J0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgZXh0ZW5zaW9uIGhhbmRsaW5nIGFuZCBjb21tZW50IGxpZmVjeWNsZSByZW1haW4gc291bmQgYWNyb3NzIHVzZXJzcGFjZSBuZXRsaW5rIGFuZCBwYWNrZXQtcHJvY2Vzc2luZyBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTcwOWViYzkyNTViOTliZDkzYWU5M2JiOTYzYjFiYjEwODkwMGE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNToyMjoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaAppbmRleCBkNmE3ZTY2MDQ1NDIyLi5hZTM3NmZhM2U3YTNiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCkBAIC0xNTksNyAmIzQzOzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCiAJaWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSkKIAkJaXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpOwotCWlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkpCiYjNDM7CWlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgJmFtcDsmYW1wOyAhZXh0LSZndDt0YXJnZXQpCiAJCWlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpOwogCWlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpCiAJCWlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwX3NldF9iaXRtYXBfZ2VuLmggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgcGF0Y2guIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyB3aXRoaW4gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgZXh0ZW5zaW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBpcHNldGAgZnJhbWV3b3JrLiBUaGUgZGlmZiBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGNvbW1lbnRzLiBUaGUgb3JpZ2luYWwgY29kZSBpbmNsdWRlZCBhIGNvbW1lbnQgaW5pdGlhbGl6YXRpb24gaWYgYFNFVF9XSVRIX0NPTU1FTlQoc2V0KWAgd2FzIHRydWUuIFRoZSBtb2RpZmllZCBjb2RlIGludHJvZHVjZXMgYW4gYWRkaXRpb25hbCBjaGVjazogYCFleHQtJmd0O3RhcmdldGAuIFRoYXQgc3VnZ2VzdHMgYSB2ZXJ5IHNwZWNpZmljIHVzZS1jYXNlIGlzIGJlaW5nIGFkZHJlc3NlZCBvciBhIGJ1ZyBpcyBiZWluZyBmaXhlZCByZWxhdGVkIHRvIGhvdyBjb21tZW50cyBhcmUgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgYHRhcmdldGAgZXh0ZW5zaW9uIGZpZWxkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvbW1lbnQgZmllbGQsIGFuZCBhIHRhcmdldCBmaWVsZC4KCk5vdywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGlzIGhlYWRlciBpcyBpbmNsdWRlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW5jbHVzaW9uIHBvaW50cyBvZiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIGxvb2sgYXQgaXRzIGRlcGVuZGVuY2llcywgZmluZCBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXRzIG9wZXJhdGlvbiwgYW5kIHplcm8gaW4gb24gYW55IGtleSBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgdGhlIGZvY3VzIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGBTRVRfV0lUSF9DT01NRU5UYCwgYGV4dC0mZ3Q7dGFyZ2V0YCwgYW5kIGBpcF9zZXRfaW5pdF9jb21tZW50YCBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIHVzZWQsIHdoaWNoIGlzIHByb2JhYmx5IHdoZXJlIHRoaXMgY2hhbmdlIGJlY29tZXMgaW1wb3J0YW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGVkIGNvZGUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gaW5mZXIgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2UgYW5kIGFzc2VzcyBpdHMgaW1wYWN0IG1vcmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X2JpdG1hcF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0yMDg9c3RydWN0IGJpdG1hcF9pcF9lbGVtIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0yMTAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzoyMTE6I2luY2x1ZGUgXCYjMzQ7aXBfc2V0X2JpdG1hcF9nZW4uaFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMjEyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTI4Mj1iaXRtYXBfaXBtYWNfc2FtZV9zZXQoY29uc3Qgc3RydWN0IGlwX3NldCAqYSwgY29uc3Qgc3RydWN0IGlwX3NldCAqYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yOTQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyOTU6I2luY2x1ZGUgXCYjMzQ7aXBfc2V0X2JpdG1hcF9nZW4uaFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjk2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MjIzPXN0cnVjdCBiaXRtYXBfcG9ydF9lbGVtIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTIyNS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6MjI2OiNpbmNsdWRlIFwmIzM0O2lwX3NldF9iaXRtYXBfZ2VuLmhcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMjI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgR2VuZXJhdGlvbiBpbiBgaXBzZXRgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGhlYWRlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE1OS4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aCB0aGUgY29yZSBiaXRtYXAgbG9naWMgYW5kIGdlbmVyYXRpb24gd2l0aGluIHRoZSBgaXBzZXRgIGZyYW1ld29yaywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgYml0bWFwcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGZvciB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGJpdCB2ZWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIGFueSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9ucy4gVGhpcyBjb3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIGhvdyB0aGV5IGhhbmRsZSBhbGlnbm1lbnQsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIHNwZWNpZmljIGJpdHdpc2Ugb3BlcmF0aW9ucyB1c2VkIGZvciBzZXQvY2xlYXIgYW5kIGxvb2t1cCBvcGVyYXRpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBwb2ludHMgdGhlcmUsIGdpdmVuIGl0JiMzOTtzIHNoYXJlZCBzdGF0ZS4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCB0cmFuc2xhdGVzIHRvIHJlYWwgd29ybGQgdGhyb3VnaHB1dCB1bmRlciBoZWF2eSBsb2FkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb2Ygbm92ZWwgYWxnb3JpdGhtcyBvciBjbGV2ZXIgdXNlcyBvZiBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0ICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQoeCwgc2V0KSkpIHtcbiAxNDE6XHRcdFx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbiAxNDI6XHRcdFx0XHRyZXQgPSAwO1xuIDE0MzpcdFx0XHR9IGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfRVhJU1QpKSB7XG4gMTQ0Olx0XHRcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTQ1Olx0XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XG4gMTQ2Olx0XHRcdH1cbiAxNDc6XHRcdFx0LyogRWxlbWVudCBpcyByZS1hZGRlZCwgY2xlYW51cCBleHRlbnNpb25zICovXG4gMTQ4Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xuIDE0OTpcdFx0fVxuIDE1MDpcdFx0aWYgKHJldCBcdTAwM2UgMClcbiAxNTE6XHRcdFx0c2V0LVx1MDAzZWVsZW1lbnRzLS07XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxuIDE1NDpcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG4gMTU1Olx0XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG4gMTU2Olx0I2Vsc2VcbiAxNTc6XHRcdFx0aXBfc2V0X3RpbWVvdXRfc2V0KGV4dF90aW1lb3V0KHgsIHNldCksIGV4dC1cdTAwM2V0aW1lb3V0KTtcbiAxNTg6XHQjZW5kaWZcbiAxNTk6XHRcbiAxNjA6XHRcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXG4gMTYxOlx0XHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcbiAxNjI6XHRcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIDE2MzpcdFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiAxNjQ6XHRcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gMTY1Olx0XHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiAxNjY6XHRcbiAxNjc6XHRcdC8qIEFjdGl2YXRlIGVsZW1lbnQgKi9cbiAxNjg6XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIDE2OTpcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTcwOlx0XHRzZXQtXHUwMDNlZWxlbWVudHMmIzQzOyYjNDM7O1xuIDE3MTpcdFxuIDE3MjpcdFx0cmV0dXJuIDA7XG4gMTczOlx0fVxuIDE3NDpcdFxuIDE3NTpcdHN0YXRpYyBpbnRcbiAxNzY6XHRtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAxNzc6XHRcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAxNzg6XHR7XG4gMTc5Olx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDE4MDpcdFx0Y29uc3Qgc3RydWN0IG10eXBlX2FkdF9lbGVtICplID0gdmFsdWU7XG4gMTgxOlx0XHR2b2lkICp4ID0gZ2V0X2V4dChzZXQsIG1hcCwgZS1cdTAwM2VpZCk7XG4gMTgyOlx0XG4gMTgzOlx0XHRpZiAobXR5cGVfZG9fZGVsKGUsIG1hcCkpXG4gMTg0Olx0XHRcdHJldHVybiAtSVBTRVRfRVJSX0VYSVNUO1xuIDE4NTpcdFxuIDE4NjpcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XG4gMTg3Olx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbiAxODg6XHRcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXHUwMDI2XHUwMDI2XG4gMTg5Olx0XHQgICAgaXBfc2V0X3RpbWVvdXRfZXhwaXJlZChleHRfdGltZW91dCh4LCBzZXQpKSlcbiAxOTA6XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XG4gMTkxOlx0XG4gMTkyOlx0XHRyZXR1cm4gMDtcbiAxOTM6XHR9XG4gMTk0Olx0XG4gMTk1Olx0I2lmbmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG4gMTk2Olx0c3RhdGljIGJvb2xcbiAxOTc6XHRtdHlwZV9pc19maWxsZWQoY29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKngpXG4gMTk4Olx0e1xuIDE5OTpcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgSVAgU2V0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiaXRtYXAgSVAgc2V0cyBmdW5jdGlvbiB1bmRlciB0aGUgaG9vZCwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBzeW1ib2wgZ2VuZXJhdGlvbiBhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBzZXQgdHlwZXMuIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gc2VlIGV4YWN0bHkgd2hhdCBgbXR5cGVfYWRkYCBpcyBkb2luZyBhbmQgaG93IHRoZSBgbXR5cGVgIG1hY3JvIGdlbmVyYXRlcyB0aGUgc3ltYm9scy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBiaXRtYXAgaW1wbGVtZW50YXRpb25zIGZvciBgYml0bWFwOmlwYCwgYGJpdG1hcDppcCxtYWNgLCBhbmQgYGJpdG1hcDpwb3J0YCBhcmUgaGFuZGxlZCDigJMgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgYml0cyBhcmUgbWFuYWdlZC4gVGhlbiwgSSYjMzk7bGwgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBleGFtaW5pbmcgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCB0byBzZWUgdGhlIG51YW5jZXMgYW5kIGRpZmZlcmVuY2VzIGluIGhvdyB0aGVzZSB2YXJpb3VzIHNldCB0eXBlcyBhY3R1YWxseSBzdG9yZSBhbmQgbWFuaXB1bGF0ZSB0aGUgZGF0YS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGludGVyZXN0aW5nIHZhcmlhdGlvbnMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHQgICAgICAgeC1cdTAwM2VsYXN0X2lwID09IHktXHUwMDNlbGFzdF9pcCBcdTAwMjZcdTAwMjZcbiAyMDE6XHRcdCAgICAgICB4LVx1MDAzZW5ldG1hc2sgPT0geS1cdTAwM2VuZXRtYXNrIFx1MDAyNlx1MDAyNlxuIDIwMjpcdFx0ICAgICAgIGEtXHUwMDNldGltZW91dCA9PSBiLVx1MDAzZXRpbWVvdXQgXHUwMDI2XHUwMDI2XG4gMjAzOlx0XHQgICAgICAgYS1cdTAwM2VleHRlbnNpb25zID09IGItXHUwMDNlZXh0ZW5zaW9ucztcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0LyogUGxhaW4gdmFyaWFudCAqL1xuIDIwNzpcdFxuIDIwODpcdHN0cnVjdCBiaXRtYXBfaXBfZWxlbSB7XG4gMjA5Olx0fTtcbiAyMTA6XHRcbiAyMTE6XHQjaW5jbHVkZSBcJiMzNDtpcF9zZXRfYml0bWFwX2dlbi5oXCYjMzQ7XG4gMjEyOlx0XG4gMjEzOlx0LyogQ3JlYXRlIGJpdG1hcDppcCB0eXBlIG9mIHNldHMgKi9cbiAyMTQ6XHRcbiAyMTU6XHRzdGF0aWMgYm9vbFxuIDIxNjpcdGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxuIDIxNzpcdFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXG4gMjE4Olx0XHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXG4gMjE5Olx0e1xuIDIyMDpcdFx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiAyMjE6XHRcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gMjIyOlx0XHRcdHJldHVybiBmYWxzZTtcbiAyMjM6XHRcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuIDIyNDpcdFx0bWFwLVx1MDAzZWxhc3RfaXAgPSBsYXN0X2lwO1xuIDIyNTpcdFx0bWFwLVx1MDAzZWVsZW1lbnRzID0gZWxlbWVudHM7XG4gMjI2Olx0XHRtYXAtXHUwMDNlaG9zdHMgPSBob3N0cztcbiAyMjc6XHRcdG1hcC1cdTAwM2VuZXRtYXNrID0gbmV0bWFzaztcbiAyMjg6XHRcdHNldC1cdTAwM2V0aW1lb3V0ID0gSVBTRVRfTk9fVElNRU9VVDtcbiAyMjk6XHRcbiAyMzA6XHRcdG1hcC1cdTAwM2VzZXQgPSBzZXQ7XG4gMjMxOlx0XHRzZXQtXHUwMDNlZGF0YSA9IG1hcDtcbiAyMzI6XHRcdHNldC1cdTAwM2VmYW1pbHkgPSBORlBST1RPX0lQVjQ7XG4gMjMzOlx0XG4gMjM0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAyMzU6XHR9XG4gMjM2Olx0XG4gMjM3Olx0c3RhdGljIHUzMlxuIDIzODpcdHJhbmdlX3RvX21hc2sodTMyIGZyb20sIHUzMiB0bywgdTggKmJpdHMpXG4gMjM5Olx0e1xuIDI0MDpcdFx0dTMyIG1hc2sgPSAweEZGRkZGRkZFO1xuIDI0MTpcdFxuIDI0MjpcdFx0KmJpdHMgPSAzMjtcbiAyNDM6XHRcdHdoaWxlICgtLSgqYml0cykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG1hc2sgXHUwMDI2XHUwMDI2ICh0byBcdTAwMjYgbWFzaykgIT0gZnJvbSlcbiAyNDQ6XHRcdFx0bWFzayBcdTAwM2NcdTAwM2M9IDE7XG4gMjQ1Olx0XG4gMjQ2Olx0XHRyZXR1cm4gbWFzaztcbiAyNDc6XHR9XG4gMjQ4Olx0XG4gMjQ5Olx0c3RhdGljIGludFxuIDI1MDpcdGJpdG1hcF9pcF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gMjUxOlx0XHRcdCB1MzIgZmxhZ3MpXG4gMjUyOlx0e1xuIDI1MzpcdFx0c3RydWN0IGJpdG1hcF9pcCAqbWFwO1xuIDI1NDpcdFx0dTMyIGZpcnN0X2lwID0gMCwgbGFzdF9pcCA9IDAsIGhvc3RzO1xuIDI1NTpcdFx0dTY0IGVsZW1lbnRzO1xuIDI1NjpcdFx0dTggbmV0bWFzayA9IDMyO1xuIDI1NzpcdFx0aW50IHJldDtcbiAyNTg6XHRcbiAyNTk6XHRcdGlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHxcbiAyNjA6XHRcdFx0ICAgICAhaXBfc2V0X29wdGF0dHJfbmV0b3JkZXIodGIsIElQU0VUX0FUVFJfVElNRU9VVCkgfHxcbiAyNjE6XHRcdFx0ICAgICAhaXBfc2V0X29wdGF0dHJfbmV0b3JkZXIodGIsIElQU0VUX0FUVFJfQ0FEVF9GTEFHUykpKVxuIDI2MjpcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9QUk9UT0NPTDtcbiAyNjM6XHRcbiAyNjQ6XHRcdHJldCA9IGlwX3NldF9nZXRfaG9zdGlwYWRkcjQodGJbSVBTRVRfQVRUUl9JUF0sIFx1MDAyNmZpcnN0X2lwKTtcbiAyNjU6XHRcdGlmIChyZXQpXG4gMjY2Olx0XHRcdHJldHVybiByZXQ7XG4gMjY3Olx0XG4gMjY4Olx0XHRpZiAodGJbSVBTRVRfQVRUUl9JUF9UT10pIHtcbiAyNjk6XHRcdFx0cmV0ID0gaXBfc2V0X2dldF9ob3N0aXBhZGRyNCh0YltJUFNFVF9BVFRSX0lQX1RPXSwgXHUwMDI2bGFzdF9pcCk7XG4gMjcwOlx0XHRcdGlmIChyZXQpXG4gMjcxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAyNzI6XHRcdFx0aWYgKGZpcnN0X2lwIFx1MDAzZSBsYXN0X2lwKVxuIDI3MzpcdFx0XHRcdHN3YXAoZmlyc3RfaXAsIGxhc3RfaXApO1xuIDI3NDpcdFx0fSBlbHNlIGlmICh0YltJUFNFVF9BVFRSX0NJRFJdKSB7XG4gMjc1Olx0XHRcdHU4IGNpZHIgPSBubGFfZ2V0X3U4KHRiW0lQU0VUX0FUVFJfQ0lEUl0pO1xuIDI3NjpcdFxuIDI3NzpcdFx0XHRpZiAoY2lkciBcdTAwM2U9IEhPU1RfTUFTSylcbiAyNzg6XHRcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9JTlZBTElEX0NJRFI7XG4gMjc5Olx0XHRcdGlwX3NldF9tYXNrX2Zyb21fdG8oZmlyc3RfaXAsIGxhc3RfaXAsIGNpZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEJpdG1hcCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGJpdG1hcC1iYXNlZCBJUCBzZXQgaW1wbGVtZW50YXRpb24gd29ya3MuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBtYWNybyBleHBhbnNpb24gcHJvY2VzcyB0aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhhdCBmaWxlLiBTZWVpbmcgaG93IHRoZSBtYWNyb3MgYXJlIGRlZmluZWQgd2lsbCBiZSBrZXkuIFRoZW4sIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhleSYjMzk7cmUgYmVpbmcgKnVzZWQqLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgaXBfc2V0X2JpdG1hcF9pcC5jYCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIgYW5kIHdoZXJlIHRoZSBleHBhbnNpb24gaXMgaGFwcGVuaW5nLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuICAgMjpcdC8qIENvcHlyaWdodCAoQykgMjAxMyBKb3pzZWYgS2FkbGVjc2lrIFx1MDAzY2thZGxlY0BuZXRmaWx0ZXIub3JnXHUwMDNlICovXG4gICAzOlx0XG4gICA0Olx0I2lmbmRlZiBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcbiAgIDU6XHQjZGVmaW5lIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSFxuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdCNkZWZpbmUgbXR5cGVfZG9fdGVzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX3Rlc3QpXG4gIDEwOlx0I2RlZmluZSBtdHlwZV9nY190ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfdGVzdClcbiAgMTE6XHQjZGVmaW5lIG10eXBlX2lzX2ZpbGxlZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2lzX2ZpbGxlZClcbiAgMTI6XHQjZGVmaW5lIG10eXBlX2RvX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2FkZClcbiAgMTM6XHQjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxuICAxNDpcdCNkZWZpbmUgbXR5cGVfZG9fZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZG9fZGVsKVxuICAxNTpcdCNkZWZpbmUgbXR5cGVfZG9fbGlzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2xpc3QpXG4gIDE2Olx0I2RlZmluZSBtdHlwZV9kb19oZWFkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZG9faGVhZClcbiAgMTc6XHQjZGVmaW5lIG10eXBlX2FkdF9lbGVtXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWR0X2VsZW0pXG4gIDE4Olx0I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfdGltZW91dClcbiAgMTk6XHQjZGVmaW5lIG10eXBlX2djX2luaXRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxuICAyMDpcdCNkZWZpbmUgbXR5cGVfa2FkdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2thZHQpXG4gIDIxOlx0I2RlZmluZSBtdHlwZV91YWR0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdClcbiAgMjI6XHQjZGVmaW5lIG10eXBlX2Rlc3Ryb3lcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZXN0cm95KVxuICAyMzpcdCNkZWZpbmUgbXR5cGVfbWVtc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX21lbXNpemUpXG4gIDI0Olx0I2RlZmluZSBtdHlwZV9mbHVzaFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKVxuICAyNTpcdCNkZWZpbmUgbXR5cGVfaGVhZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2hlYWQpXG4gIDI2Olx0I2RlZmluZSBtdHlwZV9zYW1lX3NldFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KVxuICAyNzpcdCNkZWZpbmUgbXR5cGVfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2VsZW0pXG4gIDI4Olx0I2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbiAgMjk6XHQjZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbiAgMzA6XHQjZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbiAgMzE6XHQjZGVmaW5lIG10eXBlX2xpc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9saXN0KVxuICAzMjpcdCNkZWZpbmUgbXR5cGVfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nYylcbiAgMzM6XHQjZGVmaW5lIG10eXBlX2NhbmNlbF9nY1x0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcbiAgMzQ6XHQjZGVmaW5lIG10eXBlXHRcdFx0TVRZUEVcbiAgMzU6XHRcbiAgMzY6XHQjZGVmaW5lIGdldF9leHQoc2V0LCBtYXAsIGlkKVx0KChtYXApLVx1MDAzZWV4dGVuc2lvbnMgJiM0MzsgKChzZXQpLVx1MDAzZWRzaXplICogKGlkKSkpXG4gIDM3Olx0XG4gIDM4Olx0c3RhdGljIHZvaWRcbiAgMzk6XHRtdHlwZV9nY19pbml0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAoKmdjKShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkpXG4gIDQwOlx0e1xuICA0MTpcdFx0c3RydWN0IG10eXBlICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAgNDI6XHRcbiAgNDM6XHRcdHRpbWVyX3NldHVwKFx1MDAyNm1hcC1cdTAwM2VnYywgZ2MsIDApO1xuICA0NDpcdFx0bW9kX3RpbWVyKFx1MDAyNm1hcC1cdTAwM2VnYywgamlmZmllcyAmIzQzOyBJUFNFVF9HQ19QRVJJT0Qoc2V0LVx1MDAzZXRpbWVvdXQpICogSFopO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHRzdGF0aWMgdm9pZFxuICA0ODpcdG10eXBlX2V4dF9jbGVhbnVwKHN0cnVjdCBpcF9zZXQgKnNldClcbiAgNDk6XHR7XG4gIDUwOlx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNVFlQRSBEZWZpbml0aW9uIGluIGlwX3NldF9iaXRtYXAgRmlsZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgTVRZUEVgIGlzIGJlaW5nIGRlZmluZWQgYW5kIHVzZWQgYWNyb3NzIHRoZXNlIHRocmVlIHNwZWNpZmljIGZpbGVzOiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNgLCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgTVRZUEVgIHdpdGhpbiBlYWNoIG9mIHRob3NlIHNvdXJjZSBmaWxlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgY29udGV4dCBmb3IgaXRzIHB1cnBvc2UgYW5kIGFzc29jaWF0ZWQgdmFsdWVzIGFjcm9zcyB0aGUgZGlmZmVyZW50IGJpdG1hcCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSBpdHMgdXNhZ2UsIGRlZmluaXRpb24sIGFuZCB0byBpZGVudGlmeSB2YXJpYXRpb25zIGluIGhvdyB0aGUgZmlsZXMgYXJlIHVzaW5nIGBNVFlQRWAsIHdpdGhvdXQgaGF2aW5nIHRvIGV4aGF1c3RpdmVseSByZWFkIGVhY2ggZmlsZSBsaW5lLWJ5LWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgTVRZUEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI4PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNDojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM1LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjI9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNjktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcwOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzEtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzE9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzktI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI1PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM0OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM1LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYGlwX3NldF9iaXRtYXBfZ2VuLmhgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gc2VlaW5nIHRoYXQgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGlzIGluY2x1ZGVkIGFjcm9zcyBhIGZldyBmaWxlcy4gU3BlY2lmaWNhbGx5OgoKKiAgIGBpcF9zZXRfYml0bWFwX2lwLmNgOiAgVGhlIGBNVFlQRWAgaGVyZSBpcyBkZWZpbmVkIGFzIGBiaXRtYXBfaXBgLiAgU28sIHRoYXQgbWVhbnMgY2FsbHMgdG8gbWFjcm9zIGxpa2UgYG10eXBlX2FkZGAgYXJlIGVmZmVjdGl2ZWx5IGV4cGFuZGluZyB0byBgYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBfdWFkdGAsIGBiaXRtYXBfaXBfa2FkdGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKiAgIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgOiAgSGVyZSwgYE1UWVBFYCBpcyBgYml0bWFwX2lwbWFjYC4gIGBtdHlwZV9hZGRgIHdpbGwgZXhwYW5kIHRvIGBiaXRtYXBfaXBtYWNfYWRkYCwgZXRjLiAgTWFrZXMgc2Vuc2UsIGZvbGxvd3MgdGhlIHBhdHRlcm4uCiogICBgaXBfc2V0X2JpdG1hcF9wb3J0LmNgOiBBbmQgZmluYWxseSwgd2l0aCBgYml0bWFwX3BvcnRgIGFzIHRoZSBgTVRZUEVgLCBgbXR5cGVfYWRkYCBleHBhbmRzIHRvIGBiaXRtYXBfcG9ydF9hZGRgLCBldGMuIENvbnNpc3RlbnQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGdvb2QuCgpNeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFdoeSB0aGlzIGBiaXRtYXBfZ2VuLmhgIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIGNvbXBhcmUgYGlwX3NldF9oYXNoX2dlbi5oYCBhbmQgdGhpcyBuZXcgYGlwX3NldF9iaXRtYXBfZ2VuLmhgLiBXaGF0JiMzOTtzIHRoZSBmdW5kYW1lbnRhbCBkaWZmZXJlbmNlIGluIGFwcHJvYWNoPyBXaGF0IHdlcmUgdGhlIGRyaXZpbmcgZGVzaWduIGNvbnNpZGVyYXRpb25zIHRoYXQgbGVkIHRvIHRoaXMgc2hpZnQ/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF9zZXRfaGFzaF9nZW4uaGAgaXMgZG9pbmcgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGBleHQtJmd0O3RhcmdldGAgd2l0aGluIHRoZSBgaXBfc2V0YCBzdHJ1Y3R1cmUuICBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gdHJhZGUtb2ZmcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQtXHUwMDNldGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTMwPW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjEtXHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNjI6XHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjMtXHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyMi1cdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcihkYXRhLCBzZXQpLCBleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTIzOlx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjQtXHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChkYXRhLCBzZXQpLCBleHQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE0MS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE0MjpcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE0My1cdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzk9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjI3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjI4Olx0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEyMjktXHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgSW5jb25zaXN0ZW5jaWVzIGluIGlwX3NldCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgZGlzY3JlcGFuY3kgYmV0d2VlbiB0d28gaGVhZGVyIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHdheSB0aGV5IGhhbmRsZSBjb21tZW50cyBhbmQgdGFyZ2V0IGV4dGVuc2lvbnMuIGBpcF9zZXRfaGFzaF9nZW4uaGAgaW5jbHVkZXMgYW4gYGlmYCBjb25kaXRpb24gdGhhdCBjaGVja3MgZm9yIGBTRVRfV0lUSF9DT01NRU5UKHNldCkgJmFtcDsmYW1wOyAhZXh0LSZndDt0YXJnZXRgLCB3aGVyZWFzIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgdGhlIGAhZXh0LSZndDt0YXJnZXRgIHBhcnQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgY291bGQgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBvciB0aGVyZSBtaWdodCBiZSBhbiBpbnRlbnRpb25hbCBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIGJldHdlZW4gdGhlc2UgdHdvIHNldCB0eXBlcy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBleHQtJmd0O3RhcmdldGAgYWN0dWFsbHkgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGlwX3NldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZpZWxkIHJlbGF0ZXMgdG8gdGhlIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSBhbmQgaWYgdGhlIGRpZmZlcmVuY2UgaXMsIGluIGZhY3QsIGNvcnJlY3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgZGVmaW5pdGlvbiBhbmQgdGhlIHJvbGUgb2YgYGlwX3NldF9pbml0X2NvbW1lbnRgLiBUaGVzZSBhcmUgdGhlIGtleXMgdG8gdW5sb2NraW5nIHRoZSBpbnRlbmRlZCBsb2dpYyBhbmQgc2VlaW5nIGlmIHRoaXMgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaXMgYSBidWcgb3Igbm90LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9pbml0X2NvbW1lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMzA9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE2Mi1cdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE2MzpcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTY0LVx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzQ2PXZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDc6aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNDgtXHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNjgtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM2OTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05ODg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTIzLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMjQ6XHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChkYXRhLCBzZXQpLCBleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI1LVx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIyMT1saXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjI2LVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjI3Olx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZSwgc2V0KSwgZXh0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjI4LVx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgaXBfc2V0X2luaXRfY29tbWVudGAgZnVuY3Rpb24sIGFzIGlmIEkmIzM5O20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjoKCioqRGl2aW5nIGludG8gaXBfc2V0X2luaXRfY29tbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGd1dHMgb2YgdGhpcyBgaXBfc2V0X2luaXRfY29tbWVudGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGluaXRpYWxpemF0aW9uIGFuZCBjb21tZW50cywgc28gbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB3aGVyZSB3ZSBzZXQgdXAgdGhlIGNvbW1lbnRzIGZpZWxkIHdpdGhpbiBhbiBJUCBzZXQgb3IsIGF0IGxlYXN0LCBlbnN1cmUgaXQmIzM5O3MgaGFuZGxlZCBwcm9wZXJseS4gSXQmIzM5O3MgaW4gYGlwX3NldF9jb3JlLmNgLCBzbyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBpcHNldCBpbmZyYXN0cnVjdHVyZS4gUHJvYmFibHkgY2FsbGVkIGVhcmx5IGluIHNldCBjcmVhdGlvbiwgb3Igd2hlbiBhIGNvbW1lbnQgZmllbGQgaXMgYWRkZWQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB0byBzZWUgaWYgaXQmIzM5O3MgbmV3IG9yIHByZWV4aXN0aW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBtZW1vcnkgaXMgYWxsb2NhdGVkIGhlcmUgYW5kIHRoZSBjaGVja3MgaW52b2x2ZWQuIEl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhlIGNvbW1lbnQgZmllbGQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSBkaWZmZXJlbnQgaXBzZXQgdHlwZXMuIEkgZXhwZWN0IHRvIHNlZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUsIGFsb25nc2lkZSBlcnJvciBoYW5kbGluZy4gVGhlcmUgY291bGQgYmUgbG9ja2luZyBpbnZvbHZlZCwgYnV0IEkmIzM5O2xsIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIHRoZSBuYW1lIGFsb25lLCBJIGNhbiBpbWFnaW5lIHRoZSBmdW5jdGlvbiBoYW5kbGluZyBOVUxMIG9yIGVtcHR5IGNvbW1lbnQgc3RyaW5ncywgbWF5YmUgZXZlbiB0cnVuY2F0aW5nIG92ZXJseSBsb25nIGNvbW1lbnRzLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRyZXR1cm4gbmxhX2RhdGEodGIpO1xuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHQvKiBDYWxsZWQgZnJvbSB1YWRkIG9ubHksIHByb3RlY3RlZCBieSB0aGUgc2V0IHNwaW5sb2NrLlxuIDM0NDpcdCAqIFRoZSBrYWR0IGZ1bmN0aW9ucyBkb24mIzM5O3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cbiAzNDU6XHQgKi9cbiAzNDY6XHR2b2lkXG4gMzQ3Olx0aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiAzNDg6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4gMzQ5Olx0e1xuIDM1MDpcdFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiAzNTE6XHRcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIDM1MjpcdFxuIDM1MzpcdFx0aWYgKHVubGlrZWx5KGMpKSB7XG4gMzU0Olx0XHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiAzNTU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gMzU2Olx0XHRcdGtmcmVlX3JjdShjLCByY3UpO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFx0aWYgKCFsZW4pXG4gMzU5Olx0XHRcdHJldHVybjtcbiAzNjA6XHRcdGlmICh1bmxpa2VseShsZW4gXHUwMDNlIElQU0VUX01BWF9DT01NRU5UX1NJWkUpKVxuIDM2MTpcdFx0XHRsZW4gPSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFO1xuIDM2MjpcdFx0YyA9IGttYWxsb2Moc2l6ZW9mKCpjKSAmIzQzOyBsZW4gJiM0MzsgMSwgR0ZQX0FUT01JQyk7XG4gMzYzOlx0XHRpZiAodW5saWtlbHkoIWMpKVxuIDM2NDpcdFx0XHRyZXR1cm47XG4gMzY1Olx0XHRzdHJzY3B5KGMtXHUwMDNlc3RyLCBleHQtXHUwMDNlY29tbWVudCwgbGVuICYjNDM7IDEpO1xuIDM2NjpcdFx0YXRvbWljNjRfYWRkKHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIDM2NzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgYyk7XG4gMzY4Olx0fVxuIDM2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xuIDM3MDpcdFxuIDM3MTpcdC8qIFVzZWQgb25seSB3aGVuIGR1bXBpbmcgYSBzZXQsIHByb3RlY3RlZCBieSByY3VfcmVhZF9sb2NrKCkgKi9cbiAzNzI6XHRzdGF0aWMgaW50XG4gMzczOlx0aXBfc2V0X3B1dF9jb21tZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudClcbiAzNzQ6XHR7XG4gMzc1Olx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjID0gcmN1X2RlcmVmZXJlbmNlKGNvbW1lbnQtXHUwMDNlYyk7XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoIWMpXG4gMzc4Olx0XHRcdHJldHVybiAwO1xuIDM3OTpcdFx0cmV0dXJuIG5sYV9wdXRfc3RyaW5nKHNrYiwgSVBTRVRfQVRUUl9DT01NRU5ULCBjLVx1MDAzZXN0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTk5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaXBfc2V0X2luaXRfY29tbWVudCBDYWxsIGluIFJlbGF0aW9uIHRvIHh0X1NFVCBhbmQgQml0bWFwIE9wZXJhdGlvbnMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYXMgSSBkaXNzZWN0IHRoaXMgY29kZS4gVGhhdCBjb21tZW50IG9uIGBpcF9zZXRfaW5pdF9jb21tZW50YCBpcyBpbnRlcmVzdGluZzogJiMzNDtDYWxsZWQgZnJvbSB1YWRkIG9ubHksIHByb3RlY3RlZCBieSB0aGUgc2V0IHNwaW5sb2NrLiYjMzQ7IFJpZ2h0LCB0aGUga2FkdCBmdW5jdGlvbnMgYXJlbiYjMzk7dCBzdXBwb3NlZCB0byB0b3VjaCB0aGUgY29tbWVudCBleHRlbnNpb25zLiBCdXQgdGhlbiBJIHNlZSB0aGlzIGB4dF9TRVRgIHBhdGgsIHNwZWNpZmljYWxseSB3aGVuIGFkZGluZyBhbiBlbGVtZW50IHRvIGFuIGlwc2V0IHRocm91Z2ggdGhlIG5ldGZpbHRlciB0YXJnZXQg4oCTIGlwdGFibGVzIG9yIG5mdGFibGVzJiMzOTsgU0VUIHRhcmdldC4gSXQgbG9va3MgbGlrZSBgZXh0LSZndDt0YXJnZXRgIGlzIHRydWUgaGVyZSEgVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBwcm9ibGVtIGJlY2F1c2UsIGluIHRoZSBrYWR0L3h0X1NFVCBwYXRoLCB3aGVuIGBleHQtJmd0O3RhcmdldGAgaXMgdHJ1ZSwgd2Ugd2VyZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50YCB3aXRoIGJpdG1hcCBzZXRzLiBUaGF0IGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBkZXJlZmVyZW5jZSBhIGNvbW1lbnQgc3RydWN0dXJlIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC0mZ3Q7YywgMSlgIG9yIGZyZWUgaXQsIG9yIGV2ZW4gZG8gYSBga21hbGxvY2Agd2l0aCBgZXh0LSZndDtjb21tZW50YCwgd2hpY2ggY291bGQgYmUgdW5pbml0aWFsaXplZCwgZ2FyYmFnZSwgb3IgTlVMTC4gVGhpcyBpcyBhIHJlYWwgaXNzdWUsIGFzIHdlIGNvdWxkIGJlIGZyZWVpbmcgYW4gZXhpc3RpbmcgY29tbWVudCBhdHRhY2hlZCB0byBhbiBlbGVtZW50IHdoZW4gaXQmIzM5O3MgYmVpbmcgdXBkYXRlZCBieSB0aGUgcGFja2V0IHBhdGghCgpOb3cgSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX2FkZGAgYXJlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aGluIHRoZSBiaXRtYXAgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoZSBrYWR0L3VhZHQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgYW5kIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBoYW5kbGUgdGhlIGNvbW1lbnQgZXh0ZW5zaW9ucyBkaWZmZXJlbnRseSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgeHRfU0VUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzcGlubG9jayBwcm90ZWN0aW9uIGlzICp0cnVseSogZWZmZWN0aXZlIGFuZCB0aGF0IHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBjYXVzaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTctI2RlZmluZSBtdHlwZV9hZHRfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkdF9lbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE4OiNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTktI2RlZmluZSBtdHlwZV9nY19pbml0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyOTojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMC0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzA6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTMxLVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTQtI2lmZGVmIElQX1NFVF9CSVRNQVBfU1RPUkVEX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMwNjpcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA3LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTktI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIyMDojdW5kZWYgbXR5cGVfYWRkX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIxLSN1bmRlZiBtdHlwZV9kZWxfY2lkclxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjMxLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMzI6I3VuZGVmIG10eXBlX2FkZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzMtI3VuZGVmIG10eXBlX2RlbFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2ODojZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2OS0jZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI4MDojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjgxLSNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzM1PXN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ1LS8qKlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozNDY6ICogbXR5cGVfYWRkX2NpZHIgLSBBZGQgYSBDSURSIGVudHJ5IHRvIGhhc2ggdGFibGUgYm9va2tlZXBpbmdcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzU3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQxOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NDItXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzUyPW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNC1cdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkwNTpcdFx0XHRtdHlwZV9hZGQoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIFx1MDAyNngtXHUwMDNlZXh0LCBcdTAwMjZ4LVx1MDAzZW1leHQsIHgtXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDYtXHRcdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05ODc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk4OS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTE0Olx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjM0LVx0LmFkdFx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzU6XHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjM2LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaXRtYXAgSVAgU2V0IEdlbmVyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGhlYWRlciBmaWxlIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBgbXR5cGVfYWRkYCBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBpdC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpZmZlcmVudCBgTVRZUEVgIHZhcmlhbnRzLgoKU28sIGJlZm9yZSBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgaW5jbHVkZWQsIHRoZXJlIHNlZW0gdG8gYmUgYSBmZXcgdHlwZXMgZGVmaW5lZC4gTGV0JiMzOTtzIGxvb2sgYXQgYGJpdG1hcF9pcGAgKGZyb20gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jYCksIHdoaWNoIHdpbGwgdXNlIGBiaXRtYXBfaXBfYWRkYCwgdGhlbiBgYml0bWFwX2lwbWFjYCAoZGVmaW5lZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNgKSwgdXNpbmcgdGhlIGBiaXRtYXBfaXBtYWNfYWRkYCBmdW5jdGlvbiwgYW5kIGxhc3RseSBgYml0bWFwX3BvcnRgIChmb3VuZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY2ApLCB3aGljaCB1dGlsaXplcyBgYml0bWFwX3BvcnRfYWRkYC4gVGhpcyBnaXZlcyBtZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuCgpOb3csIEkmIzM5O2xsIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXRzZWxmLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgc3RydWN0dXJlIG9mIGBtdHlwZV92YXJpYW50YCBvciBgbXR5cGVgLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmVzIDI5MC0zMzAgb2YgdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRlZmluaXRpb24uIFdpdGggdGhvc2UgZGV0YWlscyBpbiBoYW5kLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBgbXR5cGVgIGFuZCBgbXR5cGVfYWRkYCBhcmUgaW50ZW5kZWQgdG8gd29yayB0b2dldGhlciBhbmQgaG93IHRoZSBkaWZmZXJlbnQgYml0bWFwIHR5cGVzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg1Olx0XHRcdFx0fVxuIDI4NjpcdFx0XHR9XG4gMjg3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gMjg4Olx0XG4gMjg5Olx0XHRtYXAtXHUwMDNlZ2MuZXhwaXJlcyA9IGppZmZpZXMgJiM0MzsgSVBTRVRfR0NfUEVSSU9EKHNldC1cdTAwM2V0aW1lb3V0KSAqIEhaO1xuIDI5MDpcdFx0YWRkX3RpbWVyKFx1MDAyNm1hcC1cdTAwM2VnYyk7XG4gMjkxOlx0fVxuIDI5MjpcdFxuIDI5MzpcdHN0YXRpYyB2b2lkXG4gMjk0Olx0bXR5cGVfY2FuY2VsX2djKHN0cnVjdCBpcF9zZXQgKnNldClcbiAyOTU6XHR7XG4gMjk2Olx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDI5NzpcdFxuIDI5ODpcdFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcbiAyOTk6XHRcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2bWFwLVx1MDAzZWdjKTtcbiAzMDA6XHR9XG4gMzAxOlx0XG4gMzAyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlID0ge1xuIDMwMzpcdFx0LmthZHRcdD0gbXR5cGVfa2FkdCxcbiAzMDQ6XHRcdC51YWR0XHQ9IG10eXBlX3VhZHQsXG4gMzA1Olx0XHQuYWR0XHQ9IHtcbiAzMDY6XHRcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG4gMzA3Olx0XHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxuIDMwODpcdFx0XHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxuIDMwOTpcdFx0fSxcbiAzMTA6XHRcdC5kZXN0cm95ID0gbXR5cGVfZGVzdHJveSxcbiAzMTE6XHRcdC5mbHVzaFx0PSBtdHlwZV9mbHVzaCxcbiAzMTI6XHRcdC5oZWFkXHQ9IG10eXBlX2hlYWQsXG4gMzEzOlx0XHQubGlzdFx0PSBtdHlwZV9saXN0LFxuIDMxNDpcdFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXG4gMzE1Olx0XHQuY2FuY2VsX2djID0gbXR5cGVfY2FuY2VsX2djLFxuIDMxNjpcdH07XG4gMzE3Olx0XG4gMzE4Olx0I2VuZGlmIC8qIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0NwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpcHNldGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBpcHNldGAgY29kZSBhZ2Fpbi4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG10eXBlX2thZHRgIGFuZCBgbXR5cGVfdWFkdGAgYW5kIHRoZSBgbXR5cGVfYWRkYCBmdW5jdGlvbiAob3IsIG1vcmUgZ2VuZXJhbGx5LCBob3cgdGhlIGtlcm5lbCYjMzk7cyBuZXRmaWx0ZXIgaXBzZXQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgYHZhcmlhbnQtJmd0O2FkdFtJUFNFVF9BRERdYCBvciBgdmFyaWFudC0mZ3Q7a2FkdGAgLyBgdmFyaWFudC0mZ3Q7dWFkdGAgY2FsbHMpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGFkZCBmdW5jdGlvbnMgYXJlIGludm9rZWQgYW5kIHdoYXQmIzM5O3MgZHJpdmluZyB0aGUgY2FsbCBzZXF1ZW5jZS4KCk15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX3VhZHRgIG1vcmUgY2xvc2VseS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBmbG93IGFuZCB0aGUgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBlYWNoIG9mIHRob3NlIGltcGxlbWVudGF0aW9ucy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBob3cgdGhlc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBgaXBzZXRgIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX2lwX2thZHR8Yml0bWFwX2lwbWFjX2thZHR8Yml0bWFwX3BvcnRfa2FkdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MTA5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjExMDpiaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTEtXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyMDk6Yml0bWFwX2lwbWFjX2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjEwLVx0XHQgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTEyNj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjEyNzpiaXRtYXBfcG9ydF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTI4LVx0XHQgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU4NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSBvZiBCaXRtYXAgSVAgU2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZmFtaWx5IG9mIGJpdG1hcCBmdW5jdGlvbnM6IGBiaXRtYXBfaXBfa2FkdGAsIGBiaXRtYXBfaXBtYWNfa2FkdGAsIGBiaXRtYXBfcG9ydF9rYWR0YCwgYGJpdG1hcF9pcF91YWR0YCwgYGJpdG1hcF9pcG1hY191YWR0YCwgYW5kIGBiaXRtYXBfcG9ydF91YWR0YC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGBiaXRtYXBfaXBfYWRkYCwgYGJpdG1hcF9pcG1hY19hZGRgLCBhbmQgYGJpdG1hcF9wb3J0X2FkZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhleSBhcmUgKmFjdHVhbGx5KiBkZWZpbmVkIHN0YXRpY2FsbHkuIEFyZSB0aGV5IGdvaW5nIHRvIHNob3cgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZT8KCkEgcXVpY2sgcGVlayBhdCBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgcmV2ZWFscyBgbXR5cGVfYWRkYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHNvIGl0IGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uISBUaGF0IGNvbXBsaWNhdGVzIHRoaW5ncywgYmVjYXVzZSB0aGlzIG1lYW5zIGl0IGNvdWxkIGJlIGlubGluZWQsIG9yIHN0b3JlZCBkaXJlY3RseSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzICphY3R1YWxseSogdXNlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbmNsdWRlZCBpbiBhbiBvYmplY3QgZmlsZSwgYnV0IG5vdCBhIGdsb2JhbCBzeW1ib2wuIFNpbmNlIGl0JiMzOTtzIGBzdGF0aWNgLCBpdCBzaG91bGQgZWl0aGVyIGJlIGlubGluZWQgb3IgcHJlc2VudCBpbiB0aGUgY2FsbGluZyBvYmplY3QgYXMgYSBsb2NhbCBmdW5jdGlvbiwgd2l0aGluIGB1YWR0YCBhbmQgYGthZHRgIG9yIHN0b3JlZCBkaXJlY3RseSBpbiBgdmFyaWFudC0mZ3Q7YWR0YC4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbXR5cGVfYWRkYCwgb3IsIGV2ZW4gYmV0dGVyLCB1bmRlcnN0YW5kIGhvdyBgaXBfc2V0X2JpdG1hcF9pcC5jYCBkZWZpbmVzIGBiaXRtYXBfaXBfa2FkdGAgYW5kIGBiaXRtYXBfaXBfdWFkdGAuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiB0aGF0IHN0YXRpYyBmdW5jdGlvbiwgYW5kIHRodXMsIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA4Olx0XG4gMTA5Olx0c3RhdGljIGludFxuIDExMDpcdGJpdG1hcF9pcF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxMTE6XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gMTEyOlx0XHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdClcbiAxMTM6XHR7XG4gMTE0Olx0XHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAxMTU6XHRcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gMTE2Olx0XHRzdHJ1Y3QgYml0bWFwX2lwX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcbiAxMTc6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gMTE4Olx0XHR1MzIgaXA7XG4gMTE5Olx0XG4gMTIwOlx0XHRpcCA9IG50b2hsKGlwNGFkZHIoc2tiLCBvcHQtXHUwMDNlZmxhZ3MgXHUwMDI2IElQU0VUX0RJTV9PTkVfU1JDKSk7XG4gMTIxOlx0XHRpZiAoaXAgXHUwMDNjIG1hcC1cdTAwM2VmaXJzdF9pcCB8fCBpcCBcdTAwM2UgbWFwLVx1MDAzZWxhc3RfaXApXG4gMTIyOlx0XHRcdHJldHVybiAtSVBTRVRfRVJSX0JJVE1BUF9SQU5HRTtcbiAxMjM6XHRcbiAxMjQ6XHRcdGUuaWQgPSBpcF90b19pZChtYXAsIGlwKTtcbiAxMjU6XHRcbiAxMjY6XHRcdHJldHVybiBhZHRmbihzZXQsIFx1MDAyNmUsIFx1MDAyNmV4dCwgXHUwMDI2b3B0LVx1MDAzZWV4dCwgb3B0LVx1MDAzZWNtZGZsYWdzKTtcbiAxMjc6XHR9XG4gMTI4Olx0XG4gMTI5Olx0c3RhdGljIGludFxuIDEzMDpcdGJpdG1hcF9pcF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiAxMzE6XHRcdCAgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZClcbiAxMzI6XHR7XG4gMTMzOlx0XHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAxMzQ6XHRcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gMTM1Olx0XHR1MzIgaXAgPSAwLCBpcF90byA9IDA7XG4gMTM2Olx0XHRzdHJ1Y3QgYml0bWFwX2lwX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcbiAxMzc6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbiAxMzg6XHRcdGludCByZXQgPSAwO1xuIDEzOTpcdFxuIDE0MDpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfTElORU5PXSlcbiAxNDE6XHRcdFx0KmxpbmVubyA9IG5sYV9nZXRfdTMyKHRiW0lQU0VUX0FUVFJfTElORU5PXSk7XG4gMTQyOlx0XG4gMTQzOlx0XHRpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfSVBdKSlcbiAxNDQ6XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRyZXQgPSBpcF9zZXRfZ2V0X2hvc3RpcGFkZHI0KHRiW0lQU0VUX0FUVFJfSVBdLCBcdTAwMjZpcCk7XG4gMTQ3Olx0XHRpZiAocmV0KVxuIDE0ODpcdFx0XHRyZXR1cm4gcmV0O1xuIDE0OTpcdFxuIDE1MDpcdFx0cmV0ID0gaXBfc2V0X2dldF9leHRlbnNpb25zKHNldCwgdGIsIFx1MDAyNmV4dCk7XG4gMTUxOlx0XHRpZiAocmV0KVxuIDE1MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKGlwIFx1MDAzYyBtYXAtXHUwMDNlZmlyc3RfaXAgfHwgaXAgXHUwMDNlIG1hcC1cdTAwM2VsYXN0X2lwKVxuIDE1NTpcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9CSVRNQVBfUkFOR0U7XG4gMTU2Olx0XG4gMTU3Olx0XHRpZiAoYWR0ID09IElQU0VUX1RFU1QpIHtcbiAxNTg6XHRcdFx0ZS5pZCA9IGlwX3RvX2lkKG1hcCwgaXApO1xuIDE1OTpcdFx0XHRyZXR1cm4gYWR0Zm4oc2V0LCBcdTAwMjZlLCBcdTAwMjZleHQsIFx1MDAyNmV4dCwgZmxhZ3MpO1xuIDE2MDpcdFx0fVxuIDE2MTpcdFxuIDE2MjpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfSVBfVE9dKSB7XG4gMTYzOlx0XHRcdHJldCA9IGlwX3NldF9nZXRfaG9zdGlwYWRkcjQodGJbSVBTRVRfQVRUUl9JUF9UT10sIFx1MDAyNmlwX3RvKTtcbiAxNjQ6XHRcdFx0aWYgKHJldClcbiAxNjU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDE2NjpcdFx0XHRpZiAoaXAgXHUwMDNlIGlwX3RvKVxuIDE2NzpcdFx0XHRcdHN3YXAoaXAsIGlwX3RvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQIFNldCBJbml0aWFsaXphdGlvbiBhbmQgQWRkaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJUCBzZXRzIGFyZSBjcmVhdGVkIGFuZCBwb3B1bGF0ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYml0bWFwLWJhc2VkIHR5cGVzIChgYml0bWFwX2lwX2thZHRgIGFuZCBgYml0bWFwX2lwX3VhZHRgKS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGJvdGggb2YgdGhlc2UgY2FsbCB0aGUgYGFkdGZuYCBmdW5jdGlvbiwgcGFzc2luZyBpbiBhIHNldCwgYW4gZWxlbWVudCBwb2ludGVyIChgJmFtcDtlYCksIGFuIGV4dGVuc2lvbiBwb2ludGVyIChgJmFtcDtleHRgKSwgYW5kIHNvbWUgb3RoZXIgYXJndW1lbnRzLiBUaGlzIGBhZHRmbmAgaXMgYWN0dWFsbHkgYGJpdG1hcF9pcF9hZGRgIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgSVBTRVRfQUREYCBvcGVyYXRpb24uIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWRkaW5nIHRvIHRoZSBiaXRtYXAgSVAgc2V0cy4KClRoZW4gSSBub3RpY2VkIHNvbWV0aGluZyBlbHNlOiBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgbXR5cGVfYWRkYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB0aGUgY3JlYXRpb24gcGhhc2UgYnkgZnVuY3Rpb25zIHNwZWNpZmljIHRvIGJpdG1hcCB0eXBlcywgbmFtZWx5LCBgYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBtYWNfYWRkYCwgYW5kIGBiaXRtYXBfcG9ydF9hZGRgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYGlwX3NldF9pbml0X2NvbW1lbnRgIHBsYXlzIGEga2V5IHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlIGJpdG1hcC1iYXNlZCBJUCBzZXQgdmFyaWFudHMuCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGlzIG92ZXJhbGwgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQmIzM5O3MgdGltZSB0byBzZWUgaG93IHRoZSBJUFNFVCBhbmQgYml0bWFwIHR5cGVzIGFyZSBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIGFuZCBwZXJoYXBzIHNvbWUgaW5zaWdodCBvbiBhdmFpbGFibGUgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9CSVRNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNj1jb25maWcgSVBfU0VUX01BWFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZT05PW9iai0kKENPTkZJR19JUF9TRVQpICYjNDM7PSBpcF9zZXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMTEtIyBiaXRtYXAgdHlwZXNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0lQX1NFVF9CSVRNQVBfSVApICYjNDM7PSBpcF9zZXRfYml0bWFwX2lwLm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBNQUMpICYjNDM7PSBpcF9zZXRfYml0bWFwX2lwbWFjLm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0lQX1NFVF9CSVRNQVBfUE9SVCkgJiM0Mzs9IGlwX3NldF9iaXRtYXBfcG9ydC5vXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTE1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjQ6I2lmbmRlZiBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDo1OiNkZWZpbmUgX19JUF9TRVRfQklUTUFQX0lQX0dFTl9IXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTMwPW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTMtXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NDojaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NS1cdFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTc2PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOTQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTk1OiNpZm5kZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5Ni1zdGF0aWMgYm9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0yMDQ9bXR5cGVfbGlzdChjb25zdCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTIyNC1cdFx0ICAgIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MjI1OiNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjI2LVx0XHQgICAgIG10eXBlX2lzX2ZpbGxlZCh4KSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzE3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMxODojZW5kaWYgLyogX19JUF9TRVRfQklUTUFQX0lQX0dFTl9IICovXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9iaXRtYXA6aXAsbWFjXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM3OiNkZWZpbmUgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBTZXQgQ29uZmlndXJhdGlvbiBIaWVyYXJjaHkqKgoKUmlnaHQsIHNvIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgSVAgc2V0IGZlYXR1cmVzIGFyZSBvcmdhbml6ZWQgYW5kIHdoYXQgZGVwZW5kcyBvbiB3aGF0LiBNeSBnby10byBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBpbiB0aGlzIGNhc2UsIHRoZSBvbmUgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLiBJdCYjMzk7bGwgYmUgYSBtYXAgb2YgdGhlIGxhbmRzY2FwZS4KCkkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBgSVBfU0VUYCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyB0aGUgdG9wLWxldmVsIG9wdGlvbiwgYW5kIHRoZSB2YXJpb3VzIGJpdG1hcC1yZWxhdGVkIHR5cGVzOiBgSVBfU0VUX0JJVE1BUF9JUGAsIGBJUF9TRVRfQklUTUFQX0lQTUFDYCwgYW5kIGBJUF9TRVRfQklUTUFQX1BPUlRgLiBUaGlzIHNob3VsZCBjbGFyaWZ5IGFueSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogJiMzNDtJZiBgSVBfU0VUX0JJVE1BUF9JUGAgaXMgZW5hYmxlZCwgdGhlbiBgSVBfU0VUYCBtdXN0IGFsc28gYmUgZW5hYmxlZCwmIzM0OyBvciBwZXJoYXBzIHNvbWUgbXV0dWFsbHkgZXhjbHVzaXZlIG9wdGlvbnMuCgpPbmNlIEkmIzM5O3ZlIG1hcHBlZCB0aGUgc3RydWN0dXJlIGZyb20gdGhlIGBLY29uZmlnYCBmaWxlLCBJIHNob3VsZCBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZXNlIElQIHNldCBiaXRtYXAgZmVhdHVyZXMsIGFuZCB3aGVyZSB0aGV5IGZpdCBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBGcm9tIHRoZXJlIEkgY2FuIGNoZWNrIGFueSBjb2RlIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgSVBfU0VUXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUCBzZXQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIElQIHNldCBzdXBwb3J0IHRvIHRoZSBrZXJuZWwuXG4gICA4Olx0XHQgIEluIG9yZGVyIHRvIGRlZmluZSBhbmQgdXNlIHRoZSBzZXRzLCB5b3UgbmVlZCB0aGUgdXNlcnNwYWNlIHV0aWxpdHlcbiAgIDk6XHRcdCAgaXBzZXQoOCkuIFlvdSBjYW4gdXNlIHRoZSBzZXRzIGluIG5ldGZpbHRlciB2aWEgdGhlIFwmIzM0O3NldFwmIzM0OyBtYXRjaFxuICAxMDpcdFx0ICBhbmQgXCYjMzQ7U0VUXCYjMzQ7IHRhcmdldC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDEzOlx0XG4gIDE0Olx0aWYgSVBfU0VUXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElQX1NFVF9NQVhcbiAgMTc6XHRcdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiBJUCBzZXRzXCYjMzQ7XG4gIDE4Olx0XHRkZWZhdWx0IDI1NlxuICAxOTpcdFx0cmFuZ2UgMiA2NTUzNFxuICAyMDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgWW91IGNhbiBkZWZpbmUgaGVyZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtYXhpbXVtIG51bWJlciBcbiAgMjM6XHRcdCAgb2YgSVAgc2V0cyBmb3IgdGhlIGtlcm5lbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVGhlIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAmIzM5O21heF9zZXRzJiMzOTsgbW9kdWxlXG4gIDI2Olx0XHQgIHBhcmFtZXRlciBvZiB0aGUgJiMzOTtpcF9zZXQmIzM5OyBtb2R1bGUuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYml0bWFwOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxuICAzMzpcdFx0ICBjYW4gc3RvcmUgSVB2NCBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKSBmcm9tIGEgcmFuZ2UuXG4gIDM0Olx0XG4gIDM1Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIElQX1NFVFxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBiaXRtYXA6aXAsbWFjIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxuICA0MjpcdFx0ICBjYW4gc3RvcmUgSVB2NCBhZGRyZXNzIGFuZCAoc291cmNlKSBNQUMgYWRkcmVzcyBwYWlycyBmcm9tIGEgcmFuZ2UuXG4gIDQzOlx0XG4gIDQ0Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIElQX1NFVFxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBiaXRtYXA6cG9ydCBzZXQgdHlwZSBzdXBwb3J0LCBieSB3aGljaCBvbmVcbiAgNTE6XHRcdCAgY2FuIHN0b3JlIFRDUC9VRFAgcG9ydCBudW1iZXJzIGZyb20gYSByYW5nZS5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDU0Olx0XG4gIDU1Olx0Y29uZmlnIElQX1NFVF9IQVNIX0lQXG4gIDU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4gIDU3Olx0XHRkZXBlbmRzIG9uIElQX1NFVFxuICA1ODpcdFx0aGVscFxuICA1OTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBoYXNoOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxuICA2MDpcdFx0ICBjYW4gc3RvcmUgYXJiaXRyYXJ5IElQdjQgb3IgSVB2NiBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIHRhcmdldHMgdGhlIGBuZXRmaWx0ZXIvaXBzZXRgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJdCYjMzk7cyBjbGVhcmx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGJvdGggbmV0bGluayAoc3BlY2lmaWNhbGx5IGBuZm5ldGxpbmtgIGFuZCBgaXBzZXRgKSBhbmQgdGhlIG5ldGZpbHRlciBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLCB2aWEgdGhlIGB4dF9TRVRgIHRhcmdldCBmb3IgcGFja2V0LWRyaXZlbiBzZXQgdXBkYXRlcy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIHdpdGhpbiB0aGUgYG10eXBlX2FkZGAgZnVuY3Rpb24sIG1vcmUgcHJlY2lzZWx5IHdoZW4gaW5pdGlhbGl6aW5nIGNvbW1lbnRzIHZpYSBgaXBfc2V0X2luaXRfY29tbWVudGAuIFRoaXMgZGlyZWN0bHkgaW5mbHVlbmNlcyBiZWhhdmlvciwgcGFydGljdWxhcmx5IHdoZW4gdGhlIGBleHQtJmd0O3RhcmdldGAgaXMgY29uZmlndXJlZCwgd2hpY2ggaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYml0bWFwIHNldHMgdGhhdCBoYXZlIGNvbW1lbnRzIGVuYWJsZWQuCgpHaXZlbiBpdHMgcmVhY2hhYmlsaXR5IGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBteSBpbml0aWFsIGluc3RpbmN0IGlzOiAqKnllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuKiogSXQgdGlja3MgYWxsIHRoZSBib3hlcyDigJMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCBhbmQgaW50ZXJhY3RzIHdpdGggY29uZmlndXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4gYG10eXBlX2FkZGAgaXRzZWxmIGlzIGdlbmVyYXRlZCBmb3IgdGhlIGJpdG1hcCBzZXQgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGFuZCBgYml0bWFwX3BvcnRfYWRkYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIGJvdGgga2VybmVsIGFuZCB1c2VyLWFjY2Vzc2libGUgZnVuY3Rpb25zLCBhcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGBrYWR0YCBhbmQgYHVhZHRgIHZhcmlhbnRzLiAgYGlwX3NldF9pbml0X2NvbW1lbnRgIGlzIGFsc28gY3J1Y2lhbCwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgLiBJdCBzZWVtcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdmVyeSByZWxldmFudDoKYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGBiaXRtYXBfcG9ydF9hZGRgLCBgYml0bWFwX2lwX2thZHRgLCBgYml0bWFwX2lwbWFjX2thZHRgLCBgYml0bWFwX3BvcnRfa2FkdGAsIGBiaXRtYXBfaXBfdWFkdGAsIGBiaXRtYXBfaXBtYWNfdWFkdGAsIGBiaXRtYXBfcG9ydF91YWR0YCwgYGlwX3NldF9pbml0X2NvbW1lbnRgLgoKVGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBpcHNldCBiaXRtYXAgdHlwZXMgYW5kIGNvbW1lbnQgZXh0ZW5zaW9uIGhhbmRsaW5nLCBtYWtpbmcgdGhlbSBpZGVhbCB0YXJnZXRzLiBUaGV5IGFyZSBub3QgdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLCBidXQgYXJlIHNwZWNpZmljIHRvIGlwc2V0IGZ1bmN0aW9uYWxpdHkuCgpGb3IgZnV6emluZywgSSYjMzk7bGwgc2VsZWN0IHRoZSBtb3N0IGRpcmVjdGx5IHJlbGV2YW50IHN5bWJvbHM6IGBiaXRtYXBfaXBfYWRkYCwgYGJpdG1hcF9pcG1hY19hZGRgLCBgYml0bWFwX3BvcnRfYWRkYCwgYGJpdG1hcF9pcF9rYWR0YCwgYGJpdG1hcF9pcG1hY19rYWR0YCwgYGJpdG1hcF9wb3J0X2thZHRgLCBgYml0bWFwX2lwX3VhZHRgLCBgYml0bWFwX2lwbWFjX3VhZHRgLCBgYml0bWFwX3BvcnRfdWFkdGAsIGBpcF9zZXRfaW5pdF9jb21tZW50YC4KCkZpbmFsbHksIHJlZ2FyZGluZyBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgc2V0OiBgSVBfU0VUYCwgYElQX1NFVF9CSVRNQVBfSVBgLCBgSVBfU0VUX0JJVE1BUF9JUE1BQ2AsIGBJUF9TRVRfQklUTUFQX1BPUlRgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kICBgTkVURklMVEVSX1hUX1RBUkdFVF9TRVRgIChvciBgTkVURklMVEVSX1hUX1NFVGApLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZyBuYW1lIGZvciBgeHRfU0VUYCB0byBlbnN1cmUgYWNjdXJhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3h0X1NFVHxORVRGSUxURVJfWFQuKlNFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc3Mz1jb25maWcgTkVURklMVEVSX1hUX0NPTk5NQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTc4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3ODU6Y29uZmlnIE5FVEZJTFRFUl9YVF9TRVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03ODYtXHR0cmlzdGF0ZSAmIzM5O3NldCB0YXJnZXQgYW5kIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTYwPW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICYjNDM7PSB4dF9jb25ubWFyay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1NFVCkgJiM0Mzs9IHh0X3NldC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2Mi1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX05BVCkgJiM0Mzs9IHh0X25hdC5vXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0yMT1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WHRhYmxlczogSVAgc2V0IG1hdGNoIGFuZCB0YXJnZXQgbW9kdWxlXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjI6TU9EVUxFX0FMSUFTKFwmIzM0O3h0X1NFVFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTIzLU1PRFVMRV9BTElBUyhcJiMzNDtpcHRfc2V0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYHh0X1NFVGAgTmV0ZmlsdGVyIE1vZHVsZSoqCgpPa2F5LCBzbyBgTkVURklMVEVSX1hUX1NFVGAgaXMgdGhlIE5ldGZpbHRlciB0YXJnZXQgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGB4dF9TRVRgIG1vZHVsZS4gR290IGl0LiBUaGlzIG1vZHVsZSYjMzk7cyBqb2IgaXMgdG8gc2V0IHRoZSBgZXh0LSZndDt0YXJnZXRgIGZpZWxkIHRvIGAxYCB3aGVuIGEgcGFja2V0IG1hdGNoZXMgaXRzIGNyaXRlcmlhIGFuZCB0aGUgdGFyZ2V0IGlzIGV4ZWN1dGVkLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNwb3Qtb24sIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiBgeHRfc2V0LmNgLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgcGFja2V0IGZpbHRlcmluZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC50YXJnZXQgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGAudGFyZ2V0YCBGaWVsZCBpbiBpcF9zZXRfZXh0IGFuZCBJUF9TRVRfSU5JVF9LRVhUKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGAudGFyZ2V0YCB3aXRoaW4gdGhlIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYW5kIHRoZSBgSVBfU0VUX0lOSVRfS0VYVGAgbWFjcm8uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCBleHRlbnNpb24gaW5pdGlhbGl6YXRpb24gYW5kIHRhcmdldCBhc3NpZ25tZW50LCBzbyB0aGUgc3RydWN0dXJlIGBpcF9zZXRfZXh0YCBwcm9iYWJseSBjb250YWlucyBzb21lIGRhdGEgcmVsZXZhbnQgZm9yIHRoZSBpcHNldC4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSB3aGVyZSB0aGVzZSBhcmUgZGVmaW5lZC4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIGB0YXJnZXRgIGZpZWxkIGlzIGEgc2ltcGxlIHBvaW50ZXIgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleC4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBJIGV4cGVjdCB0byBzZWUgYW4gYXNzb2NpYXRlZCBpbml0aWFsaXphdGlvbiBtYWNyby4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9JTklUX0tFWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjM9bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzMS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjUzMjojZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTMzLVx0eyAuYnl0ZXMgPSAoc2tiKS1cdTAwM2VsZW4sIC5wYWNrZXRzID0gMSwgLnRhcmdldCA9IHRydWUsXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NjYKCQkJCQkJCW91dHB1dDogMjc2CgkJCQkJCQl0aG91Z2h0czogNjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwtU3BhY2UgSVAgU2V0IEluaXRpYWxpemF0aW9uIGFuZCBDb21tZW50IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVAgc2V0cyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgY29tbWVudHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoZSBtYWNybyBgSVBfU0VUX0lOSVRfS0VYVGAsIHdoaWNoIGlzIHVzZWQgaW4gYGJpdG1hcF9pcF9rYWR0YCwgYGJpdG1hcF9pcG1hY19rYWR0YCwgYW5kIGBiaXRtYXBfcG9ydF9rYWR0YC4gIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgSVBfU0VUX0lOSVRfS0VYVGAgaXMgY2FsbGVkIHdoZW4gdGhlIGBrYWR0YCBmdW5jdGlvbiAoa2VybmVsIGFkZC9kZWwvdGVzdCkgaXMgaW52b2tlZCwgdHlwaWNhbGx5IHdoZW4gdGhlIGB4dF9zZXRgIHRhcmdldCBpcyB1c2VkLCBhbmQgaW4gdGhpcyBjYXNlLCBgZXh0LnRhcmdldGAgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBjb250cmFzdHMgd2l0aCBgSVBfU0VUX0lOSVRfVUVYVGAsIHVzZWQgZHVyaW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgKGB1YWR0YCkgd2hlcmUgYGV4dC50YXJnZXRgIGlzIGBmYWxzZWAuCgpUaGUgaW1wbGljYXRpb24gaGVyZSBpcyBjcnVjaWFsOiBXaGVuIGFkZGluZyBlbGVtZW50cyB0aHJvdWdoIHRoZSBrZXJuZWwgcGF0aCwgd2UgKmRvbiYjMzk7dCogd2FudCB0byBjYWxsIGBpcF9zZXRfaW5pdF9jb21tZW50YC4gVGhlIGtlcm5lbCBwYWNrZXQgcGF0aCBpc24mIzM5O3Qgc3VwcG9zZWQgdG8gcHJvdmlkZSBjb21tZW50cywgYW5kIHdlIGNlcnRhaW5seSBkb24mIzM5O3Qgd2FudCB0byBjbGVhciBvciBvdmVyd3JpdGUgZXhpc3RpbmcgY29tbWVudHMgd2l0aCBgTlVMTGAgaW4gdGhlIGBrYWR0YCBjb250ZXh0LiBUaGlzIGlzIHdoYXQgdGhlIHBhdGNoIGlzIGFib3V0LgoKVG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyB2ZXJpZnkgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmU6CiogICBgSVBfU0VUYCBpcyBlbmFibGVkCiogICBgSVBfU0VUX0JJVE1BUF9JUGAgaXMgZW5hYmxlZAoqICAgYElQX1NFVF9CSVRNQVBfSVBNQUNgIGlzIGVuYWJsZWQKKiAgIGBJUF9TRVRfQklUTUFQX1BPUlRgIGlzIGVuYWJsZWQKKiAgIGBORVRGSUxURVJgIGlzIGVuYWJsZWQKKiAgIGBORVRGSUxURVJfWFRfU0VUYCBpcyBlbmFibGVkCgpOb3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgc3ltYm9scyBhcmUgY29ycmVjdCwgbGV0cyB2ZXJpZnkgdGhlc2U6CiogICBgYml0bWFwX2lwX2FkZGAKKiAgIGBiaXRtYXBfaXBtYWNfYWRkYAoqICAgYGJpdG1hcF9wb3J0X2FkZGAKKiAgIGBiaXRtYXBfaXBfa2FkdGAKKiAgIGBiaXRtYXBfaXBtYWNfa2FkdGAKKiAgIGBiaXRtYXBfcG9ydF9rYWR0YAoqICAgYGJpdG1hcF9pcF91YWR0YAoqICAgYGJpdG1hcF9pcG1hY191YWR0YAoqICAgYGJpdG1hcF9wb3J0X3VhZHRgCiogICBgaXBfc2V0X2luaXRfY29tbWVudGAKClRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBtdHlwZV9hZGQoKWAgZnVuY3Rpb24gaW4gYGlwX3NldF9iaXRtYXBfZ2VuLmhgIHRvIHByZWNpc2VseSBhZGRyZXNzIHRoaXMga2VybmVsLXNpZGUgY29tbWVudCBpbml0aWFsaXphdGlvbiBpc3N1ZS4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcHJldmVudCBjb21tZW50IGV4dGVuc2lvbnMgZnJvbSBiZWluZyBpbml0aWFsaXplZCBvciBvdmVyd3JpdHRlbiB3aGVuIHRoZSBhZGRpdGlvbiBjb21lcyBmcm9tIHRoZSBrZXJuZWwgcGF0aC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIHdpdGhpbiBgYml0bWFwOmlwYCwgYGJpdG1hcDppcCxtYWNgLCBhbmQgYGJpdG1hcDpwb3J0YCBpcHNldCB0eXBlcy4KClRvIHZhbGlkYXRlIHRoaXMgcGF0Y2ggYW5kIGVuc3VyZSB0aGUgY29ycmVjdCBiZWhhdmlvciwgZnV6emluZyBpcyB0aGUgYmVzdCBhcHByb2FjaC4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgdGhlIGVsZW1lbnQgYWRkaXRpb25zIGZyb20gYm90aCBrZXJuZWwtc3BhY2UgYW5kIHVzZXJzcGFjZSBuZXRsaW5rIGNvcnJlY3RseSBoYW5kbGUgYW5kIG1haW50YWluIHNldCBleHRlbnNpb25zLCBwcmV2ZW50aW5nIGJvdGggY29tbWVudCBjb3JydXB0aW9uIGFuZCBtZW1vcnkgbGVha3MuCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHRoZSBmdXp6aW5nIHNldCB1cCwgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQTUFDJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfUE9SVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JpdG1hcF9pcF9hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX2FkZCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfcG9ydF9hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwX2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfa2FkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBfdWFkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBtYWNfdWFkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfcG9ydF91YWR0JiMzNDssCiAgICAmIzM0O2lwX3NldF9pbml0X2NvbW1lbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXR5cGVfYWRkKCkgaW4gbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIHRvIGF2b2lkIGNhbGxpbmcgaXBfc2V0X2luaXRfY29tbWVudCgpIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIHZpYSBrZXJuZWwtc2lkZSBuZXRmaWx0ZXIgcGFja2V0IHBhdGhzICh3aGVyZSBleHQtXHUwMDNldGFyZ2V0IGlzIHRydWUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciBpcHNldCBiaXRtYXAgdHlwZXMgKGJpdG1hcDppcCwgYml0bWFwOmlwLG1hYywgYml0bWFwOnBvcnQpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBleHRlbnNpb24gaGFuZGxpbmcgYW5kIGNvbW1lbnQgbGlmZWN5Y2xlIHJlbWFpbiBzb3VuZCBhY3Jvc3MgdXNlcnNwYWNlIG5ldGxpbmsgYW5kIHBhY2tldC1wcm9jZXNzaW5nIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaXRtYXBfaXBfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcF9rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfdWFkdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG10eXBlX2FkZCgpIGluIG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCB0byBhdm9pZCBjYWxsaW5nIGlwX3NldF9pbml0X2NvbW1lbnQoKSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCB2aWEga2VybmVsLXNpZGUgbmV0ZmlsdGVyIHBhY2tldCBwYXRocyAod2hlcmUgZXh0LVx1MDAzZXRhcmdldCBpcyB0cnVlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgaXBzZXQgYml0bWFwIHR5cGVzIChiaXRtYXA6aXAsIGJpdG1hcDppcCxtYWMsIGJpdG1hcDpwb3J0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgZXh0ZW5zaW9uIGhhbmRsaW5nIGFuZCBjb21tZW50IGxpZmVjeWNsZSByZW1haW4gc291bmQgYWNyb3NzIHVzZXJzcGFjZSBuZXRsaW5rIGFuZCBwYWNrZXQtcHJvY2Vzc2luZyBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBtdHlwZV9hZGQoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gY2hlY2sgYCFleHQtXHUwMDNldGFyZ2V0YCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2luaXRfY29tbWVudCgpYCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBhdHRlcm4gaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwcmV2ZW50cyBrZXJuZWwgaXB0YWJsZXMgU0VUIHRhcmdldCBhY3Rpb25zIGZyb20gY2xlYXJpbmcvbW9kaWZ5aW5nIGVsZW1lbnQgY29tbWVudHMuXG5cbi0gQWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGlwX3NldF9leHRgIGFyZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYElQX1NFVF9JTklUX0tFWFRgIG9yIGBJUF9TRVRfSU5JVF9VRVhUYCksIHdoaWNoIGZ1bGx5IHplcm8gYWxsIHVubWVudGlvbmVkIGZpZWxkcywgZW5zdXJpbmcgYGV4dC1cdTAwM2V0YXJnZXRgIGFuZCBhbGwgb3RoZXIgZmllbGRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIG5ldmVyIHVuaW5pdGlhbGl6ZWQuXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVGhlIGJ1ZyBmaXhlZCBpcyBhIGxvZ2ljIGlzc3VlICh1bmludGVuZGVkIGNvbW1lbnQgZGVsZXRpb24gZHVyaW5nIGtlcm5lbC1zcGFjZSBwYWNrZXQgbWF0Y2hpbmcvdGFyZ2V0IGV4ZWN1dGlvbikuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlNzA5ZWJjOTI1NWI5OWJkOTNhZTkzYmI5NjNiMWJiMTA4OTAwYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA1OjIyOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCmluZGV4IGQ2YTdlNjYwNDU0MjIuLmFlMzc2ZmEzZTdhM2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKQEAgLTE1OSw3ICYjNDM7MTU5LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAKIAlpZiAoU0VUX1dJVEhfQ09VTlRFUihzZXQpKQogCQlpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7Ci0JaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkKJiM0MzsJaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSAmYW1wOyZhbXA7ICFleHQtJmd0O3RhcmdldCkKIAkJaXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7CiAJaWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSkKIAkJaXBfc2V0X2luaXRfc2tiaW5mbyhleHRfc2tiaW5mbyh4LCBzZXQpLCBleHQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUmVxdWVzdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyBhIExpbnV4IGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCwgYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgaXQuIEl0JiMzOTtzIGEgbG93LXNldmVyaXR5LCBkZWZlbnNpdmUgY29kZSByZXZpZXcsIGJhc2ljYWxseSBhIHNhbml0aXplciBzZWxlY3Rpb24gaXNzdWUuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgY2hhbmdlIHRob3JvdWdobHkuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gcHJvYmFibHkgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgdGhlIHBhdGNoICphY3R1YWxseSogZG9lcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkgaGVyZSDigJMgYXJlIHdlIGNyZWF0aW5nIGFueSBuZXcsIG9yIG1ha2luZyBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBzdGF0ZXMgYWNjZXNzaWJsZT8gSWYgSSBmaW5kIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGl0LCBJJiMzOTtsbCBmbGFnIGl0IGZvciBLTVNBTi4gSSYjMzk7bGwgbmVlZCB0byB0aGVuIGRvY3VtZW50IHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgYXR0ZW50aW9uIHRvIGRldGFpbCBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNy0jZGVmaW5lIG10eXBlX2FkdF9lbGVtXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWR0X2VsZW0pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg6I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfdGltZW91dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOS0jZGVmaW5lIG10eXBlX2djX2luaXRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yOC0jZGVmaW5lIG10eXBlX3Rlc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI5OiNkZWZpbmUgbXR5cGVfYWRkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwLSNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMjk9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjEzMDptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzEtXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NC0jaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NTpcdFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTYtI2Vsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA1LVx0LmFkdFx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MzA2Olx0XHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMDctXHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOS0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjEtI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIzMjojdW5kZWYgbXR5cGVfYWRkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIzMy0jdW5kZWYgbXR5cGVfZGVsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfY2xlYW51cClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI3OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjgwOiNkZWZpbmUgbXR5cGVfYWRkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODEtI2RlZmluZSBtdHlwZV9kZWxcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNDUtLyoqXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNDctICogQHNldDogUG9pbnRlciB0byB0aGUgaXBfc2V0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozNTg6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM1OS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA0LVx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1Olx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjk4ODptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTg5LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExMy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XHRcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaSksIGkpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTE1LSNlbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzQtXHQuYWR0XHQ9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzNTpcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzYtXHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEJpdG1hcCBHZW5lcmF0aW9uIGluIGBpcHNldGAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBpcHNldGAgYml0bWFwIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIGdlbmVyYXRpbmcgdGhlIGJpdG1hcHMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgZm9jdXMgb24gbGluZXMgMTMwIHRocm91Z2ggMTgwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGJpdG1hcCBnZW5lcmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBgaXBzZXRgIGZyYW1ld29yay4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGJpdHdpc2Ugb3BlcmF0aW9ucyBhbmQgYWRkcmVzcyBtYXBwaW5nIHdpdGhpbiB0aGF0IHNlY3Rpb24uIEl0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCB0byBhY2hpZXZlIGVmZmljaWVudCBsb29rdXBzIGFuZCBzdG9yYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uLi4gSSBuZWVkIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNjpcdFx0cmV0dXJuIGlwX3NldF9tYXRjaF9leHRlbnNpb25zKHNldCwgZXh0LCBtZXh0LCBmbGFncywgeCk7XG4gMTI3Olx0fVxuIDEyODpcdFxuIDEyOTpcdHN0YXRpYyBpbnRcbiAxMzA6XHRtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAxMzE6XHRcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAxMzI6XHR7XG4gMTMzOlx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDEzNDpcdFx0Y29uc3Qgc3RydWN0IG10eXBlX2FkdF9lbGVtICplID0gdmFsdWU7XG4gMTM1Olx0XHR2b2lkICp4ID0gZ2V0X2V4dChzZXQsIG1hcCwgZS1cdTAwM2VpZCk7XG4gMTM2Olx0XHRpbnQgcmV0ID0gbXR5cGVfZG9fYWRkKGUsIG1hcCwgZmxhZ3MsIHNldC1cdTAwM2Vkc2l6ZSk7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAocmV0ID09IElQU0VUX0FERF9GQUlMRUQpIHtcbiAxMzk6XHRcdFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSBcdTAwMjZcdTAwMjZcbiAxNDA6XHRcdFx0ICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQoeCwgc2V0KSkpIHtcbiAxNDE6XHRcdFx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbiAxNDI6XHRcdFx0XHRyZXQgPSAwO1xuIDE0MzpcdFx0XHR9IGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfRVhJU1QpKSB7XG4gMTQ0Olx0XHRcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTQ1Olx0XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XG4gMTQ2Olx0XHRcdH1cbiAxNDc6XHRcdFx0LyogRWxlbWVudCBpcyByZS1hZGRlZCwgY2xlYW51cCBleHRlbnNpb25zICovXG4gMTQ4Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xuIDE0OTpcdFx0fVxuIDE1MDpcdFx0aWYgKHJldCBcdTAwM2UgMClcbiAxNTE6XHRcdFx0c2V0LVx1MDAzZWVsZW1lbnRzLS07XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxuIDE1NDpcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG4gMTU1Olx0XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG4gMTU2Olx0I2Vsc2VcbiAxNTc6XHRcdFx0aXBfc2V0X3RpbWVvdXRfc2V0KGV4dF90aW1lb3V0KHgsIHNldCksIGV4dC1cdTAwM2V0aW1lb3V0KTtcbiAxNTg6XHQjZW5kaWZcbiAxNTk6XHRcbiAxNjA6XHRcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXG4gMTYxOlx0XHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcbiAxNjI6XHRcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIDE2MzpcdFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiAxNjQ6XHRcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gMTY1Olx0XHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiAxNjY6XHRcbiAxNjc6XHRcdC8qIEFjdGl2YXRlIGVsZW1lbnQgKi9cbiAxNjg6XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIDE2OTpcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTcwOlx0XHRzZXQtXHUwMDNlZWxlbWVudHMmIzQzOyYjNDM7O1xuIDE3MTpcdFxuIDE3MjpcdFx0cmV0dXJuIDA7XG4gMTczOlx0fVxuIDE3NDpcdFxuIDE3NTpcdHN0YXRpYyBpbnRcbiAxNzY6XHRtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAxNzc6XHRcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAxNzg6XHR7XG4gMTc5Olx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDE4MDpcdFx0Y29uc3Qgc3RydWN0IG10eXBlX2FkdF9lbGVtICplID0gdmFsdWU7XG4gMTgxOlx0XHR2b2lkICp4ID0gZ2V0X2V4dChzZXQsIG1hcCwgZS1cdTAwM2VpZCk7XG4gMTgyOlx0XG4gMTgzOlx0XHRpZiAobXR5cGVfZG9fZGVsKGUsIG1hcCkpXG4gMTg0Olx0XHRcdHJldHVybiAtSVBTRVRfRVJSX0VYSVNUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIGlwX3NldCBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhpcyBgaXBfc2V0YCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGV4dC0mZ3Q7dGFyZ2V0YCBhbmQgYGlwX3NldF9pbml0X2NvbW1lbnRgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG1hY3JvIGBTRVRfV0lUSF9DT01NRU5UYCBtYXkgYWxzbyBiZSByZWxldmFudC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhlc2UgYXJlIGFsbCBjb25uZWN0ZWQgc29tZWhvdywgYW5kIHRyYWNpbmcgdXNhZ2UgaXMgbXkgYmVzdCBiZXQuIFNvLCBsZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcGAuIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIG9jY3VycmVuY2VzIG9mIGBpcF9zZXRfaW5pdF9jb21tZW50YCwgdGhlIG1hY3JvIGBTRVRfV0lUSF9DT01NRU5UYCwgYW5kIGFsc28sIGNyaXRpY2FsbHksIGBleHQtJmd0O3RhcmdldGAuIFNlZWluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMsIG1hY3JvLCBhbmQgc3RydWN0dXJlIG1lbWJlciBhcmUgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgY2x1ZXMgSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGdyZXAgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTYyLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTYzOlx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjQtXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDY9dm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM0NzppcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OC1cdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM2OC19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM3MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjMtXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyNDpcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjUtXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjIxPWxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMjYtXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMjc6XHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChlLCBzZXQpLCBleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMjgtXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBTZXQgQ29yZSBhbmQgSGFzaCBHZW5lcmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhlIElQIHNldCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgaGFzaCBnZW5lcmF0aW9uIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGV4YW1pbmUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2AgYXJvdW5kIGxpbmUgMzQ2LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYmFzaWMgSVAgc2V0IGRhdGEgc3RydWN0dXJlcyBhbmQgb3BlcmF0aW9ucyBhcmUgbWFuYWdlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBmdW5jdGlvbiBjYWxscyBvciBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGVyZSB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB3aG9sZSB0aGluZy4KClRoZW4sIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBoYXNoIGltcGxlbWVudGF0aW9uLCBJIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFyb3VuZCBsaW5lIDExMjAuIFRoZSBoZWFkZXIgZmlsZXMgYXJlIGdlbmVyYWxseSB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIG1hY3JvcywgYW5kIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkcml2ZSB0aGUgY3JpdGljYWwgYWxnb3JpdGhtcywgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGhvbGRzIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBoYXNoIHRhYmxlIGdlbmVyYXRpb24gaW4gdGhhdCBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGRldGFpbHMgYXJlIGNvcnJlY3QuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyBjb2xsaXNpb25zLCBob3cgdGhleSBhcmUgYnVpbGRpbmcgdGhlIGhhc2ggdGFibGVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuIFRoYXQmIzM5O2xsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRyZXR1cm4gbmxhX2RhdGEodGIpO1xuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHQvKiBDYWxsZWQgZnJvbSB1YWRkIG9ubHksIHByb3RlY3RlZCBieSB0aGUgc2V0IHNwaW5sb2NrLlxuIDM0NDpcdCAqIFRoZSBrYWR0IGZ1bmN0aW9ucyBkb24mIzM5O3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cbiAzNDU6XHQgKi9cbiAzNDY6XHR2b2lkXG4gMzQ3Olx0aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiAzNDg6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4gMzQ5Olx0e1xuIDM1MDpcdFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiAzNTE6XHRcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIDM1MjpcdFxuIDM1MzpcdFx0aWYgKHVubGlrZWx5KGMpKSB7XG4gMzU0Olx0XHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiAzNTU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gMzU2Olx0XHRcdGtmcmVlX3JjdShjLCByY3UpO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFx0aWYgKCFsZW4pXG4gMzU5Olx0XHRcdHJldHVybjtcbiAzNjA6XHRcdGlmICh1bmxpa2VseShsZW4gXHUwMDNlIElQU0VUX01BWF9DT01NRU5UX1NJWkUpKVxuIDM2MTpcdFx0XHRsZW4gPSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFO1xuIDM2MjpcdFx0YyA9IGttYWxsb2Moc2l6ZW9mKCpjKSAmIzQzOyBsZW4gJiM0MzsgMSwgR0ZQX0FUT01JQyk7XG4gMzYzOlx0XHRpZiAodW5saWtlbHkoIWMpKVxuIDM2NDpcdFx0XHRyZXR1cm47XG4gMzY1Olx0XHRzdHJzY3B5KGMtXHUwMDNlc3RyLCBleHQtXHUwMDNlY29tbWVudCwgbGVuICYjNDM7IDEpO1xuIDM2NjpcdFx0YXRvbWljNjRfYWRkKHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIDM2NzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgYyk7XG4gMzY4Olx0fVxuIDM2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xuIDM3MDpcdFxuIDM3MTpcdC8qIFVzZWQgb25seSB3aGVuIGR1bXBpbmcgYSBzZXQsIHByb3RlY3RlZCBieSByY3VfcmVhZF9sb2NrKCkgKi9cbiAzNzI6XHRzdGF0aWMgaW50XG4gMzczOlx0aXBfc2V0X3B1dF9jb21tZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudClcbiAzNzQ6XHR7XG4gMzc1Olx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjID0gcmN1X2RlcmVmZXJlbmNlKGNvbW1lbnQtXHUwMDNlYyk7XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoIWMpXG4gMzc4Olx0XHRcdHJldHVybiAwO1xuIDM3OTpcdFx0cmV0dXJuIG5sYV9wdXRfc3RyaW5nKHNrYiwgSVBTRVRfQVRUUl9DT01NRU5ULCBjLVx1MDAzZXN0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgYCFleHQtJmd0O3RhcmdldGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBjaGVjaywgc3BlY2lmaWNhbGx5IHdoeSBgIWV4dC0mZ3Q7dGFyZ2V0YCB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCB0aGUgZmllbGQgYGV4dC0mZ3Q7dGFyZ2V0YCBhY3R1YWxseSByZXByZXNlbnRzLiBUaW1lIHRvIGdvIGh1bnRpbmcuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiB0aGUgYHN0cnVjdCBpcF9zZXRfZXh0YCBkZWZpbml0aW9uIGFuZCBhbnkgc3Vycm91bmRpbmcgY29kZSBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYGV4dC0mZ3Q7dGFyZ2V0YCBhbmQganVzdCBwbGFpbiBgdGFyZ2V0YC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBvdmVydmlldyBvZiBob3cgaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IHRvIGxvb2sgYXQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xMTY9c3RydWN0IGlwX3NldF9leHQge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTEyMy1cdHU4IGJ5dGVzX29wO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MTI0Olx0Ym9vbCB0YXJnZXQ7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xMjUtfTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xNDE9c3RydWN0IGlwX3NldF9hZHRfb3B0IHtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0Mi1cdHU4IGZhbWlseTtcdFx0LyogQWN0dWFsIHByb3RvY29sIGZhbWlseSAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MTQzOlx0dTggZGltO1x0XHRcdC8qIERpbWVuc2lvbiBvZiBtYXRjaC90YXJnZXQgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0NC1cdHU4IGZsYWdzO1x0XHQvKiBEaXJlY3Rpb24gYW5kIG5lZ2F0aW9uIGZsYWdzICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9MzE2PWV4dGVybiB2b2lkIGlwX3NldF9uZm5sX3B1dChzdHJ1Y3QgbmV0ICpuZXQsIGlwX3NldF9pZF90IGluZGV4KTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMxNy1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjMxODovKiBBUEkgZm9yIGlwdGFibGVzIHNldCBtYXRjaCwgYW5kIFNFVCB0YXJnZXQgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMxOS1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjM9bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzMi0jZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTMzOlx0eyAuYnl0ZXMgPSAoc2tiKS1cdTAwM2VsZW4sIC5wYWNrZXRzID0gMSwgLnRhcmdldCA9IHRydWUsXFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzNC1cdCAgLnRpbWVvdXQgPSBpcF9zZXRfYWR0X29wdF90aW1lb3V0KG9wdCwgc2V0KSB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYElQX1NFVF9JTklUX0tFWFRgIG1hY3JvLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyB1c2VkIHRvIGluaXRpYWxpemUgc29tZSBzb3J0IG9mIGBpcF9zZXRgIHN0cnVjdHVyZSBmb3Iga2VybmVsIGV4dGVuc2lvbnMgKGtleHRzKS4gIEl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIGJhc2ljczogdGhlIG51bWJlciBvZiBieXRlcyBhbmQgcGFja2V0cywgYSBib29sZWFuIGluZGljYXRpbmcgYSAmIzM5O3RhcmdldCYjMzk7LCBhbmQgYSB0aW1lb3V0IHZhbHVlLiAgVGhlIGAoc2tiKS0mZ3Q7bGVuYCBwYXJ0IGlzIGludGVyZXN0aW5nOyB0aGF0IGxpa2VseSByZWZlcnMgdG8gdGhlIHNpemUgb2YgYSBzb2NrZXQgYnVmZmVyLiBUaGUgYGlwX3NldF9hZHRfb3B0X3RpbWVvdXRgIHN1Z2dlc3RzIHNvbWUgZHluYW1pYyB0aW1lb3V0IGNhbGN1bGF0aW9uLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlLCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBpcF9zZXQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTE2LTEzMDsgdGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoIHRoZSBgSVBfU0VUYCBhbmQgc3Vycm91bmRpbmcgbG9naWMuIEFsc28gSSYjMzk7bGwgY2hlY2sgYGlwX3NldF9oYXNoX2dlbi5oYCBhcm91bmQgbGluZSAxMTIzLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBpbiBjb250ZXh0LiBNaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnksIGlmIEkgY2FuIGFjY2VzcyBpdCwgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhpcyBpbml0aWFsaXphdGlvbi4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBpcF9zZXRfaGFzaF9nZW4uaGAgaW4gZGVwdGguIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgbWFjcm8gZml0cyBpbnRvIHRoZSBsYXJnZXIgYGlwX3NldGAgZnJhbWV3b3JrIGFuZCBob3cgaGFzaCBnZW5lcmF0aW9uIHBsYXlzIGEgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XG4gMTE2Olx0c3RydWN0IGlwX3NldF9leHQge1xuIDExNzpcdFx0c3RydWN0IGlwX3NldF9za2JpbmZvIHNrYmluZm87XG4gMTE4Olx0XHR1NjQgcGFja2V0cztcbiAxMTk6XHRcdHU2NCBieXRlcztcbiAxMjA6XHRcdGNoYXIgKmNvbW1lbnQ7XG4gMTIxOlx0XHR1MzIgdGltZW91dDtcbiAxMjI6XHRcdHU4IHBhY2tldHNfb3A7XG4gMTIzOlx0XHR1OCBieXRlc19vcDtcbiAxMjQ6XHRcdGJvb2wgdGFyZ2V0O1xuIDEyNTpcdH07XG4gMTI2Olx0XG4gMTI3Olx0I2RlZmluZSBleHRfdGltZW91dChlLCBzKVx0XFxcbiAxMjg6XHQoKHVuc2lnbmVkIGxvbmcgKikoKCh2b2lkICopKGUpKSAmIzQzOyAocyktXHUwMDNlb2Zmc2V0W0lQU0VUX0VYVF9JRF9USU1FT1VUXSkpXG4gMTI5Olx0I2RlZmluZSBleHRfY291bnRlcihlLCBzKVx0XFxcbiAxMzA6XHQoKHN0cnVjdCBpcF9zZXRfY291bnRlciAqKSgoKHZvaWQgKikoZSkpICYjNDM7IChzKS1cdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX0NPVU5URVJdKSlcbiAxMzE6XHQjZGVmaW5lIGV4dF9jb21tZW50KGUsIHMpXHRcXFxuIDEzMjpcdCgoc3RydWN0IGlwX3NldF9jb21tZW50ICopKCgodm9pZCAqKShlKSkgJiM0MzsgKHMpLVx1MDAzZW9mZnNldFtJUFNFVF9FWFRfSURfQ09NTUVOVF0pKVxuIDEzMzpcdCNkZWZpbmUgZXh0X3NrYmluZm8oZSwgcylcdFxcXG4gMTM0Olx0KChzdHJ1Y3QgaXBfc2V0X3NrYmluZm8gKikoKCh2b2lkICopKGUpKSAmIzQzOyAocyktXHUwMDNlb2Zmc2V0W0lQU0VUX0VYVF9JRF9TS0JJTkZPXSkpXG4gMTM1Olx0XG4gMTM2Olx0dHlwZWRlZiBpbnQgKCppcHNldF9hZHRmbikoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSxcbiAxMzc6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIDEzODpcdFx0XHRcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgY21kZmxhZ3MpO1xuIDEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaXBfc2V0YCBDb21tZW50IEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgMTEyMyBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgIGhhcyBtZSBzY3JhdGNoaW5nIG15IGhlYWQuIFRoZSBjb25kaXRpb25hbDogYGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgJmFtcDsmYW1wOyAhZXh0LSZndDt0YXJnZXQpYC4uLiB3aHkgdGhlIGAhZXh0LSZndDt0YXJnZXRgIGNoZWNrPyBJdCYjMzk7cyBhIGtleSBkZXRhaWwsIHNvIGxldCYjMzk7cyBkaWcgaW50byBpdC4KClJlYWRpbmcgYXJvdW5kIGBpcF9zZXRfaW5pdF9jb21tZW50YCBpbiBgaXBfc2V0X2NvcmUuY2AsIEkgc2VlIHRoZSBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgbWFya2VkIGFzIGJlaW5nIGNhbGxlZCBmcm9tIGB1YWRkYCAqb25seSosIGFuZCBwcm90ZWN0ZWQgYnkgdGhlIHNldCYjMzk7cyBzcGlubG9jay4gVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCB0aGUga2FkdCBmdW5jdGlvbnMsIHdoaWNoIGlzIGhvdyB3ZSBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgZnJvbSB0aGUgdXNlciBzcGFjZSB3aGVuIHVzaW5nIHRoZSBTRVQgdGFyZ2V0LCBkb24mIzM5O3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS4KCkFoYSEgVGhhdCYjMzk7cyBpdC4gV2hlbiBhIHBhY2tldCBtYXRjaGluZyBydWxlIG9yIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0IGNhbGxzIHRoZSBhZGQgZnVuY3Rpb25hbGl0eSAod2hpY2ggbWVhbnMgdGhyb3VnaCB0aGUga2FkdCAvIGtlcm5lbCBhZGQpIGBleHQtJmd0O3RhcmdldGAgZ2V0cyBzZXQgdG8gYHRydWVgLiBUaGlzIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlIGBleHQtJmd0O2NvbW1lbnRgIHN0cnVjdHVyZSBpcyBub3QgcHJvdmlkZWQuIElmIGBpcF9zZXRfaW5pdF9jb21tZW50YCB3ZXJlIGNhbGxlZCBmcm9tIHRoZSBwYWNrZXQgY29udGV4dCwgaXQmIzM5O3MgZWl0aGVyIG5vdCBleHBlY3RpbmcgdGhlIGNvbW1lbnQgb3IsIHRoZSBjb2RlIHNob3VsZG4mIzM5O3QgYmUgb3ZlcndyaXRpbmcgYW55IGNvbW1lbnRzIG9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgbWVtb3J5IHdpdGggYGtmcmVlX3JjdWAgd2l0aG91dCBhcHByb3ByaWF0ZSBsb2NraW5nIG9yIHVzZXIgY29udGV4dC4gVGhhdCYjMzk7cyBhIGh1Z2UgcG90ZW50aWFsIGlzc3VlLgoKV2FpdCBhIHNlY29uZC4uLiBpbiBgaXBfc2V0X2luaXRfY29tbWVudGAsIHRoZXJlJiMzOTtzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNvbW1lbnQtJmd0O2MsIDEpYCBhbmQgdGhlbiBgYXRvbWljNjRfc3ViYCBvciBgYXRvbWljNjRfYWRkYCBtb2RpZmllcyBgc2V0LSZndDtleHRfc2l6ZWAgb3IgZnJlZXMgYGNgLiBJZiB3ZSB3ZXJlIHRvIGNhbGwgYGlwX3NldF9pbml0X2NvbW1lbnRgIGZyb20gdGhlIGtlcm5lbCBwYWNrZXQgcGF0aCwgcG90ZW50aWFsbHkgYXMgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQsIHRoaXMgY291bGQgb2JsaXRlcmF0ZSBhbiBleGlzdGluZyBjb21tZW50LCBpbnRyb2R1Y2UgY29uY3VycmVuY3kgcHJvYmxlbXMsIG9yIHdvcnNlLiBUaGUgYGlwX3NldF9oYXNoX2dlbi5oYCBjb2RlIGFscmVhZHkgaGFzIHRoaXMgc2FmZWd1YXJkIGluIHBsYWNlOiBgaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSAmYW1wOyZhbXA7ICFleHQtJmd0O3RhcmdldClgLiBJdCBpcyBhIGdvb2QgdGhpbmcgdGhhdCBpdCYjMzk7cyB0aGVyZS4KCkJ1dCBub3cgSSBzZWUgaXQuLi5gaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgbWlzc2luZyB0aGF0IHZpdGFsIGAmYW1wOyZhbXA7ICFleHQtJmd0O3RhcmdldGAgY2hlY2shIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5IHRoYXQgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgZnVsbCBhdWRpdCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFuZCBsb29rIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVsYXRlZCB0byBgZXh0LSZndDt0YXJnZXRgLCBgaXBfc2V0X2V4dGAgb3IgYGV4dC0mZ3Q7Y29tbWVudGAuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyB3aGVyZSBgaXBfc2V0X2V4dGAgaXMgaW5pdGlhbGl6ZWQgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvci4gVGhpcyBuZWVkcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24gdG8gcHJldmVudCBhbnkgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgZGV2YXN0YXRpbmcsIGZsYXdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaXBfc2V0X2V4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTExNT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTE2Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMTc6XHQgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTExOC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEyOT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjEzMTpcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xNzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE3NjptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNzc6XHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTc4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0xMTA9Yml0bWFwX2lwX2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExNi1cdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTE3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExOC1cdHUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0xMzA9Yml0bWFwX2lwX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTEzNi1cdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTM3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTM4LVx0aW50IHJldCA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MTE3PWJpdG1hcF9pcG1hY19hZGRfdGltZW91dCh1bnNpZ25lZCBsb25nICp0aW1lb3V0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMTE4LVx0XHRcdCBjb25zdCBzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtICplLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MTE5Olx0XHRcdCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0xMjAtXHRcdFx0IHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCwgaW50IG1vZGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MjA5PWJpdG1hcF9pcG1hY19rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTUtXHRzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAsIC5hZGRfbWFjID0gMSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjE2Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTIxNy1cdHUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0yNDI9Yml0bWFwX2lwbWFjX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0Ny1cdHN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjQ4Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjQ5LVx0dTMyIGlwID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTEyNz1iaXRtYXBfcG9ydF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzMy1cdHN0cnVjdCBiaXRtYXBfcG9ydF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjEzNDpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzNS1cdF9fYmUxNiBfX3BvcnQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0xNTM9Yml0bWFwX3BvcnRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNTgtXHRzdHJ1Y3QgYml0bWFwX3BvcnRfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoxNTk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTE2MC1cdHUzMiBwb3J0O1x0Lyogd3JhcGFyb3VuZCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDc9aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDg6XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwMT10eXBlZGVmIHZvaWQgKCpkZXN0cm95ZXIpKHN0cnVjdCBpcF9zZXQgKiwgdm9pZCAqKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDAzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQwNDpjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDA1LVx0W0lQU0VUX0VYVF9JRF9DT1VOVEVSXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDY4PWlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDY5Olx0XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQ3MC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYyMD1pcF9zZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYyMTpcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYyMi17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYzMT1pcF9zZXRfZ2V0X3NrYmluZm8oc3RydWN0IGlwX3NldF9za2JpbmZvICpza2JpbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYzMjpcdFx0ICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MzM6XHRcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjM0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjM4PWJvb2xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2Mzk6aXBfc2V0X21hdGNoX2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjY0MDpcdFx0XHRzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzLCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTY0MS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMzgtXHRzdHJ1Y3QgbXR5cGVfZWxlbSBkO1x0LyogRWxlbWVudCB2YWx1ZSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMzk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQ7XHQvKiBFeHRlbnNpb25zIGZvciBBREQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzQwOlx0c3RydWN0IGlwX3NldF9leHQgbWV4dDtcdC8qIFRhcmdldCBleHRlbnNpb25zIGZvciBBREQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQxLVx0dTMyIGZsYWdzO1x0XHQvKiBGbGFncyBmb3IgQUREICovXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MjpcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0My1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0NDptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQ1Olx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzQ2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTg4Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODk6XHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk5MC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTUxLVx0XHRtZW1jcHkoXHUwMDI2eC1cdTAwM2VkLCB2YWx1ZSwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNTI6XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWV4dCwgZXh0LCBzaXplb2Yoc3RydWN0IGlwX3NldF9leHQpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE1MzpcdFx0bWVtY3B5KFx1MDAyNngtXHUwMDNlbWV4dCwgbWV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNTQtXHRcdHgtXHUwMDNlZmxhZ3MgPSBmbGFncztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzg9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTc5Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTgwOlx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTgxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEyODY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjg3Om10eXBlX2RhdGFfbWF0Y2goc3RydWN0IG10eXBlX2VsZW0gKmRhdGEsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyODg6XHRcdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgc3RydWN0IGlwX3NldCAqc2V0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEyODkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTMwMT1tdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzMDI6XHRcdCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzAzOlx0XHQgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTMwNC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzg2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTM4NzptdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzODg6XHQgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzg5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9ODA9aGFzaF9pcDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTg2LVx0c3RydWN0IGhhc2hfaXA0X2VsZW0gZSA9IHsgMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjg3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy04OC1cdF9fYmUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MTAwPWhhc2hfaXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDUtXHRzdHJ1Y3QgaGFzaF9pcDRfZWxlbSBlID0geyAwIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MTA2Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTEwNy1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMCwgaG9zdHMsIGkgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMTY9aGFzaF9pcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyMi1cdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMjM6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyNC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjM0PWhhc2hfaXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMzktXHRzdHJ1Y3QgaGFzaF9pcDZfZWxlbSBlID0geyB7IC5hbGwgPSB7IDAgfSB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjQwOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTI0MS1cdGludCByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTg1PWhhc2hfaXBtYWM0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy05MC1cdHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtIGUgPSB7IC5pcCA9IDAsIHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo5MTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTItXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTExMT1oYXNoX2lwbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTE1LVx0c3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gZSA9IHsgLmlwID0gMCwgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjExNjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xMTctXHRpbnQgcmV0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0xOTg9aGFzaF9pcG1hYzZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTIwNi1cdH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MjA3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTIyNz1oYXNoX2lwbWFjNl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjM0LVx0fTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoyMzU6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjM2LVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTgwPWhhc2hfaXBtYXJrNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVx0c3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjg3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtODgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDItXHRzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MTAzOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDQtXHR1MzIgaXAsIGlwX3RvID0gMCwgaSA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMTk9aGFzaF9pcG1hcms2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjI1LVx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjIyNjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTIzNj1oYXNoX2lwbWFyazZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDEtXHRzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjQyOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDMtXHRpbnQgcmV0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9OTE9aGFzaF9pcHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTYtXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo5NzpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTk4LVx0Y29uc3Qgc3RydWN0IE1UWVBFICpoID0gc2V0LVx1MDAzZWRhdGE7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0xMTI9aGFzaF9pcHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE3LVx0c3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MTE4Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTktXHR1MzIgaXAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG8sIGkgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjY0PWhhc2hfaXBwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2OS1cdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI3MDpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI3MS1cdGNvbnN0IHN0cnVjdCBNVFlQRSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9Mjg2PWhhc2hfaXBwb3J0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5MS1cdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI5MjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjkzLVx0dTMyIHBvcnQsIHBvcnRfdG87XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTkwPWhhc2hfaXBwb3J0aXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzo5NjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtOTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTEwOD1oYXNoX2lwcG9ydGlwNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMTEzLVx0c3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjExNDpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTUtXHR1MzIgaXAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG8sIGkgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNjM9aGFzaF9pcHBvcnRpcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI2OC1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtIGUgPSB7IC5pcCA9IHsgLmFsbCA9IHsgMCB9IH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoyNjk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI3MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjgxPWhhc2hfaXBwb3J0aXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yODYtXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBlID0geyAgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NzpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yODgtXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEzND1oYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNDItXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxNDM6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNDQtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xNjA9aGFzaF9pcHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTY1LVx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIC0gMSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxNjY6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2Ny1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG87XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zOTQ9aGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDAyLVx0fTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDAzOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDA0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9NDIwPWhhc2hfaXBwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQyNS1cdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDI2Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00MjctXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTczPWhhc2hfbWFjNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTc4LVx0c3RydWN0IGhhc2hfbWFjNF9lbGVtIGUgPSB7IHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6Nzk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy04MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTk2PWhhc2hfbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTEwMC1cdHN0cnVjdCBoYXNoX21hYzRfZWxlbSBlID0geyB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjEwMTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtMTAyLVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTExMz1oYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMjEtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMjI6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMjMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzY9aGFzaF9uZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQxLVx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjE0MjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQzLVx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBpID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI4Nz1oYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yOTUtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyOTY6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yOTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE0LVx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjMxNTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE2LVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNjUtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjE2NjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTY3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xOTc9aGFzaF9uZXRpZmFjZTRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMi1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLLCAuZWxlbSA9IDEgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoyMDM6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMjA0LVx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBpID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9Mzc3PWhhc2hfbmV0aWZhY2U2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zODYtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4NzpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzg4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz00MTY9aGFzaF9uZXRpZmFjZTZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQyMC1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLLCAuZWxlbSA9IDEgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzo0MjE6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtNDIyLVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTE0Mz1oYXNoX25ldG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDktXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTUwOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTUxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTY4PWhhc2hfbmV0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3My1cdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxNzQ6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3NS1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM4ND1oYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zOTAtXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzkxOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzkyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9NDE0PWhhc2hfbmV0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxOC1cdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzo0MTk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQyMC1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMjk9aGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMzctXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTM4Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xNTQ9aGFzaF9uZXRwb3J0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xNTktXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIC0gMSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTYwOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTYxLVx0dTMyIHBvcnQsIHBvcnRfdG8sIHAgPSAwLCBpcCA9IDAsIGlwX3RvID0gMCwgaSA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzQ5PWhhc2hfbmV0cG9ydDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzU3LVx0fTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM1ODpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNTktXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9Mzc0PWhhc2hfbmV0cG9ydDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzc5LVx0c3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAgLSAxIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozODA6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zODEtXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xNTA9aGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNTYtXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxNTc6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE4OT1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5NC1cdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE5NTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5Ni1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG87XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDQ3PWhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDUzLVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDU0Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ1NS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz00NzY9aGFzaF9uZXRwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00ODEtXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0ODI6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00ODMtXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTQ5PWxpc3Rfc2V0X2t0ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTAtXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1MTpcdCAgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTIte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01My1cdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU0Olx0c3RydWN0IGlwX3NldF9leHQgKm1leHQgPSBcdTAwMjZvcHQtXHUwMDNlZXh0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NS1cdHN0cnVjdCBzZXRfZWxlbSAqZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTc0PWxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy03NS1cdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NzY6XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNzcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9OTQ9bGlzdF9zZXRfa2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTk1LVx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo5NjpcdCAgICAgIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy05Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xMTQ9bGlzdF9zZXRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMTcte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxMTg6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMTktXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE4ND1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjE4NTpsaXN0X3NldF91dGVzdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxODY6XHQgICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIyMD1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMjE6bGlzdF9zZXRfaW5pdF9leHRlbnNpb25zKHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjIyLVx0XHRcdCBzdHJ1Y3Qgc2V0X2VsZW0gKmUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzY6bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzc6XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzIwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzIxOmxpc3Rfc2V0X3VkZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzIyOlx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzIzLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTM1Mz1saXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM1OC1cdHN0cnVjdCBzZXRfYWR0X2VsZW0gZSA9IHsgLnJlZmlkID0gSVBTRVRfSU5WQUxJRF9JRCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM2MC1cdHN0cnVjdCBpcF9zZXQgKnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6ZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgSVBfU0VUX0lOSVRfS0VYVGAgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgQzk5IHN5bnRheC4gV2UmIzM5O3JlIGRpcmVjdGx5IHNldHRpbmcgYC5ieXRlc2AsIGAucGFja2V0c2AsIGAudGFyZ2V0YCwgYW5kIGAudGltZW91dGAgd2l0aGluIHRoZSBzdHJ1Y3QuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYnkgZXhwbGljaXRseSBzZXR0aW5nIHRob3NlIGZpZWxkcywgQzk5IGd1YXJhbnRlZXMgdGhhdCBhbnkgdW5tZW50aW9uZWQgZmllbGRzIHdpbGwgYmUgaW1wbGljaXRseSB6ZXJvZWQgb3V0LiBTbywgd2hpbGUgd2UgYXJlbiYjMzk7dCBzZWVpbmcgaXQgZGlyZWN0bHksIHRoZSBgZXh0LmNvbW1lbnQgPSBOVUxMYCBwYXJ0IGlzIGVmZmVjdGl2ZWx5IGltcGxpZWQuIFRoaXMgZGVzaWduYXRlZCBpbml0aWFsaXphdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB3ZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkgbGVhdmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhcm91bmQuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBgSVBfU0VUX0lOSVRfVUVYVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBtYWNybyBhY3R1YWxseSBleHBhbmRzIHRvLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgaW5pdGlhbGl6ZXIgaXMgY29uc3RydWN0ZWQuIEkgd2lsbCBleGFtaW5lIGl0LCB0byB1bmRlcnN0YW5kIGlmIGl0IHRvbyB1c2VzIGRlc2lnbmF0ZWQgaW5pdGlhbGl6YXRpb24gYW5kIHplcm8tZmlsbHMgdGhlIHJlbWFpbmluZyBtZW1vcnksIG9yIGlmIGl0IGV4cGxpY2l0bHkgc3BlY2lmaWVzIGV2ZXJ5IGZpZWxkIGluIHRoZSBzdHJ1Y3QsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgYXJlIGhhbmRsaW5nIG1lbW9yeSBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfU0VUX0lOSVRfVUVYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTUyMz1uZl9pbmV0X2FkZHJfbWFza19pbnBsYWNlKHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTM1LVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTM2OiNkZWZpbmUgSVBfU0VUX0lOSVRfVUVYVChzZXQpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTM3LVx0eyAuYnl0ZXMgPSBVTExPTkdfTUFYLCAucGFja2V0cyA9IFVMTE9OR19NQVgsXHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU2MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpcF9zZXQuaGAgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBpcF9zZXQuaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNTM2LiBJIGtub3cgdGhpcyBmaWxlIHByZXR0eSB3ZWxsLCBzbyBob3BlZnVsbHksIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHdoYXRldmVyIHNlY3Rpb24gaXMgcmVsZXZhbnQuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIHNvbWV0aGluZyByZWxhdGl2ZWx5IGltcG9ydGFudCwgb3IgZWxzZSBJIHdvdWxkbiYjMzk7dCBoYXZlIHNpbmdsZWQgb3V0IGEgc3BlY2lmaWMgbGluZSBudW1iZXIgbGlrZSB0aGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0fVxuIDUzMTpcdFxuIDUzMjpcdCNkZWZpbmUgSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KVx0XHRcdFxcXG4gNTMzOlx0XHR7IC5ieXRlcyA9IChza2IpLVx1MDAzZWxlbiwgLnBhY2tldHMgPSAxLCAudGFyZ2V0ID0gdHJ1ZSxcXFxuIDUzNDpcdFx0ICAudGltZW91dCA9IGlwX3NldF9hZHRfb3B0X3RpbWVvdXQob3B0LCBzZXQpIH1cbiA1MzU6XHRcbiA1MzY6XHQjZGVmaW5lIElQX1NFVF9JTklUX1VFWFQoc2V0KVx0XHRcdFx0XFxcbiA1Mzc6XHRcdHsgLmJ5dGVzID0gVUxMT05HX01BWCwgLnBhY2tldHMgPSBVTExPTkdfTUFYLFx0XFxcbiA1Mzg6XHRcdCAgLnRpbWVvdXQgPSAoc2V0KS1cdTAwM2V0aW1lb3V0IH1cbiA1Mzk6XHRcbiA1NDA6XHQjZGVmaW5lIElQU0VUX0NPTkNBVChhLCBiKVx0XHRhIyNiXG4gNTQxOlx0I2RlZmluZSBJUFNFVF9UT0tFTihhLCBiKVx0XHRJUFNFVF9DT05DQVQoYSwgYilcbiA1NDI6XHRcbiA1NDM6XHQjZW5kaWYgLypfSVBfU0VUX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMDkKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogMTEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogUHJldmVudGluZyBDb21tZW50IENvcnJ1cHRpb24gaW4gQml0bWFwIFNldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgSVBfU0VUX0lOSVRfVUVYVGAgaW5pdGlhbGl6ZXIgdXNlcyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgbWVhbmluZyBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLCBsaWtlIGB0YXJnZXRgLCB3aWxsIGJlIHplcm9lZC4gU28sIGJ5IGRlZmF1bHQsIGBleHQtJmd0O3RhcmdldGAgaXMgYGZhbHNlYCB3aGVuIGluaXRpYWxpemVkIHRoaXMgd2F5LgoKTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYCZhbXA7JmFtcDsgIWV4dC0mZ3Q7dGFyZ2V0YCB0byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBtdHlwZV9hZGRgIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGA6CgpgYGBkaWZmCglpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpICZhbXA7JmFtcDsgIWV4dC0mZ3Q7dGFyZ2V0KQoJCWlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpOwpgYGAKCkJlZm9yZSB0aGlzIHBhdGNoLCB3aGVuIGEgcGFja2V0IHRyaWdnZXJlZCBhbiBgSVBTRVRfQUREYCB2aWEgdGhlIG5ldGZpbHRlciBrZXJuZWwgdGFyZ2V0IChgZXh0LSZndDt0YXJnZXQgPT0gdHJ1ZWApLCB0aGUgY29kZSB3b3VsZCBleGVjdXRlIGBpcF9zZXRfaW5pdF9jb21tZW50YCByZWdhcmRsZXNzLCBldmVuIHdoZW4gYGV4dC0mZ3Q7Y29tbWVudGAgd2FzIGBOVUxMYCBmb3Iga2VybmVsLWFkZGVkIHRhcmdldHMgKGthZHQpLiBUaGlzIG1lYW50IHRoYXQgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdvdWxkIGluYWR2ZXJ0ZW50bHkgZnJlZSBhbnkgKmV4aXN0aW5nKiBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCwgYmVjYXVzZSBgbGVuYCB3aWxsIGJlIHplcm8uIFRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgYGlwX3NldF9pbml0X2NvbW1lbnRgIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gdXNlci1zcGFjZSBhZGRzICh1YWRkKSB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24sIGFuZCBrYWR0IHRhcmdldHMgc2hvdWxkbiYjMzk7dCBiZSB0b3VjaGluZyBjb21tZW50cyBhdCBhbGwuIFRoZSBlcXVpdmFsZW50IGxvZ2ljIGhhZCBhbHJlYWR5IGJlZW4gaW1wbGVtZW50ZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgYnJpbmdpbmcgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGludG8gYWxpZ25tZW50IHdpdGggdGhhdCBleGlzdGluZywgY29ycmVjdCBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIGFzc2VzcyB0aGUgcGF0Y2ggZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIE5vLiBUaGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgY29uZGl0aW9uLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBOby4gVGhlIGBleHQtJmd0O3RhcmdldGAgZmllbGQgaXMgYSBgYm9vbGAgaW4gYHN0cnVjdCBpcF9zZXRfZXh0YC4gSXQmIzM5O3MgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBieSBgSVBfU0VUX0lOSVRfS0VYVGAgKHNldHRpbmcgaXQgdG8gYHRydWVgKSBvciBgSVBfU0VUX0lOSVRfVUVYVGAgKHdoZXJlIGl0IGRlZmF1bHRzIHRvIGBmYWxzZWApLgozLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBOby4gVGhlIHBhdGNoIHNraXBzIGFuIGluaXRpYWxpemF0aW9uIGNhbGw7IGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBvbmUuCjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIE5vLgoKU28sIGluIHN1bW1hcnk6CgoqICAgVGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgSXQgKmRvZXMqIGZpeCBhIGxvZ2ljIGJ1Zy9tZW1vcnkgbGVhay91bmludGVuZGVkIGRlbGV0aW9uIHRoYXQgd2FzIHByZXNlbnQgd2hlcmUga2VybmVsIHRhcmdldCBpbnZvY2F0aW9ucyBjb3VsZCBkZWxldGUgZXhpc3RpbmcgZWxlbWVudCBjb21tZW50cy4KClRoZXJlZm9yZSwgS01TQU4gaXMgKm5vdCogbmVlZGVkIGhlcmUuIFN0YW5kYXJkIEtBU0FOIGFuZCB1bml0IHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBjcmVhdGVkIG9yIGV4cG9zZWQuCiogICBgTmVlZHNLTVNBTmA6IGBmYWxzZWAKKiAgIFJlYXNvbjogQ2xlYXIgY29udHJhc3QgYmV0d2VlbiBLQVNBTi9nZW5lcmljIHRlc3RpbmcgYW5kIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBtdHlwZV9hZGQoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gY2hlY2sgYCFleHQtXHUwMDNldGFyZ2V0YCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2luaXRfY29tbWVudCgpYCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBhdHRlcm4gaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwcmV2ZW50cyBrZXJuZWwgaXB0YWJsZXMgU0VUIHRhcmdldCBhY3Rpb25zIGZyb20gY2xlYXJpbmcvbW9kaWZ5aW5nIGVsZW1lbnQgY29tbWVudHMuXG5cbi0gQWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGlwX3NldF9leHRgIGFyZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYElQX1NFVF9JTklUX0tFWFRgIG9yIGBJUF9TRVRfSU5JVF9VRVhUYCksIHdoaWNoIGZ1bGx5IHplcm8gYWxsIHVubWVudGlvbmVkIGZpZWxkcywgZW5zdXJpbmcgYGV4dC1cdTAwM2V0YXJnZXRgIGFuZCBhbGwgb3RoZXIgZmllbGRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIG5ldmVyIHVuaW5pdGlhbGl6ZWQuXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVGhlIGJ1ZyBmaXhlZCBpcyBhIGxvZ2ljIGlzc3VlICh1bmludGVuZGVkIGNvbW1lbnQgZGVsZXRpb24gZHVyaW5nIGtlcm5lbC1zcGFjZSBwYWNrZXQgbWF0Y2hpbmcvdGFyZ2V0IGV4ZWN1dGlvbikuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYG10eXBlX2FkZCgpYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCB0byBjaGVjayBgIWV4dC1cdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cblxuLSBBbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYXJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgSVBfU0VUX0lOSVRfS0VYVGAgb3IgYElQX1NFVF9JTklUX1VFWFRgKSwgd2hpY2ggZnVsbHkgemVybyBhbGwgdW5tZW50aW9uZWQgZmllbGRzLCBlbnN1cmluZyBgZXh0LVx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlIGVtaXNzaW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBUaGUgYnVnIGZpeGVkIGlzIGEgbG9naWMgaXNzdWUgKHVuaW50ZW5kZWQgY29tbWVudCBkZWxldGlvbiBkdXJpbmcga2VybmVsLXNwYWNlIHBhY2tldCBtYXRjaGluZy90YXJnZXQgZXhlY3V0aW9uKS5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjoyMS4zMTc3Mjk1ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY4MTg1OTIxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpdG1hcF9pcF9hZGRcIixcbiAgICBcImJpdG1hcF9pcG1hY19hZGRcIixcbiAgICBcImJpdG1hcF9wb3J0X2FkZFwiLFxuICAgIFwiYml0bWFwX2lwX2thZHRcIixcbiAgICBcImJpdG1hcF9pcG1hY19rYWR0XCIsXG4gICAgXCJiaXRtYXBfcG9ydF9rYWR0XCIsXG4gICAgXCJiaXRtYXBfaXBfdWFkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX3VhZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X3VhZHRcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYG10eXBlX2FkZCgpYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCB0byBjaGVjayBgIWV4dC1cXHUwMDNldGFyZ2V0YCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2luaXRfY29tbWVudCgpYCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBhdHRlcm4gaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwcmV2ZW50cyBrZXJuZWwgaXB0YWJsZXMgU0VUIHRhcmdldCBhY3Rpb25zIGZyb20gY2xlYXJpbmcvbW9kaWZ5aW5nIGVsZW1lbnQgY29tbWVudHMuXFxuXFxuLSBBbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYXJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgSVBfU0VUX0lOSVRfS0VYVGAgb3IgYElQX1NFVF9JTklUX1VFWFRgKSwgd2hpY2ggZnVsbHkgemVybyBhbGwgdW5tZW50aW9uZWQgZmllbGRzLCBlbnN1cmluZyBgZXh0LVxcdTAwM2V0YXJnZXRgIGFuZCBhbGwgb3RoZXIgZmllbGRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIG5ldmVyIHVuaW5pdGlhbGl6ZWQuXFxuLSBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgbmV0bGluayBhdHRyaWJ1dGUgZW1pc3Npb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBUaGUgYnVnIGZpeGVkIGlzIGEgbG9naWMgaXNzdWUgKHVuaW50ZW5kZWQgY29tbWVudCBkZWxldGlvbiBkdXJpbmcga2VybmVsLXNwYWNlIHBhY2tldCBtYXRjaGluZy90YXJnZXQgZXhlY3V0aW9uKS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXR5cGVfYWRkKCkgaW4gbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIHRvIGF2b2lkIGNhbGxpbmcgaXBfc2V0X2luaXRfY29tbWVudCgpIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIHZpYSBrZXJuZWwtc2lkZSBuZXRmaWx0ZXIgcGFja2V0IHBhdGhzICh3aGVyZSBleHQtXFx1MDAzZXRhcmdldCBpcyB0cnVlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgaXBzZXQgYml0bWFwIHR5cGVzIChiaXRtYXA6aXAsIGJpdG1hcDppcCxtYWMsIGJpdG1hcDpwb3J0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgZXh0ZW5zaW9uIGhhbmRsaW5nIGFuZCBjb21tZW50IGxpZmVjeWNsZSByZW1haW4gc291bmQgYWNyb3NzIHVzZXJzcGFjZSBuZXRsaW5rIGFuZCBwYWNrZXQtcHJvY2Vzc2luZyBleGVjdXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjIxLjMxNzczNjA2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4NTI1MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmU3MDllYmM5MjU1Yjk5YmQ5M2FlOTNiYjk2M2IxYmIxMDg5MDBhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjIyOjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxcbmluZGV4IGQ2YTdlNjYwNDU0MjIuLmFlMzc2ZmEzZTdhM2IgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXFxuQEAgLTE1OSw3ICsxNTksNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFxuIFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcXG4tXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcXG4rXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcXHUwMDI2XFx1MDAyNiAhZXh0LVxcdTAwM2V0YXJnZXQpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbiBcXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcbiBcXHRcXHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKHgsIHNldCksIGV4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjIxLjg2Njk2MDgxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzEzOTExMjUxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpdG1hcF9pcF9hZGRcIixcbiAgICBcImJpdG1hcF9pcG1hY19hZGRcIixcbiAgICBcImJpdG1hcF9wb3J0X2FkZFwiLFxuICAgIFwiYml0bWFwX2lwX2thZHRcIixcbiAgICBcImJpdG1hcF9pcG1hY19rYWR0XCIsXG4gICAgXCJiaXRtYXBfcG9ydF9rYWR0XCIsXG4gICAgXCJiaXRtYXBfaXBfdWFkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX3VhZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X3VhZHRcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdHlwZV9hZGQoKSBpbiBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggdG8gYXZvaWQgY2FsbGluZyBpcF9zZXRfaW5pdF9jb21tZW50KCkgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgdmlhIGtlcm5lbC1zaWRlIG5ldGZpbHRlciBwYWNrZXQgcGF0aHMgKHdoZXJlIGV4dC1cXHUwMDNldGFyZ2V0IGlzIHRydWUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciBpcHNldCBiaXRtYXAgdHlwZXMgKGJpdG1hcDppcCwgYml0bWFwOmlwLG1hYywgYml0bWFwOnBvcnQpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBleHRlbnNpb24gaGFuZGxpbmcgYW5kIGNvbW1lbnQgbGlmZWN5Y2xlIHJlbWFpbiBzb3VuZCBhY3Jvc3MgdXNlcnNwYWNlIG5ldGxpbmsgYW5kIHBhY2tldC1wcm9jZXNzaW5nIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTcwOWViYzkyNTViOTliZDkzYWU5M2JiOTYzYjFiYjEwODkwMGE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNToyMjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggZDZhN2U2NjA0NTQyMi4uYWUzNzZmYTNlN2EzYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtMTU5LDcgKzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFxuIFx0aWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSlcbiBcdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpO1xuLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbitcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiBcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjIxLjg2Njk2MjU0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTk2NzMzNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaXBfc2V0X2JpdG1hcF9nZW4uaCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgcGF0Y2guIExvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgc29tZXRoaW5nIHdpdGhpbiB0aGUgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGhlYWRlciBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBleHRlbnNpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYGlwc2V0YCBmcmFtZXdvcmsuIFRoZSBkaWZmIHNob3dzIGEgY29uZGl0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gY29tbWVudHMuIFRoZSBvcmlnaW5hbCBjb2RlIGluY2x1ZGVkIGEgY29tbWVudCBpbml0aWFsaXphdGlvbiBpZiBgU0VUX1dJVEhfQ09NTUVOVChzZXQpYCB3YXMgdHJ1ZS4gVGhlIG1vZGlmaWVkIGNvZGUgaW50cm9kdWNlcyBhbiBhZGRpdGlvbmFsIGNoZWNrOiBgIWV4dC1cdTAwM2V0YXJnZXRgLiBUaGF0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYyB1c2UtY2FzZSBpcyBiZWluZyBhZGRyZXNzZWQgb3IgYSBidWcgaXMgYmVpbmcgZml4ZWQgcmVsYXRlZCB0byBob3cgY29tbWVudHMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGB0YXJnZXRgIGV4dGVuc2lvbiBmaWVsZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgcmVsYXRlZCB0byBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvbW1lbnQgZmllbGQsIGFuZCBhIHRhcmdldCBmaWVsZC5cblxuTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgYmlnZ2VyIGNvbnRleHQuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGRlZXBlci4gSSdsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGlzIGhlYWRlciBpcyBpbmNsdWRlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW5jbHVzaW9uIHBvaW50cyBvZiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIGxvb2sgYXQgaXRzIGRlcGVuZGVuY2llcywgZmluZCBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXRzIG9wZXJhdGlvbiwgYW5kIHplcm8gaW4gb24gYW55IGtleSBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgdGhlIGZvY3VzIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYFNFVF9XSVRIX0NPTU1FTlRgLCBgZXh0LVx1MDAzZXRhcmdldGAsIGFuZCBgaXBfc2V0X2luaXRfY29tbWVudGAgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLCB3aGljaCBpcyBwcm9iYWJseSB3aGVyZSB0aGlzIGNoYW5nZSBiZWNvbWVzIGltcG9ydGFudC4gSSdsbCBiZSBsb29raW5nIGZvciByZWxhdGVkIGNvZGUuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBpbmZlciB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBhbmQgYXNzZXNzIGl0cyBpbXBhY3QgbW9yZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjMyLjQ2MzY5ODgyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI0MDMzMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9iaXRtYXBfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MjA4PXN0cnVjdCBiaXRtYXBfaXBfZWxlbSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0yMTAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MjExOiNpbmNsdWRlIFxcXCJpcF9zZXRfYml0bWFwX2dlbi5oXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTIxMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTI4Mj1iaXRtYXBfaXBtYWNfc2FtZV9zZXQoY29uc3Qgc3RydWN0IGlwX3NldCAqYSwgY29uc3Qgc3RydWN0IGlwX3NldCAqYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI5NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyOTU6I2luY2x1ZGUgXFxcImlwX3NldF9iaXRtYXBfZ2VuLmhcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjk2LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0yMjM9c3RydWN0IGJpdG1hcF9wb3J0X2VsZW0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yMjUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoyMjY6I2luY2x1ZGUgXFxcImlwX3NldF9iaXRtYXBfZ2VuLmhcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjM1LjA4NzczNzk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1MTY1NjgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQml0bWFwIEdlbmVyYXRpb24gaW4gYGlwc2V0YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaGVhZGVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTU5LiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoIHRoZSBjb3JlIGJpdG1hcCBsb2dpYyBhbmQgZ2VuZXJhdGlvbiB3aXRoaW4gdGhlIGBpcHNldGAgZnJhbWV3b3JrLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSB3aGVyZSB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYW5pcHVsYXRpb24gb2YgdGhlIGJpdG1hcHMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBmb3IgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIGNvZGUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGJpdCB2ZWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIGFueSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9ucy4gVGhpcyBjb3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIGhvdyB0aGV5IGhhbmRsZSBhbGlnbm1lbnQsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIHNwZWNpZmljIGJpdHdpc2Ugb3BlcmF0aW9ucyB1c2VkIGZvciBzZXQvY2xlYXIgYW5kIGxvb2t1cCBvcGVyYXRpb25zLiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGFueSBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIHBvaW50cyB0aGVyZSwgZ2l2ZW4gaXQncyBzaGFyZWQgc3RhdGUuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgdHJhbnNsYXRlcyB0byByZWFsIHdvcmxkIHRocm91Z2hwdXQgdW5kZXIgaGVhdnkgbG9hZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb2Ygbm92ZWwgYWxnb3JpdGhtcyBvciBjbGV2ZXIgdXNlcyBvZiBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6MzcuOTM5Mzk2ODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdCAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KHgsIHNldCkpKSB7XFxuIDE0MTpcXHRcXHRcXHRcXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDM6XFx0XFx0XFx0fSBlbHNlIGlmICghKGZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19FWElTVCkpIHtcXG4gMTQ0OlxcdFxcdFxcdFxcdHNldF9iaXQoZS1cXHUwMDNlaWQsIG1hcC1cXHUwMDNlbWVtYmVycyk7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9FWElTVDtcXG4gMTQ2OlxcdFxcdFxcdH1cXG4gMTQ3OlxcdFxcdFxcdC8qIEVsZW1lbnQgaXMgcmUtYWRkZWQsIGNsZWFudXAgZXh0ZW5zaW9ucyAqL1xcbiAxNDg6XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gMTUxOlxcdFxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMtLTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gMTU0OlxcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxuIDE1NTpcXHRcXHRcXHRtdHlwZV9hZGRfdGltZW91dChleHRfdGltZW91dCh4LCBzZXQpLCBlLCBleHQsIHNldCwgbWFwLCByZXQpO1xcbiAxNTY6XFx0I2Vsc2VcXG4gMTU3OlxcdFxcdFxcdGlwX3NldF90aW1lb3V0X3NldChleHRfdGltZW91dCh4LCBzZXQpLCBleHQtXFx1MDAzZXRpbWVvdXQpO1xcbiAxNTg6XFx0I2VuZGlmXFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIDE2MTpcXHRcXHRcXHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7XFxuIDE2MjpcXHRcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG4gMTYzOlxcdFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbiAxNjQ6XFx0XFx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcXG4gMTY1OlxcdFxcdFxcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogQWN0aXZhdGUgZWxlbWVudCAqL1xcbiAxNjg6XFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIDE2OTpcXHRcXHRzZXRfYml0KGUtXFx1MDAzZWlkLCBtYXAtXFx1MDAzZW1lbWJlcnMpO1xcbiAxNzA6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cysrO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRyZXR1cm4gMDtcXG4gMTczOlxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0c3RhdGljIGludFxcbiAxNzY6XFx0bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIDE3NzpcXHRcXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gMTgwOlxcdFxcdGNvbnN0IHN0cnVjdCBtdHlwZV9hZHRfZWxlbSAqZSA9IHZhbHVlO1xcbiAxODE6XFx0XFx0dm9pZCAqeCA9IGdldF9leHQoc2V0LCBtYXAsIGUtXFx1MDAzZWlkKTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKG10eXBlX2RvX2RlbChlLCBtYXApKVxcbiAxODQ6XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xcbiAxODc6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cy0tO1xcbiAxODg6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSBcXHUwMDI2XFx1MDAyNlxcbiAxODk6XFx0XFx0ICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQoeCwgc2V0KSkpXFxuIDE5MDpcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9FWElTVDtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0cmV0dXJuIDA7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdCNpZm5kZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbiAxOTY6XFx0c3RhdGljIGJvb2xcXG4gMTk3OlxcdG10eXBlX2lzX2ZpbGxlZChjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqeClcXG4gMTk4OlxcdHtcXG4gMTk5OlxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjozNy45Mzk0NzUxMjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTU3NTAwMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgSVAgU2V0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGJpdG1hcCBJUCBzZXRzIGZ1bmN0aW9uIHVuZGVyIHRoZSBob29kLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gdGhlIHN5bWJvbCBnZW5lcmF0aW9uIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlmZmVyZW50IHNldCB0eXBlcy4gTXkgZmlyc3Qgc3RvcCB3aWxsIGJlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCB0byBzZWUgZXhhY3RseSB3aGF0IGBtdHlwZV9hZGRgIGlzIGRvaW5nIGFuZCBob3cgdGhlIGBtdHlwZWAgbWFjcm8gZ2VuZXJhdGVzIHRoZSBzeW1ib2xzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYml0bWFwIGltcGxlbWVudGF0aW9ucyBmb3IgYGJpdG1hcDppcGAsIGBiaXRtYXA6aXAsbWFjYCwgYW5kIGBiaXRtYXA6cG9ydGAgYXJlIGhhbmRsZWQg4oCTIHRoZSBjb3JlIG1lY2hhbmljcyBvZiBob3cgdGhlIGJpdHMgYXJlIG1hbmFnZWQuIFRoZW4sIEknbGwgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBleGFtaW5pbmcgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCB0byBzZWUgdGhlIG51YW5jZXMgYW5kIGRpZmZlcmVuY2VzIGluIGhvdyB0aGVzZSB2YXJpb3VzIHNldCB0eXBlcyBhY3R1YWxseSBzdG9yZSBhbmQgbWFuaXB1bGF0ZSB0aGUgZGF0YS4gSSdtIGV4cGVjdGluZyB0byBzZWUgaW50ZXJlc3RpbmcgdmFyaWF0aW9ucyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NDAuODk2OTc3MzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHQgICAgICAgeC1cXHUwMDNlbGFzdF9pcCA9PSB5LVxcdTAwM2VsYXN0X2lwIFxcdTAwMjZcXHUwMDI2XFxuIDIwMTpcXHRcXHQgICAgICAgeC1cXHUwMDNlbmV0bWFzayA9PSB5LVxcdTAwM2VuZXRtYXNrIFxcdTAwMjZcXHUwMDI2XFxuIDIwMjpcXHRcXHQgICAgICAgYS1cXHUwMDNldGltZW91dCA9PSBiLVxcdTAwM2V0aW1lb3V0IFxcdTAwMjZcXHUwMDI2XFxuIDIwMzpcXHRcXHQgICAgICAgYS1cXHUwMDNlZXh0ZW5zaW9ucyA9PSBiLVxcdTAwM2VleHRlbnNpb25zO1xcbiAyMDQ6XFx0fVxcbiAyMDU6XFx0XFxuIDIwNjpcXHQvKiBQbGFpbiB2YXJpYW50ICovXFxuIDIwNzpcXHRcXG4gMjA4OlxcdHN0cnVjdCBiaXRtYXBfaXBfZWxlbSB7XFxuIDIwOTpcXHR9O1xcbiAyMTA6XFx0XFxuIDIxMTpcXHQjaW5jbHVkZSBcXFwiaXBfc2V0X2JpdG1hcF9nZW4uaFxcXCJcXG4gMjEyOlxcdFxcbiAyMTM6XFx0LyogQ3JlYXRlIGJpdG1hcDppcCB0eXBlIG9mIHNldHMgKi9cXG4gMjE0OlxcdFxcbiAyMTU6XFx0c3RhdGljIGJvb2xcXG4gMjE2OlxcdGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxcbiAyMTc6XFx0XFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXFxuIDIxODpcXHRcXHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXFxuIDIxOTpcXHR7XFxuIDIyMDpcXHRcXHRtYXAtXFx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4gMjIxOlxcdFxcdGlmICghbWFwLVxcdTAwM2VtZW1iZXJzKVxcbiAyMjI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyMjM6XFx0XFx0bWFwLVxcdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xcbiAyMjQ6XFx0XFx0bWFwLVxcdTAwM2VsYXN0X2lwID0gbGFzdF9pcDtcXG4gMjI1OlxcdFxcdG1hcC1cXHUwMDNlZWxlbWVudHMgPSBlbGVtZW50cztcXG4gMjI2OlxcdFxcdG1hcC1cXHUwMDNlaG9zdHMgPSBob3N0cztcXG4gMjI3OlxcdFxcdG1hcC1cXHUwMDNlbmV0bWFzayA9IG5ldG1hc2s7XFxuIDIyODpcXHRcXHRzZXQtXFx1MDAzZXRpbWVvdXQgPSBJUFNFVF9OT19USU1FT1VUO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRtYXAtXFx1MDAzZXNldCA9IHNldDtcXG4gMjMxOlxcdFxcdHNldC1cXHUwMDNlZGF0YSA9IG1hcDtcXG4gMjMyOlxcdFxcdHNldC1cXHUwMDNlZmFtaWx5ID0gTkZQUk9UT19JUFY0O1xcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjM1OlxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0c3RhdGljIHUzMlxcbiAyMzg6XFx0cmFuZ2VfdG9fbWFzayh1MzIgZnJvbSwgdTMyIHRvLCB1OCAqYml0cylcXG4gMjM5OlxcdHtcXG4gMjQwOlxcdFxcdHUzMiBtYXNrID0gMHhGRkZGRkZGRTtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0KmJpdHMgPSAzMjtcXG4gMjQzOlxcdFxcdHdoaWxlICgtLSgqYml0cykgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IG1hc2sgXFx1MDAyNlxcdTAwMjYgKHRvIFxcdTAwMjYgbWFzaykgIT0gZnJvbSlcXG4gMjQ0OlxcdFxcdFxcdG1hc2sgXFx1MDAzY1xcdTAwM2M9IDE7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdHJldHVybiBtYXNrO1xcbiAyNDc6XFx0fVxcbiAyNDg6XFx0XFxuIDI0OTpcXHRzdGF0aWMgaW50XFxuIDI1MDpcXHRiaXRtYXBfaXBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiAyNTE6XFx0XFx0XFx0IHUzMiBmbGFncylcXG4gMjUyOlxcdHtcXG4gMjUzOlxcdFxcdHN0cnVjdCBiaXRtYXBfaXAgKm1hcDtcXG4gMjU0OlxcdFxcdHUzMiBmaXJzdF9pcCA9IDAsIGxhc3RfaXAgPSAwLCBob3N0cztcXG4gMjU1OlxcdFxcdHU2NCBlbGVtZW50cztcXG4gMjU2OlxcdFxcdHU4IG5ldG1hc2sgPSAzMjtcXG4gMjU3OlxcdFxcdGludCByZXQ7XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdGlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHxcXG4gMjYwOlxcdFxcdFxcdCAgICAgIWlwX3NldF9vcHRhdHRyX25ldG9yZGVyKHRiLCBJUFNFVF9BVFRSX1RJTUVPVVQpIHx8XFxuIDI2MTpcXHRcXHRcXHQgICAgICFpcF9zZXRfb3B0YXR0cl9uZXRvcmRlcih0YiwgSVBTRVRfQVRUUl9DQURUX0ZMQUdTKSkpXFxuIDI2MjpcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9QUk9UT0NPTDtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0cmV0ID0gaXBfc2V0X2dldF9ob3N0aXBhZGRyNCh0YltJUFNFVF9BVFRSX0lQXSwgXFx1MDAyNmZpcnN0X2lwKTtcXG4gMjY1OlxcdFxcdGlmIChyZXQpXFxuIDI2NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRpZiAodGJbSVBTRVRfQVRUUl9JUF9UT10pIHtcXG4gMjY5OlxcdFxcdFxcdHJldCA9IGlwX3NldF9nZXRfaG9zdGlwYWRkcjQodGJbSVBTRVRfQVRUUl9JUF9UT10sIFxcdTAwMjZsYXN0X2lwKTtcXG4gMjcwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDI3MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzI6XFx0XFx0XFx0aWYgKGZpcnN0X2lwIFxcdTAwM2UgbGFzdF9pcClcXG4gMjczOlxcdFxcdFxcdFxcdHN3YXAoZmlyc3RfaXAsIGxhc3RfaXApO1xcbiAyNzQ6XFx0XFx0fSBlbHNlIGlmICh0YltJUFNFVF9BVFRSX0NJRFJdKSB7XFxuIDI3NTpcXHRcXHRcXHR1OCBjaWRyID0gbmxhX2dldF91OCh0YltJUFNFVF9BVFRSX0NJRFJdKTtcXG4gMjc2OlxcdFxcbiAyNzc6XFx0XFx0XFx0aWYgKGNpZHIgXFx1MDAzZT0gSE9TVF9NQVNLKVxcbiAyNzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfSU5WQUxJRF9DSURSO1xcbiAyNzk6XFx0XFx0XFx0aXBfc2V0X21hc2tfZnJvbV90byhmaXJzdF9pcCwgbGFzdF9pcCwgY2lkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjQwLjg5NzA4NjUyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzI2MTUyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQml0bWFwIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBiaXRtYXAtYmFzZWQgSVAgc2V0IGltcGxlbWVudGF0aW9uIHdvcmtzLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbWFjcm8gZXhwYW5zaW9uIHByb2Nlc3MgdGhhdCdzIGdvaW5nIG9uIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhhdCBmaWxlLiBTZWVpbmcgaG93IHRoZSBtYWNyb3MgYXJlIGRlZmluZWQgd2lsbCBiZSBrZXkuIFRoZW4sIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhleSdyZSBiZWluZyAqdXNlZCosIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBpcF9zZXRfYml0bWFwX2lwLmNgIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlciBhbmQgd2hlcmUgdGhlIGV4cGFuc2lvbiBpcyBoYXBwZW5pbmcuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODM0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0Mi42Njk3MDUwNTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSAyMDEzIEpvenNlZiBLYWRsZWNzaWsgXFx1MDAzY2thZGxlY0BuZXRmaWx0ZXIub3JnXFx1MDAzZSAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaWZuZGVmIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSFxcbiAgIDU6XFx0I2RlZmluZSBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2RlZmluZSBtdHlwZV9kb190ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb190ZXN0KVxcbiAgMTA6XFx0I2RlZmluZSBtdHlwZV9nY190ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY190ZXN0KVxcbiAgMTE6XFx0I2RlZmluZSBtdHlwZV9pc19maWxsZWRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2lzX2ZpbGxlZClcXG4gIDEyOlxcdCNkZWZpbmUgbXR5cGVfZG9fYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb19hZGQpXFxuICAxMzpcXHQjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfY2xlYW51cClcXG4gIDE0OlxcdCNkZWZpbmUgbXR5cGVfZG9fZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb19kZWwpXFxuICAxNTpcXHQjZGVmaW5lIG10eXBlX2RvX2xpc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2xpc3QpXFxuICAxNjpcXHQjZGVmaW5lIG10eXBlX2RvX2hlYWRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2hlYWQpXFxuICAxNzpcXHQjZGVmaW5lIG10eXBlX2FkdF9lbGVtXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZHRfZWxlbSlcXG4gIDE4OlxcdCNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF90aW1lb3V0KVxcbiAgMTk6XFx0I2RlZmluZSBtdHlwZV9nY19pbml0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxcbiAgMjA6XFx0I2RlZmluZSBtdHlwZV9rYWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxcbiAgMjE6XFx0I2RlZmluZSBtdHlwZV91YWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KVxcbiAgMjI6XFx0I2RlZmluZSBtdHlwZV9kZXN0cm95XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZXN0cm95KVxcbiAgMjM6XFx0I2RlZmluZSBtdHlwZV9tZW1zaXplXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9tZW1zaXplKVxcbiAgMjQ6XFx0I2RlZmluZSBtdHlwZV9mbHVzaFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZmx1c2gpXFxuICAyNTpcXHQjZGVmaW5lIG10eXBlX2hlYWRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2hlYWQpXFxuICAyNjpcXHQjZGVmaW5lIG10eXBlX3NhbWVfc2V0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9zYW1lX3NldClcXG4gIDI3OlxcdCNkZWZpbmUgbXR5cGVfZWxlbVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZWxlbSlcXG4gIDI4OlxcdCNkZWZpbmUgbXR5cGVfdGVzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcXG4gIDI5OlxcdCNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxuICAzMDpcXHQjZGVmaW5lIG10eXBlX2RlbFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxcbiAgMzE6XFx0I2RlZmluZSBtdHlwZV9saXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9saXN0KVxcbiAgMzI6XFx0I2RlZmluZSBtdHlwZV9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2MpXFxuICAzMzpcXHQjZGVmaW5lIG10eXBlX2NhbmNlbF9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfY2FuY2VsX2djKVxcbiAgMzQ6XFx0I2RlZmluZSBtdHlwZVxcdFxcdFxcdE1UWVBFXFxuICAzNTpcXHRcXG4gIDM2OlxcdCNkZWZpbmUgZ2V0X2V4dChzZXQsIG1hcCwgaWQpXFx0KChtYXApLVxcdTAwM2VleHRlbnNpb25zICsgKChzZXQpLVxcdTAwM2Vkc2l6ZSAqIChpZCkpKVxcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgdm9pZFxcbiAgMzk6XFx0bXR5cGVfZ2NfaW5pdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKCpnYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IG10eXBlICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZtYXAtXFx1MDAzZWdjLCBnYywgMCk7XFxuICA0NDpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNm1hcC1cXHUwMDNlZ2MsIGppZmZpZXMgKyBJUFNFVF9HQ19QRVJJT0Qoc2V0LVxcdTAwM2V0aW1lb3V0KSAqIEhaKTtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0c3RhdGljIHZvaWRcXG4gIDQ4OlxcdG10eXBlX2V4dF9jbGVhbnVwKHN0cnVjdCBpcF9zZXQgKnNldClcXG4gIDQ5OlxcdHtcXG4gIDUwOlxcdFxcdHN0cnVjdCBtdHlwZSAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0Mi42Njk3ODcyNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2OTMyNTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1UWVBFIERlZmluaXRpb24gaW4gaXBfc2V0X2JpdG1hcCBGaWxlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgTVRZUEVgIGlzIGJlaW5nIGRlZmluZWQgYW5kIHVzZWQgYWNyb3NzIHRoZXNlIHRocmVlIHNwZWNpZmljIGZpbGVzOiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNgLCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgTVRZUEVgIHdpdGhpbiBlYWNoIG9mIHRob3NlIHNvdXJjZSBmaWxlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgY29udGV4dCBmb3IgaXRzIHB1cnBvc2UgYW5kIGFzc29jaWF0ZWQgdmFsdWVzIGFjcm9zcyB0aGUgZGlmZmVyZW50IGJpdG1hcCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSBpdHMgdXNhZ2UsIGRlZmluaXRpb24sIGFuZCB0byBpZGVudGlmeSB2YXJpYXRpb25zIGluIGhvdyB0aGUgZmlsZXMgYXJlIHVzaW5nIGBNVFlQRWAsIHdpdGhvdXQgaGF2aW5nIHRvIGV4aGF1c3RpdmVseSByZWFkIGVhY2ggZmlsZSBsaW5lLWJ5LWxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjQ0LjYzOTExNjQ0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBNVFlQRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDppcFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXAsbWFjXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MzU6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9pcG1hY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9Mjc9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOnBvcnRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9wb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz03MD1oYXNoX2lwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA0X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNF9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTIwMj1oYXNoX2lwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA2X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNl9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjA5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMTAtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz03Mj1oYXNoX2lwbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjc4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03OS0jZGVmaW5lIFBGXFx0XFx0NFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTg5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYWM2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXFx0XFx0Nlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz02OT1oYXNoX2lwbWFyazRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy03Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTIwNT1oYXNoX2lwbWFyazZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjEzOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFyazZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxNC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz03OT1oYXNoX2lwcG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo4NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy04Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI0OT1oYXNoX2lwcG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjU4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTc3PWhhc2hfaXBwb3J0aXA0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjg1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjQ4PWhhc2hfaXBwb3J0aXA2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI1NzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU4LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEyMT1oYXNoX2lwcG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTI5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEzMC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM3OT1oYXNoX2lwcG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzg4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz02MT1oYXNoX21hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX21hYzRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo2NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9tYWM0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy02Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMj1oYXNoX25ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTA4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwOS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI3Mz1oYXNoX25ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjgxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTEyOD1oYXNoX25ldGlmYWNlNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTMzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxMzQ6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MzYyPWhhc2hfbmV0aWZhY2U2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNjktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM3MDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRpZmFjZTZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcxLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTEyNT1oYXNoX25ldG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTMxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM2Mz1oYXNoX25ldG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzcxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MTE3PWhhc2hfbmV0cG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTI0OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTI1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTMzND1oYXNoX25ldHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM0MzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0NC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MTMxPWhhc2hfbmV0cG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6MTM4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTM5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQyNT1oYXNoX25ldHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQzNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0NC42ODUxNjYxOThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwNDA2NDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBzZWVpbmcgdGhhdCBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgaW5jbHVkZWQgYWNyb3NzIGEgZmV3IGZpbGVzLiBTcGVjaWZpY2FsbHk6XG5cbiogICBgaXBfc2V0X2JpdG1hcF9pcC5jYDogIFRoZSBgTVRZUEVgIGhlcmUgaXMgZGVmaW5lZCBhcyBgYml0bWFwX2lwYC4gIFNvLCB0aGF0IG1lYW5zIGNhbGxzIHRvIG1hY3JvcyBsaWtlIGBtdHlwZV9hZGRgIGFyZSBlZmZlY3RpdmVseSBleHBhbmRpbmcgdG8gYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwX3VhZHRgLCBgYml0bWFwX2lwX2thZHRgLCBhbmQgc28gb24uIFByZXR0eSBzdHJhaWdodGZvcndhcmQuXG4qICAgYGlwX3NldF9iaXRtYXBfaXBtYWMuY2A6ICBIZXJlLCBgTVRZUEVgIGlzIGBiaXRtYXBfaXBtYWNgLiAgYG10eXBlX2FkZGAgd2lsbCBleHBhbmQgdG8gYGJpdG1hcF9pcG1hY19hZGRgLCBldGMuICBNYWtlcyBzZW5zZSwgZm9sbG93cyB0aGUgcGF0dGVybi5cbiogICBgaXBfc2V0X2JpdG1hcF9wb3J0LmNgOiBBbmQgZmluYWxseSwgd2l0aCBgYml0bWFwX3BvcnRgIGFzIHRoZSBgTVRZUEVgLCBgbXR5cGVfYWRkYCBleHBhbmRzIHRvIGBiaXRtYXBfcG9ydF9hZGRgLCBldGMuIENvbnNpc3RlbnQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGdvb2QuXG5cbk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gV2h5IHRoaXMgYGJpdG1hcF9nZW4uaGAgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gY29tcGFyZSBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFuZCB0aGlzIG5ldyBgaXBfc2V0X2JpdG1hcF9nZW4uaGAuIFdoYXQncyB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBpbiBhcHByb2FjaD8gV2hhdCB3ZXJlIHRoZSBkcml2aW5nIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IGxlZCB0byB0aGlzIHNoaWZ0P1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF9zZXRfaGFzaF9nZW4uaGAgaXMgZG9pbmcgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGBleHQtXHUwMDNldGFyZ2V0YCB3aXRoaW4gdGhlIGBpcF9zZXRgIHN0cnVjdHVyZS4gIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlc2lnbiB0cmFkZS1vZmZzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjQ3LjY4OTIzMjkwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTA4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0LVxcdTAwM2V0YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTMwPW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE2MS1cXHRcXHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE2MjpcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTYzLVxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05ODg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjItXFx0XFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcihkYXRhLCBzZXQpLCBleHQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyMzpcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjQtXFx0XFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNDEtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnQtXFx1MDAzZWhyZWdpb25bcl0ubG9jayk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTQyOlxcdGlmICh0LVxcdTAwM2VyZXNpemluZyBcXHUwMDI2XFx1MDAyNiBleHQgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNDMtXFx0XFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTE3OT1tdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIyNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyMjg6XFx0XFx0aWYgKHQtXFx1MDAzZXJlc2l6aW5nIFxcdTAwMjZcXHUwMDI2IGV4dCBcXHUwMDI2XFx1MDAyNiBleHQtXFx1MDAzZXRhcmdldCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIyOS1cXHRcXHRcXHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0Ny43MzQyMjgyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5ODM3NTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEluY29uc2lzdGVuY2llcyBpbiBpcF9zZXQgQ29kZSoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBhIHBvdGVudGlhbCBkaXNjcmVwYW5jeSBiZXR3ZWVuIHR3byBoZWFkZXIgZmlsZXMsIHNwZWNpZmljYWxseSBpbiB0aGUgd2F5IHRoZXkgaGFuZGxlIGNvbW1lbnRzIGFuZCB0YXJnZXQgZXh0ZW5zaW9ucy4gYGlwX3NldF9oYXNoX2dlbi5oYCBpbmNsdWRlcyBhbiBgaWZgIGNvbmRpdGlvbiB0aGF0IGNoZWNrcyBmb3IgYFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXRgLCB3aGVyZWFzIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgdGhlIGAhZXh0LVx1MDAzZXRhcmdldGAgcGFydC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCwgb3IgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZW50aW9uYWwgZGlmZmVyZW5jZSBpbiBiZWhhdmlvciBiZXR3ZWVuIHRoZXNlIHR3byBzZXQgdHlwZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBleHQtXHUwMDNldGFyZ2V0YCBhY3R1YWxseSByZXByZXNlbnRzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgaXBfc2V0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZmllbGQgcmVsYXRlcyB0byB0aGUgY29tbWVudCBmdW5jdGlvbmFsaXR5IGFuZCBpZiB0aGUgZGlmZmVyZW5jZSBpcywgaW4gZmFjdCwgY29ycmVjdC4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgc3RydWN0IGlwX3NldF9leHRgIGRlZmluaXRpb24gYW5kIHRoZSByb2xlIG9mIGBpcF9zZXRfaW5pdF9jb21tZW50YC4gVGhlc2UgYXJlIHRoZSBrZXlzIHRvIHVubG9ja2luZyB0aGUgaW50ZW5kZWQgbG9naWMgYW5kIHNlZWluZyBpZiB0aGlzIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IGlzIGEgYnVnIG9yIG5vdC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDc0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTAuMTMyNjA3MDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUwMTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfaW5pdF9jb21tZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjItXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcXHUwMDI2XFx1MDAyNiAhZXh0LVxcdTAwM2V0YXJnZXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE2MzpcXHRcXHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTY0LVxcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzQ2PXZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzQ3OmlwX3NldF9pbml0X2NvbW1lbnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OC1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNjgtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNjk6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2luaXRfY29tbWVudCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM3MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTIzLVxcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXFx1MDAyNlxcdTAwMjYgIWV4dC1cXHUwMDNldGFyZ2V0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyNDpcXHRcXHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZGF0YSwgc2V0KSwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjUtXFx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjIxPWxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTIyNi1cXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjI3OlxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChlLCBzZXQpLCBleHQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjI4LVxcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjUwLjE4MzExNTUyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAwNjcyMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGlwX3NldF9pbml0X2NvbW1lbnRgIGZ1bmN0aW9uLCBhcyBpZiBJJ20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjpcblxuKipEaXZpbmcgaW50byBpcF9zZXRfaW5pdF9jb21tZW50KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIGd1dHMgb2YgdGhpcyBgaXBfc2V0X2luaXRfY29tbWVudGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1lbnRzLCBzbyBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHdlIHNldCB1cCB0aGUgY29tbWVudHMgZmllbGQgd2l0aGluIGFuIElQIHNldCBvciwgYXQgbGVhc3QsIGVuc3VyZSBpdCdzIGhhbmRsZWQgcHJvcGVybHkuIEl0J3MgaW4gYGlwX3NldF9jb3JlLmNgLCBzbyBpdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIGlwc2V0IGluZnJhc3RydWN0dXJlLiBQcm9iYWJseSBjYWxsZWQgZWFybHkgaW4gc2V0IGNyZWF0aW9uLCBvciB3aGVuIGEgY29tbWVudCBmaWVsZCBpcyBhZGRlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgdG8gc2VlIGlmIGl0J3MgbmV3IG9yIHByZWV4aXN0aW5nLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IG1lbW9yeSBpcyBhbGxvY2F0ZWQgaGVyZSBhbmQgdGhlIGNoZWNrcyBpbnZvbHZlZC4gSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUgY29tbWVudCBmaWVsZCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGRpZmZlcmVudCBpcHNldCB0eXBlcy4gSSBleHBlY3QgdG8gc2VlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gY29kZSwgYWxvbmdzaWRlIGVycm9yIGhhbmRsaW5nLiBUaGVyZSBjb3VsZCBiZSBsb2NraW5nIGludm9sdmVkLCBidXQgSSdsbCBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIHRoZSBuYW1lIGFsb25lLCBJIGNhbiBpbWFnaW5lIHRoZSBmdW5jdGlvbiBoYW5kbGluZyBOVUxMIG9yIGVtcHR5IGNvbW1lbnQgc3RyaW5ncywgbWF5YmUgZXZlbiB0cnVuY2F0aW5nIG92ZXJseSBsb25nIGNvbW1lbnRzLiBPa2F5LCBsZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTIuMzgzNzkwMjE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQwOlxcdFxcdHJldHVybiBubGFfZGF0YSh0Yik7XFxuIDM0MTpcXHR9XFxuIDM0MjpcXHRcXG4gMzQzOlxcdC8qIENhbGxlZCBmcm9tIHVhZGQgb25seSwgcHJvdGVjdGVkIGJ5IHRoZSBzZXQgc3BpbmxvY2suXFxuIDM0NDpcXHQgKiBUaGUga2FkdCBmdW5jdGlvbnMgZG9uJ3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cXG4gMzQ1OlxcdCAqL1xcbiAzNDY6XFx0dm9pZFxcbiAzNDc6XFx0aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcXG4gMzQ4OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbiAzNDk6XFx0e1xcbiAzNTA6XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cXHUwMDNlYywgMSk7XFxuIDM1MTpcXHRcXHRzaXplX3QgbGVuID0gZXh0LVxcdTAwM2Vjb21tZW50ID8gc3RybGVuKGV4dC1cXHUwMDNlY29tbWVudCkgOiAwO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAodW5saWtlbHkoYykpIHtcXG4gMzU0OlxcdFxcdFxcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxLCBcXHUwMDI2c2V0LVxcdTAwM2VleHRfc2l6ZSk7XFxuIDM1NTpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgTlVMTCk7XFxuIDM1NjpcXHRcXHRcXHRrZnJlZV9yY3UoYywgcmN1KTtcXG4gMzU3OlxcdFxcdH1cXG4gMzU4OlxcdFxcdGlmICghbGVuKVxcbiAzNTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjA6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiBcXHUwMDNlIElQU0VUX01BWF9DT01NRU5UX1NJWkUpKVxcbiAzNjE6XFx0XFx0XFx0bGVuID0gSVBTRVRfTUFYX0NPTU1FTlRfU0laRTtcXG4gMzYyOlxcdFxcdGMgPSBrbWFsbG9jKHNpemVvZigqYykgKyBsZW4gKyAxLCBHRlBfQVRPTUlDKTtcXG4gMzYzOlxcdFxcdGlmICh1bmxpa2VseSghYykpXFxuIDM2NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM2NTpcXHRcXHRzdHJzY3B5KGMtXFx1MDAzZXN0ciwgZXh0LVxcdTAwM2Vjb21tZW50LCBsZW4gKyAxKTtcXG4gMzY2OlxcdFxcdGF0b21pYzY0X2FkZChzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxLCBcXHUwMDI2c2V0LVxcdTAwM2VleHRfc2l6ZSk7XFxuIDM2NzpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgYyk7XFxuIDM2ODpcXHR9XFxuIDM2OTpcXHRFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcXG4gMzcwOlxcdFxcbiAzNzE6XFx0LyogVXNlZCBvbmx5IHdoZW4gZHVtcGluZyBhIHNldCwgcHJvdGVjdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSAqL1xcbiAzNzI6XFx0c3RhdGljIGludFxcbiAzNzM6XFx0aXBfc2V0X3B1dF9jb21tZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudClcXG4gMzc0OlxcdHtcXG4gMzc1OlxcdFxcdHN0cnVjdCBpcF9zZXRfY29tbWVudF9yY3UgKmMgPSByY3VfZGVyZWZlcmVuY2UoY29tbWVudC1cXHUwMDNlYyk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmICghYylcXG4gMzc4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzNzk6XFx0XFx0cmV0dXJuIG5sYV9wdXRfc3RyaW5nKHNrYiwgSVBTRVRfQVRUUl9DT01NRU5ULCBjLVxcdTAwM2VzdHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo1Mi4zODM5MDgyMzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzQ5MDE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwX3NldF9pbml0X2NvbW1lbnQgQ2FsbCBpbiBSZWxhdGlvbiB0byB4dF9TRVQgYW5kIEJpdG1hcCBPcGVyYXRpb25zKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFzIEkgZGlzc2VjdCB0aGlzIGNvZGUuIFRoYXQgY29tbWVudCBvbiBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgaW50ZXJlc3Rpbmc6IFwiQ2FsbGVkIGZyb20gdWFkZCBvbmx5LCBwcm90ZWN0ZWQgYnkgdGhlIHNldCBzcGlubG9jay5cIiBSaWdodCwgdGhlIGthZHQgZnVuY3Rpb25zIGFyZW4ndCBzdXBwb3NlZCB0byB0b3VjaCB0aGUgY29tbWVudCBleHRlbnNpb25zLiBCdXQgdGhlbiBJIHNlZSB0aGlzIGB4dF9TRVRgIHBhdGgsIHNwZWNpZmljYWxseSB3aGVuIGFkZGluZyBhbiBlbGVtZW50IHRvIGFuIGlwc2V0IHRocm91Z2ggdGhlIG5ldGZpbHRlciB0YXJnZXQg4oCTIGlwdGFibGVzIG9yIG5mdGFibGVzJyBTRVQgdGFyZ2V0LiBJdCBsb29rcyBsaWtlIGBleHQtXHUwMDNldGFyZ2V0YCBpcyB0cnVlIGhlcmUhIFRoYXQncyBhIHBvdGVudGlhbCBwcm9ibGVtIGJlY2F1c2UsIGluIHRoZSBrYWR0L3h0X1NFVCBwYXRoLCB3aGVuIGBleHQtXHUwMDNldGFyZ2V0YCBpcyB0cnVlLCB3ZSB3ZXJlIGNhbGxpbmcgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdpdGggYml0bWFwIHNldHMuIFRoYXQgZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNlIGEgY29tbWVudCBzdHJ1Y3R1cmUgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVx1MDAzZWMsIDEpYCBvciBmcmVlIGl0LCBvciBldmVuIGRvIGEgYGttYWxsb2NgIHdpdGggYGV4dC1cdTAwM2Vjb21tZW50YCwgd2hpY2ggY291bGQgYmUgdW5pbml0aWFsaXplZCwgZ2FyYmFnZSwgb3IgTlVMTC4gVGhpcyBpcyBhIHJlYWwgaXNzdWUsIGFzIHdlIGNvdWxkIGJlIGZyZWVpbmcgYW4gZXhpc3RpbmcgY29tbWVudCBhdHRhY2hlZCB0byBhbiBlbGVtZW50IHdoZW4gaXQncyBiZWluZyB1cGRhdGVkIGJ5IHRoZSBwYWNrZXQgcGF0aCFcblxuTm93IEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX2FkZGAgYXJlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aGluIHRoZSBiaXRtYXAgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBhcm91bmQgdGhlIGthZHQvdWFkdCBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBhbmQgdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGNvbmRpdGlvbmFsbHkgaGFuZGxlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgZGlmZmVyZW50bHksIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYHh0X1NFVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbiBpcyAqdHJ1bHkqIGVmZmVjdGl2ZSBhbmQgdGhhdCB3ZSdyZSBub3QgaW5hZHZlcnRlbnRseSBjYXVzaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxOTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo1NS45MjE0MDEwNzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDQxMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10eXBlX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNy0jZGVmaW5lIG10eXBlX2FkdF9lbGVtXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZHRfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg6I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5LSNkZWZpbmUgbXR5cGVfZ2NfaW5pdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yOC0jZGVmaW5lIG10eXBlX3Rlc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3QpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI5OiNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzEtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NC0jaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XFx0XFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMDUtXFx0LmFkdFxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozMDY6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNy1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE5LSN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIxLSN1bmRlZiBtdHlwZV9kZWxfY2lkclxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMzI6I3VuZGVmIG10eXBlX2FkZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjMzLSN1bmRlZiBtdHlwZV9kZWxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyODA6I2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNC1cXHQuYWR0XFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjM1OlxcdFxcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNi1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTUuOTY2ODQ4MTgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzExMjM5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCaXRtYXAgSVAgU2V0IEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBoZWFkZXIgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYG10eXBlX2FkZGAgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoaW4gaXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpZmZlcmVudCBgTVRZUEVgIHZhcmlhbnRzLlxuXG5TbywgYmVmb3JlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBpcyBpbmNsdWRlZCwgdGhlcmUgc2VlbSB0byBiZSBhIGZldyB0eXBlcyBkZWZpbmVkLiBMZXQncyBsb29rIGF0IGBiaXRtYXBfaXBgIChmcm9tIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY2ApLCB3aGljaCB3aWxsIHVzZSBgYml0bWFwX2lwX2FkZGAsIHRoZW4gYGJpdG1hcF9pcG1hY2AgKGRlZmluZWQgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jYCksIHVzaW5nIHRoZSBgYml0bWFwX2lwbWFjX2FkZGAgZnVuY3Rpb24sIGFuZCBsYXN0bHkgYGJpdG1hcF9wb3J0YCAoZm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNgKSwgd2hpY2ggdXRpbGl6ZXMgYGJpdG1hcF9wb3J0X2FkZGAuIFRoaXMgZ2l2ZXMgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LlxuXG5Ob3csIEknbGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBpdHNlbGYuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBzdHJ1Y3R1cmUgb2YgYG10eXBlX3ZhcmlhbnRgIG9yIGBtdHlwZWAuIEknbGwgemVybyBpbiBvbiBsaW5lcyAyOTAtMzMwIG9mIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uLiBXaXRoIHRob3NlIGRldGFpbHMgaW4gaGFuZCwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgYG10eXBlYCBhbmQgYG10eXBlX2FkZGAgYXJlIGludGVuZGVkIHRvIHdvcmsgdG9nZXRoZXIgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGJpdG1hcCB0eXBlcyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTkuMTM3OTc0MzY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0XFx0fVxcbiAyODY6XFx0XFx0XFx0fVxcbiAyODc6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdG1hcC1cXHUwMDNlZ2MuZXhwaXJlcyA9IGppZmZpZXMgKyBJUFNFVF9HQ19QRVJJT0Qoc2V0LVxcdTAwM2V0aW1lb3V0KSAqIEhaO1xcbiAyOTA6XFx0XFx0YWRkX3RpbWVyKFxcdTAwMjZtYXAtXFx1MDAzZWdjKTtcXG4gMjkxOlxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0c3RhdGljIHZvaWRcXG4gMjk0OlxcdG10eXBlX2NhbmNlbF9nYyhzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gMjk5OlxcdFxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZtYXAtXFx1MDAzZWdjKTtcXG4gMzAwOlxcdH1cXG4gMzAxOlxcdFxcbiAzMDI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlID0ge1xcbiAzMDM6XFx0XFx0LmthZHRcXHQ9IG10eXBlX2thZHQsXFxuIDMwNDpcXHRcXHQudWFkdFxcdD0gbXR5cGVfdWFkdCxcXG4gMzA1OlxcdFxcdC5hZHRcXHQ9IHtcXG4gMzA2OlxcdFxcdFxcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxcbiAzMDc6XFx0XFx0XFx0W0lQU0VUX0RFTF0gPSBtdHlwZV9kZWwsXFxuIDMwODpcXHRcXHRcXHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxcbiAzMDk6XFx0XFx0fSxcXG4gMzEwOlxcdFxcdC5kZXN0cm95ID0gbXR5cGVfZGVzdHJveSxcXG4gMzExOlxcdFxcdC5mbHVzaFxcdD0gbXR5cGVfZmx1c2gsXFxuIDMxMjpcXHRcXHQuaGVhZFxcdD0gbXR5cGVfaGVhZCxcXG4gMzEzOlxcdFxcdC5saXN0XFx0PSBtdHlwZV9saXN0LFxcbiAzMTQ6XFx0XFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXFxuIDMxNTpcXHRcXHQuY2FuY2VsX2djID0gbXR5cGVfY2FuY2VsX2djLFxcbiAzMTY6XFx0fTtcXG4gMzE3OlxcdFxcbiAzMTg6XFx0I2VuZGlmIC8qIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo1OS4xMzgwNjYxOThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMDcxOTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpcHNldGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaXBzZXRgIGNvZGUgYWdhaW4uIE15IG1haW4gY29uY2VybiByaWdodCBub3cgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX3VhZHRgIGFuZCB0aGUgYG10eXBlX2FkZGAgZnVuY3Rpb24gKG9yLCBtb3JlIGdlbmVyYWxseSwgaG93IHRoZSBrZXJuZWwncyBuZXRmaWx0ZXIgaXBzZXQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgYHZhcmlhbnQtXHUwMDNlYWR0W0lQU0VUX0FERF1gIG9yIGB2YXJpYW50LVx1MDAzZWthZHRgIC8gYHZhcmlhbnQtXHUwMDNldWFkdGAgY2FsbHMpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGFkZCBmdW5jdGlvbnMgYXJlIGludm9rZWQgYW5kIHdoYXQncyBkcml2aW5nIHRoZSBjYWxsIHNlcXVlbmNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgbXR5cGVfa2FkdGAgYW5kIGBtdHlwZV91YWR0YCBtb3JlIGNsb3NlbHkuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBmbG93IGFuZCB0aGUgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBlYWNoIG9mIHRob3NlIGltcGxlbWVudGF0aW9ucy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHRyYWNlIGhvdyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBpcHNldGAgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0NywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjA0LjU2ODc4OTQxMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYzODExNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYml0bWFwX2lwX2thZHR8Yml0bWFwX2lwbWFjX2thZHR8Yml0bWFwX3BvcnRfa2FkdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTEwOT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTEwOmJpdG1hcF9pcF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTEtXFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjA5OmJpdG1hcF9pcG1hY19rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTAtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTEyNj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoxMjc6Yml0bWFwX3BvcnRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xMjgtXFx0XFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MDQuNjM1MTc5NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYwNzkxNDcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSBvZiBCaXRtYXAgSVAgU2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGEgZmFtaWx5IG9mIGJpdG1hcCBmdW5jdGlvbnM6IGBiaXRtYXBfaXBfa2FkdGAsIGBiaXRtYXBfaXBtYWNfa2FkdGAsIGBiaXRtYXBfcG9ydF9rYWR0YCwgYGJpdG1hcF9pcF91YWR0YCwgYGJpdG1hcF9pcG1hY191YWR0YCwgYW5kIGBiaXRtYXBfcG9ydF91YWR0YC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGBiaXRtYXBfaXBfYWRkYCwgYGJpdG1hcF9pcG1hY19hZGRgLCBhbmQgYGJpdG1hcF9wb3J0X2FkZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhleSBhcmUgKmFjdHVhbGx5KiBkZWZpbmVkIHN0YXRpY2FsbHkuIEFyZSB0aGV5IGdvaW5nIHRvIHNob3cgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZT9cblxuQSBxdWljayBwZWVrIGF0IGBpcF9zZXRfYml0bWFwX2dlbi5oYCByZXZlYWxzIGBtdHlwZV9hZGRgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgc28gaXQgaXMgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24hIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBiZWNhdXNlIHRoaXMgbWVhbnMgaXQgY291bGQgYmUgaW5saW5lZCwgb3Igc3RvcmVkIGRpcmVjdGx5LCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hlcmUgaXQncyAqYWN0dWFsbHkqIHVzZWQuIFNwZWNpZmljYWxseSwgaXQncyBpbmNsdWRlZCBpbiBhbiBvYmplY3QgZmlsZSwgYnV0IG5vdCBhIGdsb2JhbCBzeW1ib2wuIFNpbmNlIGl0J3MgYHN0YXRpY2AsIGl0IHNob3VsZCBlaXRoZXIgYmUgaW5saW5lZCBvciBwcmVzZW50IGluIHRoZSBjYWxsaW5nIG9iamVjdCBhcyBhIGxvY2FsIGZ1bmN0aW9uLCB3aXRoaW4gYHVhZHRgIGFuZCBga2FkdGAgb3Igc3RvcmVkIGRpcmVjdGx5IGluIGB2YXJpYW50LVx1MDAzZWFkdGAuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbXR5cGVfYWRkYCwgb3IsIGV2ZW4gYmV0dGVyLCB1bmRlcnN0YW5kIGhvdyBgaXBfc2V0X2JpdG1hcF9pcC5jYCBkZWZpbmVzIGBiaXRtYXBfaXBfa2FkdGAgYW5kIGBiaXRtYXBfaXBfdWFkdGAuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiB0aGF0IHN0YXRpYyBmdW5jdGlvbiwgYW5kIHRodXMsIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1ODUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MDguMjQzMDk4ODQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDg6XFx0XFxuIDEwOTpcXHRzdGF0aWMgaW50XFxuIDExMDpcXHRiaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIDExMTpcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbiAxMTI6XFx0XFx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQpXFxuIDExMzpcXHR7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIDExNTpcXHRcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIDExNjpcXHRcXHRzdHJ1Y3QgYml0bWFwX2lwX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG4gMTE3OlxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIDExODpcXHRcXHR1MzIgaXA7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdGlwID0gbnRvaGwoaXA0YWRkcihza2IsIG9wdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUFNFVF9ESU1fT05FX1NSQykpO1xcbiAxMjE6XFx0XFx0aWYgKGlwIFxcdTAwM2MgbWFwLVxcdTAwM2VmaXJzdF9pcCB8fCBpcCBcXHUwMDNlIG1hcC1cXHUwMDNlbGFzdF9pcClcXG4gMTIyOlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX0JJVE1BUF9SQU5HRTtcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0XFx0ZS5pZCA9IGlwX3RvX2lkKG1hcCwgaXApO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRyZXR1cm4gYWR0Zm4oc2V0LCBcXHUwMDI2ZSwgXFx1MDAyNmV4dCwgXFx1MDAyNm9wdC1cXHUwMDNlZXh0LCBvcHQtXFx1MDAzZWNtZGZsYWdzKTtcXG4gMTI3OlxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0c3RhdGljIGludFxcbiAxMzA6XFx0Yml0bWFwX2lwX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiAxMzE6XFx0XFx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxcbiAxMzI6XFx0e1xcbiAxMzM6XFx0XFx0c3RydWN0IGJpdG1hcF9pcCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbiAxMzQ6XFx0XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiAxMzU6XFx0XFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwO1xcbiAxMzY6XFx0XFx0c3RydWN0IGJpdG1hcF9pcF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxuIDEzODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKHRiW0lQU0VUX0FUVFJfTElORU5PXSlcXG4gMTQxOlxcdFxcdFxcdCpsaW5lbm8gPSBubGFfZ2V0X3UzMih0YltJUFNFVF9BVFRSX0xJTkVOT10pO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfSVBdKSlcXG4gMTQ0OlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRyZXQgPSBpcF9zZXRfZ2V0X2hvc3RpcGFkZHI0KHRiW0lQU0VUX0FUVFJfSVBdLCBcXHUwMDI2aXApO1xcbiAxNDc6XFx0XFx0aWYgKHJldClcXG4gMTQ4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdHJldCA9IGlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzZXQsIHRiLCBcXHUwMDI2ZXh0KTtcXG4gMTUxOlxcdFxcdGlmIChyZXQpXFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpZiAoaXAgXFx1MDAzYyBtYXAtXFx1MDAzZWZpcnN0X2lwIHx8IGlwIFxcdTAwM2UgbWFwLVxcdTAwM2VsYXN0X2lwKVxcbiAxNTU6XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfQklUTUFQX1JBTkdFO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpIHtcXG4gMTU4OlxcdFxcdFxcdGUuaWQgPSBpcF90b19pZChtYXAsIGlwKTtcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBhZHRmbihzZXQsIFxcdTAwMjZlLCBcXHUwMDI2ZXh0LCBcXHUwMDI2ZXh0LCBmbGFncyk7XFxuIDE2MDpcXHRcXHR9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdGlmICh0YltJUFNFVF9BVFRSX0lQX1RPXSkge1xcbiAxNjM6XFx0XFx0XFx0cmV0ID0gaXBfc2V0X2dldF9ob3N0aXBhZGRyNCh0YltJUFNFVF9BVFRSX0lQX1RPXSwgXFx1MDAyNmlwX3RvKTtcXG4gMTY0OlxcdFxcdFxcdGlmIChyZXQpXFxuIDE2NTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjY6XFx0XFx0XFx0aWYgKGlwIFxcdTAwM2UgaXBfdG8pXFxuIDE2NzpcXHRcXHRcXHRcXHRzd2FwKGlwLCBpcF90byk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjA4LjI0MzMwMjgyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU0NzQzNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUCBTZXQgSW5pdGlhbGl6YXRpb24gYW5kIEFkZGl0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IElQIHNldHMgYXJlIGNyZWF0ZWQgYW5kIHBvcHVsYXRlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBiaXRtYXAtYmFzZWQgdHlwZXMgKGBiaXRtYXBfaXBfa2FkdGAgYW5kIGBiaXRtYXBfaXBfdWFkdGApLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYm90aCBvZiB0aGVzZSBjYWxsIHRoZSBgYWR0Zm5gIGZ1bmN0aW9uLCBwYXNzaW5nIGluIGEgc2V0LCBhbiBlbGVtZW50IHBvaW50ZXIgKGBcdTAwMjZlYCksIGFuIGV4dGVuc2lvbiBwb2ludGVyIChgXHUwMDI2ZXh0YCksIGFuZCBzb21lIG90aGVyIGFyZ3VtZW50cy4gVGhpcyBgYWR0Zm5gIGlzIGFjdHVhbGx5IGBiaXRtYXBfaXBfYWRkYCB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYElQU0VUX0FERGAgb3BlcmF0aW9uLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIHRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGFkZGluZyB0byB0aGUgYml0bWFwIElQIHNldHMuXG5cblRoZW4gSSBub3RpY2VkIHNvbWV0aGluZyBlbHNlOiBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgbXR5cGVfYWRkYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBkdXJpbmcgdGhlIGNyZWF0aW9uIHBoYXNlIGJ5IGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBiaXRtYXAgdHlwZXMsIG5hbWVseSwgYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGFuZCBgYml0bWFwX3BvcnRfYWRkYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBpcF9zZXRfaW5pdF9jb21tZW50YCBwbGF5cyBhIGtleSByb2xlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGVzZSBiaXRtYXAtYmFzZWQgSVAgc2V0IHZhcmlhbnRzLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGlzIG92ZXJhbGwgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyB0aW1lIHRvIHNlZSBob3cgdGhlIElQU0VUIGFuZCBiaXRtYXAgdHlwZXMgYXJlIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBUaGF0J3MgcHJvYmFibHkgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIGFuZCBwZXJoYXBzIHNvbWUgaW5zaWdodCBvbiBhdmFpbGFibGUgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MTAuOTk4MDQ5NTM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE4OTU2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfU0VUX0JJVE1BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNj1jb25maWcgSVBfU0VUX01BWFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDY6Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lQX1NFVCkgKz0gaXBfc2V0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMTEtIyBiaXRtYXAgdHlwZXNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19JUF9TRVRfQklUTUFQX0lQKSArPSBpcF9zZXRfYml0bWFwX2lwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDKSArPSBpcF9zZXRfYml0bWFwX2lwbWFjLm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQpICs9IGlwX3NldF9iaXRtYXBfcG9ydC5vXFxubmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZS0xNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDo0OiNpZm5kZWYgX19JUF9TRVRfQklUTUFQX0lQX0dFTl9IXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjU6I2RlZmluZSBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMzA9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTUzLVxcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NDojaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTUtXFx0XFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xNzY9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTk0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxOTU6I2lmbmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5Ni1zdGF0aWMgYm9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTIwND1tdHlwZV9saXN0KGNvbnN0IHN0cnVjdCBpcF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yMjQtXFx0XFx0ICAgIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MjI1OiNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTIyNi1cXHRcXHQgICAgIG10eXBlX2lzX2ZpbGxlZCh4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzE3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozMTg6I2VuZGlmIC8qIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwLG1hY1xcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM3OiNkZWZpbmUgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoxMS4xMDk5NTEwMzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE0MDMwMzE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgaGVyZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVAgU2V0IENvbmZpZ3VyYXRpb24gSGllcmFyY2h5KipcblxuUmlnaHQsIHNvIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgSVAgc2V0IGZlYXR1cmVzIGFyZSBvcmdhbml6ZWQgYW5kIHdoYXQgZGVwZW5kcyBvbiB3aGF0LiBNeSBnby10byBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBpbiB0aGlzIGNhc2UsIHRoZSBvbmUgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMuIEl0J2xsIGJlIGEgbWFwIG9mIHRoZSBsYW5kc2NhcGUuXG5cbkkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBgSVBfU0VUYCwgd2hpY2ggSSdtIGFzc3VtaW5nIGlzIHRoZSB0b3AtbGV2ZWwgb3B0aW9uLCBhbmQgdGhlIHZhcmlvdXMgYml0bWFwLXJlbGF0ZWQgdHlwZXM6IGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBhbmQgYElQX1NFVF9CSVRNQVBfUE9SVGAuIFRoaXMgc2hvdWxkIGNsYXJpZnkgYW55IHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBFc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6IFwiSWYgYElQX1NFVF9CSVRNQVBfSVBgIGlzIGVuYWJsZWQsIHRoZW4gYElQX1NFVGAgbXVzdCBhbHNvIGJlIGVuYWJsZWQsXCIgb3IgcGVyaGFwcyBzb21lIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcHRpb25zLlxuXG5PbmNlIEkndmUgbWFwcGVkIHRoZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgYEtjb25maWdgIGZpbGUsIEkgc2hvdWxkIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgSVAgc2V0IGJpdG1hcCBmZWF0dXJlcywgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIEZyb20gdGhlcmUgSSBjYW4gY2hlY2sgYW55IGNvZGUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MTQuMjUwMjU3OTcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSVBfU0VUXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxcbiAgIDg6XFx0XFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XFxuICAgOTpcXHRcXHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcXFwic2V0XFxcIiBtYXRjaFxcbiAgMTA6XFx0XFx0ICBhbmQgXFxcIlNFVFxcXCIgdGFyZ2V0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJUF9TRVRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElQX1NFVF9NQVhcXG4gIDE3OlxcdFxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4gIDE4OlxcdFxcdGRlZmF1bHQgMjU2XFxuICAxOTpcXHRcXHRyYW5nZSAyIDY1NTM0XFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBZb3UgY2FuIGRlZmluZSBoZXJlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1heGltdW0gbnVtYmVyIFxcbiAgMjM6XFx0XFx0ICBvZiBJUCBzZXRzIGZvciB0aGUga2VybmVsLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIFRoZSB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ21heF9zZXRzJyBtb2R1bGVcXG4gIDI2OlxcdFxcdCAgcGFyYW1ldGVyIG9mIHRoZSAnaXBfc2V0JyBtb2R1bGUuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBJUF9TRVRfQklUTUFQX0lQXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwIHNldCBzdXBwb3J0XFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYml0bWFwOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxcbiAgMzM6XFx0XFx0ICBjYW4gc3RvcmUgSVB2NCBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKSBmcm9tIGEgcmFuZ2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gSVBfU0VUXFxuICA0MDpcXHRcXHRoZWxwXFxuICA0MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGJpdG1hcDppcCxtYWMgc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2ggb25lXFxuICA0MjpcXHRcXHQgIGNhbiBzdG9yZSBJUHY0IGFkZHJlc3MgYW5kIChzb3VyY2UpIE1BQyBhZGRyZXNzIHBhaXJzIGZyb20gYSByYW5nZS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYml0bWFwOnBvcnQgc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2ggb25lXFxuICA1MTpcXHRcXHQgIGNhbiBzdG9yZSBUQ1AvVURQIHBvcnQgbnVtYmVycyBmcm9tIGEgcmFuZ2UuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1NDpcXHRcXG4gIDU1OlxcdGNvbmZpZyBJUF9TRVRfSEFTSF9JUFxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuICA1NzpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAgNTg6XFx0XFx0aGVscFxcbiAgNTk6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBoYXNoOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxcbiAgNjA6XFx0XFx0ICBjYW4gc3RvcmUgYXJiaXRyYXJ5IElQdjQgb3IgSVB2NiBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoxNC4yNTAzODIzMzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAwMDUyMjM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYG5ldGZpbHRlci9pcHNldGAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBmcmFtZXdvcmsuIEl0J3MgY2xlYXJseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBib3RoIG5ldGxpbmsgKHNwZWNpZmljYWxseSBgbmZuZXRsaW5rYCBhbmQgYGlwc2V0YCkgYW5kIHRoZSBuZXRmaWx0ZXIgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCwgdmlhIHRoZSBgeHRfU0VUYCB0YXJnZXQgZm9yIHBhY2tldC1kcml2ZW4gc2V0IHVwZGF0ZXMuIFRoZSBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gYGlwX3NldF9iaXRtYXBfZ2VuLmhgLCB3aXRoaW4gdGhlIGBtdHlwZV9hZGRgIGZ1bmN0aW9uLCBtb3JlIHByZWNpc2VseSB3aGVuIGluaXRpYWxpemluZyBjb21tZW50cyB2aWEgYGlwX3NldF9pbml0X2NvbW1lbnRgLiBUaGlzIGRpcmVjdGx5IGluZmx1ZW5jZXMgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSB3aGVuIHRoZSBgZXh0LVx1MDAzZXRhcmdldGAgaXMgY29uZmlndXJlZCwgd2hpY2ggaW5kaWNhdGVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBiaXRtYXAgc2V0cyB0aGF0IGhhdmUgY29tbWVudHMgZW5hYmxlZC5cblxuR2l2ZW4gaXRzIHJlYWNoYWJpbGl0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBwYWNrZXQgcHJvY2Vzc2luZywgbXkgaW5pdGlhbCBpbnN0aW5jdCBpczogKip5ZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLioqIEl0IHRpY2tzIGFsbCB0aGUgYm94ZXMg4oCTIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIGludGVyYWN0cyB3aXRoIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBgbXR5cGVfYWRkYCBpdHNlbGYgaXMgZ2VuZXJhdGVkIGZvciB0aGUgYml0bWFwIHNldCB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBgYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBtYWNfYWRkYCwgYW5kIGBiaXRtYXBfcG9ydF9hZGRgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYm90aCBrZXJuZWwgYW5kIHVzZXItYWNjZXNzaWJsZSBmdW5jdGlvbnMsIGFzIGRlbW9uc3RyYXRlZCBieSB0aGUgYGthZHRgIGFuZCBgdWFkdGAgdmFyaWFudHMuICBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgYWxzbyBjcnVjaWFsLCBhcyBpdCdzIGRpcmVjdGx5IGNhbGxlZCBieSBgbXR5cGVfYWRkYC4gSXQgc2VlbXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHZlcnkgcmVsZXZhbnQ6XG5gYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBtYWNfYWRkYCwgYGJpdG1hcF9wb3J0X2FkZGAsIGBiaXRtYXBfaXBfa2FkdGAsIGBiaXRtYXBfaXBtYWNfa2FkdGAsIGBiaXRtYXBfcG9ydF9rYWR0YCwgYGJpdG1hcF9pcF91YWR0YCwgYGJpdG1hcF9pcG1hY191YWR0YCwgYGJpdG1hcF9wb3J0X3VhZHRgLCBgaXBfc2V0X2luaXRfY29tbWVudGAuXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gaXBzZXQgYml0bWFwIHR5cGVzIGFuZCBjb21tZW50IGV4dGVuc2lvbiBoYW5kbGluZywgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cy4gVGhleSBhcmUgbm90IHViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucywgYnV0IGFyZSBzcGVjaWZpYyB0byBpcHNldCBmdW5jdGlvbmFsaXR5LlxuXG5Gb3IgZnV6emluZywgSSdsbCBzZWxlY3QgdGhlIG1vc3QgZGlyZWN0bHkgcmVsZXZhbnQgc3ltYm9sczogYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGBiaXRtYXBfcG9ydF9hZGRgLCBgYml0bWFwX2lwX2thZHRgLCBgYml0bWFwX2lwbWFjX2thZHRgLCBgYml0bWFwX3BvcnRfa2FkdGAsIGBiaXRtYXBfaXBfdWFkdGAsIGBiaXRtYXBfaXBtYWNfdWFkdGAsIGBiaXRtYXBfcG9ydF91YWR0YCwgYGlwX3NldF9pbml0X2NvbW1lbnRgLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgc2V0OiBgSVBfU0VUYCwgYElQX1NFVF9CSVRNQVBfSVBgLCBgSVBfU0VUX0JJVE1BUF9JUE1BQ2AsIGBJUF9TRVRfQklUTUFQX1BPUlRgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kICBgTkVURklMVEVSX1hUX1RBUkdFVF9TRVRgIChvciBgTkVURklMVEVSX1hUX1NFVGApLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlnIG5hbWUgZm9yIGB4dF9TRVRgIHRvIGVuc3VyZSBhY2N1cmFjeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoyMS4yNTA5MDc2MThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTc3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInh0X1NFVHxORVRGSUxURVJfWFQuKlNFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03NzM9Y29uZmlnIE5FVEZJTFRFUl9YVF9DT05OTUFSS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Nzg1OmNvbmZpZyBORVRGSUxURVJfWFRfU0VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc4Ni1cXHR0cmlzdGF0ZSAnc2V0IHRhcmdldCBhbmQgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTYwPW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICs9IHh0X2Nvbm5tYXJrLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1NFVCkgKz0geHRfc2V0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2Mi1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX05BVCkgKz0geHRfbmF0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MjE9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYdGFibGVzOiBJUCBzZXQgbWF0Y2ggYW5kIHRhcmdldCBtb2R1bGVcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjIyOk1PRFVMRV9BTElBUyhcXFwieHRfU0VUXFxcIik7XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yMy1NT0RVTEVfQUxJQVMoXFxcImlwdF9zZXRcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MjEuMzE4MDkwODg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjQwNzE4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgeHRfU0VUYCBOZXRmaWx0ZXIgTW9kdWxlKipcblxuT2theSwgc28gYE5FVEZJTFRFUl9YVF9TRVRgIGlzIHRoZSBOZXRmaWx0ZXIgdGFyZ2V0IG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBgeHRfU0VUYCBtb2R1bGUuIEdvdCBpdC4gVGhpcyBtb2R1bGUncyBqb2IgaXMgdG8gc2V0IHRoZSBgZXh0LVx1MDAzZXRhcmdldGAgZmllbGQgdG8gYDFgIHdoZW4gYSBwYWNrZXQgbWF0Y2hlcyBpdHMgY3JpdGVyaWEgYW5kIHRoZSB0YXJnZXQgaXMgZXhlY3V0ZWQuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUbyBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzcG90LW9uLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiBgeHRfc2V0LmNgLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgcGFja2V0IGZpbHRlcmluZyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoyMy41NDIxNjU1NTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Nzc2NTA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLnRhcmdldCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjIzLjYwODk1MDUyM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc2MjM4MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgLnRhcmdldGAgRmllbGQgaW4gaXBfc2V0X2V4dCBhbmQgSVBfU0VUX0lOSVRfS0VYVCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYC50YXJnZXRgIHdpdGhpbiB0aGUgYHN0cnVjdCBpcF9zZXRfZXh0YCBhbmQgdGhlIGBJUF9TRVRfSU5JVF9LRVhUYCBtYWNyby4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwgZXh0ZW5zaW9uIGluaXRpYWxpemF0aW9uIGFuZCB0YXJnZXQgYXNzaWdubWVudCwgc28gdGhlIHN0cnVjdHVyZSBgaXBfc2V0X2V4dGAgcHJvYmFibHkgY29udGFpbnMgc29tZSBkYXRhIHJlbGV2YW50IGZvciB0aGUgaXBzZXQuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSB3aGVyZSB0aGVzZSBhcmUgZGVmaW5lZC4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgYHRhcmdldGAgZmllbGQgaXMgYSBzaW1wbGUgcG9pbnRlciBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4LiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIEkgZXhwZWN0IHRvIHNlZSBhbiBhc3NvY2lhdGVkIGluaXRpYWxpemF0aW9uIG1hY3JvLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjI3LjA4NTE5MTk3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxNzg3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfU0VUX0lOSVRfS0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjM9bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTMxLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjUzMjojZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTMzLVxcdHsgLmJ5dGVzID0gKHNrYiktXFx1MDAzZWxlbiwgLnBhY2tldHMgPSAxLCAudGFyZ2V0ID0gdHJ1ZSxcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjI3LjEzOTM3NjM5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTgyMjA4Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwtU3BhY2UgSVAgU2V0IEluaXRpYWxpemF0aW9uIGFuZCBDb21tZW50IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgSVAgc2V0cyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgY29tbWVudHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoZSBtYWNybyBgSVBfU0VUX0lOSVRfS0VYVGAsIHdoaWNoIGlzIHVzZWQgaW4gYGJpdG1hcF9pcF9rYWR0YCwgYGJpdG1hcF9pcG1hY19rYWR0YCwgYW5kIGBiaXRtYXBfcG9ydF9rYWR0YC4gIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgSVBfU0VUX0lOSVRfS0VYVGAgaXMgY2FsbGVkIHdoZW4gdGhlIGBrYWR0YCBmdW5jdGlvbiAoa2VybmVsIGFkZC9kZWwvdGVzdCkgaXMgaW52b2tlZCwgdHlwaWNhbGx5IHdoZW4gdGhlIGB4dF9zZXRgIHRhcmdldCBpcyB1c2VkLCBhbmQgaW4gdGhpcyBjYXNlLCBgZXh0LnRhcmdldGAgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBjb250cmFzdHMgd2l0aCBgSVBfU0VUX0lOSVRfVUVYVGAsIHVzZWQgZHVyaW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgKGB1YWR0YCkgd2hlcmUgYGV4dC50YXJnZXRgIGlzIGBmYWxzZWAuXG5cblRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGNydWNpYWw6IFdoZW4gYWRkaW5nIGVsZW1lbnRzIHRocm91Z2ggdGhlIGtlcm5lbCBwYXRoLCB3ZSAqZG9uJ3QqIHdhbnQgdG8gY2FsbCBgaXBfc2V0X2luaXRfY29tbWVudGAuIFRoZSBrZXJuZWwgcGFja2V0IHBhdGggaXNuJ3Qgc3VwcG9zZWQgdG8gcHJvdmlkZSBjb21tZW50cywgYW5kIHdlIGNlcnRhaW5seSBkb24ndCB3YW50IHRvIGNsZWFyIG9yIG92ZXJ3cml0ZSBleGlzdGluZyBjb21tZW50cyB3aXRoIGBOVUxMYCBpbiB0aGUgYGthZHRgIGNvbnRleHQuIFRoaXMgaXMgd2hhdCB0aGUgcGF0Y2ggaXMgYWJvdXQuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyB2ZXJpZnkgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmU6XG4qICAgYElQX1NFVGAgaXMgZW5hYmxlZFxuKiAgIGBJUF9TRVRfQklUTUFQX0lQYCBpcyBlbmFibGVkXG4qICAgYElQX1NFVF9CSVRNQVBfSVBNQUNgIGlzIGVuYWJsZWRcbiogICBgSVBfU0VUX0JJVE1BUF9QT1JUYCBpcyBlbmFibGVkXG4qICAgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZFxuKiAgIGBORVRGSUxURVJfWFRfU0VUYCBpcyBlbmFibGVkXG5cbk5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBzeW1ib2xzIGFyZSBjb3JyZWN0LCBsZXRzIHZlcmlmeSB0aGVzZTpcbiogICBgYml0bWFwX2lwX2FkZGBcbiogICBgYml0bWFwX2lwbWFjX2FkZGBcbiogICBgYml0bWFwX3BvcnRfYWRkYFxuKiAgIGBiaXRtYXBfaXBfa2FkdGBcbiogICBgYml0bWFwX2lwbWFjX2thZHRgXG4qICAgYGJpdG1hcF9wb3J0X2thZHRgXG4qICAgYGJpdG1hcF9pcF91YWR0YFxuKiAgIGBiaXRtYXBfaXBtYWNfdWFkdGBcbiogICBgYml0bWFwX3BvcnRfdWFkdGBcbiogICBgaXBfc2V0X2luaXRfY29tbWVudGBcblxuVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgYG10eXBlX2FkZCgpYCBmdW5jdGlvbiBpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gcHJlY2lzZWx5IGFkZHJlc3MgdGhpcyBrZXJuZWwtc2lkZSBjb21tZW50IGluaXRpYWxpemF0aW9uIGlzc3VlLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBwcmV2ZW50IGNvbW1lbnQgZXh0ZW5zaW9ucyBmcm9tIGJlaW5nIGluaXRpYWxpemVkIG9yIG92ZXJ3cml0dGVuIHdoZW4gdGhlIGFkZGl0aW9uIGNvbWVzIGZyb20gdGhlIGtlcm5lbCBwYXRoLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgd2l0aGluIGBiaXRtYXA6aXBgLCBgYml0bWFwOmlwLG1hY2AsIGFuZCBgYml0bWFwOnBvcnRgIGlwc2V0IHR5cGVzLlxuXG5UbyB2YWxpZGF0ZSB0aGlzIHBhdGNoIGFuZCBlbnN1cmUgdGhlIGNvcnJlY3QgYmVoYXZpb3IsIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHRoZSBlbGVtZW50IGFkZGl0aW9ucyBmcm9tIGJvdGgga2VybmVsLXNwYWNlIGFuZCB1c2Vyc3BhY2UgbmV0bGluayBjb3JyZWN0bHkgaGFuZGxlIGFuZCBtYWludGFpbiBzZXQgZXh0ZW5zaW9ucywgcHJldmVudGluZyBib3RoIGNvbW1lbnQgY29ycnVwdGlvbiBhbmQgbWVtb3J5IGxlYWtzLlxuXG5Pa2F5LCBsZXQncyBnZXQgdGhlIGZ1enppbmcgc2V0IHVwLCB0aGVuIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NjYsIk91dHB1dFRva2VucyI6Mjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjMzLjEyMTU4NzU5NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjQ5MzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpdG1hcF9pcF9hZGRcIixcbiAgICBcImJpdG1hcF9pcG1hY19hZGRcIixcbiAgICBcImJpdG1hcF9wb3J0X2FkZFwiLFxuICAgIFwiYml0bWFwX2lwX2thZHRcIixcbiAgICBcImJpdG1hcF9pcG1hY19rYWR0XCIsXG4gICAgXCJiaXRtYXBfcG9ydF9rYWR0XCIsXG4gICAgXCJiaXRtYXBfaXBfdWFkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX3VhZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X3VhZHRcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdHlwZV9hZGQoKSBpbiBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggdG8gYXZvaWQgY2FsbGluZyBpcF9zZXRfaW5pdF9jb21tZW50KCkgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgdmlhIGtlcm5lbC1zaWRlIG5ldGZpbHRlciBwYWNrZXQgcGF0aHMgKHdoZXJlIGV4dC1cXHUwMDNldGFyZ2V0IGlzIHRydWUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciBpcHNldCBiaXRtYXAgdHlwZXMgKGJpdG1hcDppcCwgYml0bWFwOmlwLG1hYywgYml0bWFwOnBvcnQpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBleHRlbnNpb24gaGFuZGxpbmcgYW5kIGNvbW1lbnQgbGlmZWN5Y2xlIHJlbWFpbiBzb3VuZCBhY3Jvc3MgdXNlcnNwYWNlIG5ldGxpbmsgYW5kIHBhY2tldC1wcm9jZXNzaW5nIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBNQUNcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfUE9SVFwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfWFRfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYml0bWFwX2lwX2FkZFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX2FkZFwiLFxuICAgIFwiYml0bWFwX3BvcnRfYWRkXCIsXG4gICAgXCJiaXRtYXBfaXBfa2FkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX2thZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X2thZHRcIixcbiAgICBcImJpdG1hcF9pcF91YWR0XCIsXG4gICAgXCJiaXRtYXBfaXBtYWNfdWFkdFwiLFxuICAgIFwiYml0bWFwX3BvcnRfdWFkdFwiLFxuICAgIFwiaXBfc2V0X2luaXRfY29tbWVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG10eXBlX2FkZCgpIGluIG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCB0byBhdm9pZCBjYWxsaW5nIGlwX3NldF9pbml0X2NvbW1lbnQoKSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCB2aWEga2VybmVsLXNpZGUgbmV0ZmlsdGVyIHBhY2tldCBwYXRocyAod2hlcmUgZXh0LVxcdTAwM2V0YXJnZXQgaXMgdHJ1ZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIGlwc2V0IGJpdG1hcCB0eXBlcyAoYml0bWFwOmlwLCBiaXRtYXA6aXAsbWFjLCBiaXRtYXA6cG9ydCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGV4dGVuc2lvbiBoYW5kbGluZyBhbmQgY29tbWVudCBsaWZlY3ljbGUgcmVtYWluIHNvdW5kIGFjcm9zcyB1c2Vyc3BhY2UgbmV0bGluayBhbmQgcGFja2V0LXByb2Nlc3NpbmcgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzozMy4yNTgwOTE1NTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg3ODIxNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjMzLjI1ODkzOTA5M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNDg3NzM2MzAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgbXR5cGVfYWRkKClgIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhgIHRvIGNoZWNrIGAhZXh0LVxcdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cXG5cXG4tIEFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBpcF9zZXRfZXh0YCBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBJUF9TRVRfSU5JVF9LRVhUYCBvciBgSVBfU0VUX0lOSVRfVUVYVGApLCB3aGljaCBmdWxseSB6ZXJvIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMsIGVuc3VyaW5nIGBleHQtXFx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIFRoZSBidWcgZml4ZWQgaXMgYSBsb2dpYyBpc3N1ZSAodW5pbnRlbmRlZCBjb21tZW50IGRlbGV0aW9uIGR1cmluZyBrZXJuZWwtc3BhY2UgcGFja2V0IG1hdGNoaW5nL3RhcmdldCBleGVjdXRpb24pLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTcwOWViYzkyNTViOTliZDkzYWU5M2JiOTYzYjFiYjEwODkwMGE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNToyMjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggZDZhN2U2NjA0NTQyMi4uYWUzNzZmYTNlN2EzYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtMTU5LDcgKzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFxuIFx0aWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSlcbiBcdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpO1xuLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbitcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiBcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjMzLjI1ODk0MTAyMloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Mzc0NzgwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBSZXF1ZXN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyBhIExpbnV4IGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCwgYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgaXQuIEl0J3MgYSBsb3ctc2V2ZXJpdHksIGRlZmVuc2l2ZSBjb2RlIHJldmlldywgYmFzaWNhbGx5IGEgc2FuaXRpemVyIHNlbGVjdGlvbiBpc3N1ZS5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGNoYW5nZSB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gcHJvYmFibHkgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgdGhlIHBhdGNoICphY3R1YWxseSogZG9lcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgdGhlIGtleSBoZXJlIOKAkyBhcmUgd2UgY3JlYXRpbmcgYW55IG5ldywgb3IgbWFraW5nIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0YXRlcyBhY2Nlc3NpYmxlPyBJZiBJIGZpbmQgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgaXQsIEknbGwgZmxhZyBpdCBmb3IgS01TQU4uIEknbGwgbmVlZCB0byB0aGVuIGRvY3VtZW50IHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBhdHRlbnRpb24gdG8gZGV0YWlsIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo0MS42MzM3MjQ3MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTE2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10eXBlX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNy0jZGVmaW5lIG10eXBlX2FkdF9lbGVtXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZHRfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg6I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5LSNkZWZpbmUgbXR5cGVfZ2NfaW5pdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yOC0jZGVmaW5lIG10eXBlX3Rlc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3QpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI5OiNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzEtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NC0jaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XFx0XFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMDUtXFx0LmFkdFxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozMDY6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNy1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE5LSN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIxLSN1bmRlZiBtdHlwZV9kZWxfY2lkclxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMzI6I3VuZGVmIG10eXBlX2FkZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjMzLSN1bmRlZiBtdHlwZV9kZWxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyODA6I2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNC1cXHQuYWR0XFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjM1OlxcdFxcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNi1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6NDEuNzA0NjQ3Mzc1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODc4NTA3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBCaXRtYXAgR2VuZXJhdGlvbiBpbiBgaXBzZXRgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGlwc2V0YCBiaXRtYXAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBob3cgaXQncyBnZW5lcmF0aW5nIHRoZSBiaXRtYXBzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgZm9jdXMgb24gbGluZXMgMTMwIHRocm91Z2ggMTgwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGJpdG1hcCBnZW5lcmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBgaXBzZXRgIGZyYW1ld29yay4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGFkZHJlc3MgbWFwcGluZyB3aXRoaW4gdGhhdCBzZWN0aW9uLiBJdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCB0byBhY2hpZXZlIGVmZmljaWVudCBsb29rdXBzIGFuZCBzdG9yYWdlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLi4uIEkgbmVlZCB0byBzZWUgaWYgaXQgbWFrZXMgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo0My42OTI1MDA1NDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjY6XFx0XFx0cmV0dXJuIGlwX3NldF9tYXRjaF9leHRlbnNpb25zKHNldCwgZXh0LCBtZXh0LCBmbGFncywgeCk7XFxuIDEyNzpcXHR9XFxuIDEyODpcXHRcXG4gMTI5OlxcdHN0YXRpYyBpbnRcXG4gMTMwOlxcdG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiAxMzE6XFx0XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbiAxMzI6XFx0e1xcbiAxMzM6XFx0XFx0c3RydWN0IG10eXBlICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIDEzNDpcXHRcXHRjb25zdCBzdHJ1Y3QgbXR5cGVfYWR0X2VsZW0gKmUgPSB2YWx1ZTtcXG4gMTM1OlxcdFxcdHZvaWQgKnggPSBnZXRfZXh0KHNldCwgbWFwLCBlLVxcdTAwM2VpZCk7XFxuIDEzNjpcXHRcXHRpbnQgcmV0ID0gbXR5cGVfZG9fYWRkKGUsIG1hcCwgZmxhZ3MsIHNldC1cXHUwMDNlZHNpemUpO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRpZiAocmV0ID09IElQU0VUX0FERF9GQUlMRUQpIHtcXG4gMTM5OlxcdFxcdFxcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXFx1MDAyNlxcdTAwMjZcXG4gMTQwOlxcdFxcdFxcdCAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KHgsIHNldCkpKSB7XFxuIDE0MTpcXHRcXHRcXHRcXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDM6XFx0XFx0XFx0fSBlbHNlIGlmICghKGZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19FWElTVCkpIHtcXG4gMTQ0OlxcdFxcdFxcdFxcdHNldF9iaXQoZS1cXHUwMDNlaWQsIG1hcC1cXHUwMDNlbWVtYmVycyk7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9FWElTVDtcXG4gMTQ2OlxcdFxcdFxcdH1cXG4gMTQ3OlxcdFxcdFxcdC8qIEVsZW1lbnQgaXMgcmUtYWRkZWQsIGNsZWFudXAgZXh0ZW5zaW9ucyAqL1xcbiAxNDg6XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gMTUxOlxcdFxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMtLTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gMTU0OlxcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxuIDE1NTpcXHRcXHRcXHRtdHlwZV9hZGRfdGltZW91dChleHRfdGltZW91dCh4LCBzZXQpLCBlLCBleHQsIHNldCwgbWFwLCByZXQpO1xcbiAxNTY6XFx0I2Vsc2VcXG4gMTU3OlxcdFxcdFxcdGlwX3NldF90aW1lb3V0X3NldChleHRfdGltZW91dCh4LCBzZXQpLCBleHQtXFx1MDAzZXRpbWVvdXQpO1xcbiAxNTg6XFx0I2VuZGlmXFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIDE2MTpcXHRcXHRcXHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7XFxuIDE2MjpcXHRcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG4gMTYzOlxcdFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbiAxNjQ6XFx0XFx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcXG4gMTY1OlxcdFxcdFxcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogQWN0aXZhdGUgZWxlbWVudCAqL1xcbiAxNjg6XFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIDE2OTpcXHRcXHRzZXRfYml0KGUtXFx1MDAzZWlkLCBtYXAtXFx1MDAzZW1lbWJlcnMpO1xcbiAxNzA6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cysrO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRyZXR1cm4gMDtcXG4gMTczOlxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0c3RhdGljIGludFxcbiAxNzY6XFx0bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIDE3NzpcXHRcXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gMTgwOlxcdFxcdGNvbnN0IHN0cnVjdCBtdHlwZV9hZHRfZWxlbSAqZSA9IHZhbHVlO1xcbiAxODE6XFx0XFx0dm9pZCAqeCA9IGdldF9leHQoc2V0LCBtYXAsIGUtXFx1MDAzZWlkKTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKG10eXBlX2RvX2RlbChlLCBtYXApKVxcbiAxODQ6XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjQzLjY5MjU3NjczNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY5NjEwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBpcF9zZXQgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhpcyBgaXBfc2V0YCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGV4dC1cdTAwM2V0YXJnZXRgIGFuZCBgaXBfc2V0X2luaXRfY29tbWVudGAuIEFuZCwgb2YgY291cnNlLCB0aGUgbWFjcm8gYFNFVF9XSVRIX0NPTU1FTlRgIG1heSBhbHNvIGJlIHJlbGV2YW50LiBNeSBndXQgZmVlbGluZyBpcyB0aGVzZSBhcmUgYWxsIGNvbm5lY3RlZCBzb21laG93LCBhbmQgdHJhY2luZyB1c2FnZSBpcyBteSBiZXN0IGJldC4gU28sIGxldCdzIGZpcmUgdXAgYGdyZXBgLiBJJ2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIG9jY3VycmVuY2VzIG9mIGBpcF9zZXRfaW5pdF9jb21tZW50YCwgdGhlIG1hY3JvIGBTRVRfV0lUSF9DT01NRU5UYCwgYW5kIGFsc28sIGNyaXRpY2FsbHksIGBleHQtXHUwMDNldGFyZ2V0YC4gU2VlaW5nIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucywgbWFjcm8sIGFuZCBzdHJ1Y3R1cmUgbWVtYmVyIGFyZSB1c2VkIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBjbHVlcyBJIG5lZWQuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjQ3Ljk2MjE5MDg2OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwMzA2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X2luaXRfY29tbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMzA9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTYyLVxcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXFx1MDAyNlxcdTAwMjYgIWV4dC1cXHUwMDNldGFyZ2V0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNjM6XFx0XFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE2NC1cXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM0Nj12b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM0NzppcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNDgtXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzY4LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyMy1cXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMjQ6XFx0XFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI1LVxcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIyMT1saXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMjYtXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjIyNzpcXHRcXHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZSwgc2V0KSwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTIyOC1cXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo0OC4wNTYyMjY5MzlaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwNjk4MzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIFNldCBDb3JlIGFuZCBIYXNoIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIG9mIHRoZSBJUCBzZXQgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGhhc2ggZ2VuZXJhdGlvbiBtZWNoYW5pc20uIExldCdzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZXhhbWluZSBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jYCBhcm91bmQgbGluZSAzNDYuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGJhc2ljIElQIHNldCBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgYXJlIG1hbmFnZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBmdW5jdGlvbiBjYWxscyBvciBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGVyZSB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB3aG9sZSB0aGluZy5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGhhc2ggaW1wbGVtZW50YXRpb24sIEkgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGBpcF9zZXRfaGFzaF9nZW4uaGAgYXJvdW5kIGxpbmUgMTEyMC4gVGhlIGhlYWRlciBmaWxlcyBhcmUgZ2VuZXJhbGx5IHdoZXJlIHlvdSdsbCBmaW5kIHRoZSBtYWNyb3MsIGFuZCBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIGNyaXRpY2FsIGFsZ29yaXRobXMsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGhvbGRzIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBoYXNoIHRhYmxlIGdlbmVyYXRpb24gaW4gdGhhdCBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGRldGFpbHMgYXJlIGNvcnJlY3QuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdpbmcgY29sbGlzaW9ucywgaG93IHRoZXkgYXJlIGJ1aWxkaW5nIHRoZSBoYXNoIHRhYmxlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGF0J2xsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBBbHJpZ2h0LCBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo1MC41NjMyMTM0MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0cmV0dXJuIG5sYV9kYXRhKHRiKTtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0LyogQ2FsbGVkIGZyb20gdWFkZCBvbmx5LCBwcm90ZWN0ZWQgYnkgdGhlIHNldCBzcGlubG9jay5cXG4gMzQ0OlxcdCAqIFRoZSBrYWR0IGZ1bmN0aW9ucyBkb24ndCB1c2UgdGhlIGNvbW1lbnQgZXh0ZW5zaW9ucyBpbiBhbnkgd2F5LlxcbiAzNDU6XFx0ICovXFxuIDM0NjpcXHR2b2lkXFxuIDM0NzpcXHRpcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbiAzNDg6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxuIDM0OTpcXHR7XFxuIDM1MDpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVxcdTAwM2VjLCAxKTtcXG4gMzUxOlxcdFxcdHNpemVfdCBsZW4gPSBleHQtXFx1MDAzZWNvbW1lbnQgPyBzdHJsZW4oZXh0LVxcdTAwM2Vjb21tZW50KSA6IDA7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGlmICh1bmxpa2VseShjKSkge1xcbiAzNTQ6XFx0XFx0XFx0YXRvbWljNjRfc3ViKHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDEsIFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gMzU1OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVxcdTAwM2VjLCBOVUxMKTtcXG4gMzU2OlxcdFxcdFxcdGtmcmVlX3JjdShjLCByY3UpO1xcbiAzNTc6XFx0XFx0fVxcbiAzNTg6XFx0XFx0aWYgKCFsZW4pXFxuIDM1OTpcXHRcXHRcXHRyZXR1cm47XFxuIDM2MDpcXHRcXHRpZiAodW5saWtlbHkobGVuIFxcdTAwM2UgSVBTRVRfTUFYX0NPTU1FTlRfU0laRSkpXFxuIDM2MTpcXHRcXHRcXHRsZW4gPSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFO1xcbiAzNjI6XFx0XFx0YyA9IGttYWxsb2Moc2l6ZW9mKCpjKSArIGxlbiArIDEsIEdGUF9BVE9NSUMpO1xcbiAzNjM6XFx0XFx0aWYgKHVubGlrZWx5KCFjKSlcXG4gMzY0OlxcdFxcdFxcdHJldHVybjtcXG4gMzY1OlxcdFxcdHN0cnNjcHkoYy1cXHUwMDNlc3RyLCBleHQtXFx1MDAzZWNvbW1lbnQsIGxlbiArIDEpO1xcbiAzNjY6XFx0XFx0YXRvbWljNjRfYWRkKHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDEsIFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gMzY3OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVxcdTAwM2VjLCBjKTtcXG4gMzY4OlxcdH1cXG4gMzY5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHQvKiBVc2VkIG9ubHkgd2hlbiBkdW1waW5nIGEgc2V0LCBwcm90ZWN0ZWQgYnkgcmN1X3JlYWRfbG9jaygpICovXFxuIDM3MjpcXHRzdGF0aWMgaW50XFxuIDM3MzpcXHRpcF9zZXRfcHV0X2NvbW1lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50KVxcbiAzNzQ6XFx0e1xcbiAzNzU6XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZShjb21tZW50LVxcdTAwM2VjKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0aWYgKCFjKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM3OTpcXHRcXHRyZXR1cm4gbmxhX3B1dF9zdHJpbmcoc2tiLCBJUFNFVF9BVFRSX0NPTU1FTlQsIGMtXFx1MDAzZXN0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjUwLjU2MzQ2OTQwMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg4NzA5OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgYCFleHQtXHUwMDNldGFyZ2V0YCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoaXMgY2hlY2ssIHNwZWNpZmljYWxseSB3aHkgYCFleHQtXHUwMDNldGFyZ2V0YCB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCB0aGUgZmllbGQgYGV4dC1cdTAwM2V0YXJnZXRgIGFjdHVhbGx5IHJlcHJlc2VudHMuIFRpbWUgdG8gZ28gaHVudGluZy4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSBgc3RydWN0IGlwX3NldF9leHRgIGRlZmluaXRpb24gYW5kIGFueSBzdXJyb3VuZGluZyBjb2RlIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgZXh0LVx1MDAzZXRhcmdldGAgYW5kIGp1c3QgcGxhaW4gYHRhcmdldGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2YgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IHRvIGxvb2sgYXQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo1Mi41NTIxODMxNjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTQ5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xMTY9c3RydWN0IGlwX3NldF9leHQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMTIzLVxcdHU4IGJ5dGVzX29wO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjEyNDpcXHRib29sIHRhcmdldDtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xMjUtfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTE0MT1zdHJ1Y3QgaXBfc2V0X2FkdF9vcHQge1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0Mi1cXHR1OCBmYW1pbHk7XFx0XFx0LyogQWN0dWFsIHByb3RvY29sIGZhbWlseSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjE0MzpcXHR1OCBkaW07XFx0XFx0XFx0LyogRGltZW5zaW9uIG9mIG1hdGNoL3RhcmdldCAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0NC1cXHR1OCBmbGFncztcXHRcXHQvKiBEaXJlY3Rpb24gYW5kIG5lZ2F0aW9uIGZsYWdzICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0zMTY9ZXh0ZXJuIHZvaWQgaXBfc2V0X25mbmxfcHV0KHN0cnVjdCBuZXQgKm5ldCwgaXBfc2V0X2lkX3QgaW5kZXgpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMxNy1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDozMTg6LyogQVBJIGZvciBpcHRhYmxlcyBzZXQgbWF0Y2gsIGFuZCBTRVQgdGFyZ2V0ICovXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMzE5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9NTIzPW5mX2luZXRfYWRkcl9tYXNrX2lucGxhY2UodW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzMi0jZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTMzOlxcdHsgLmJ5dGVzID0gKHNrYiktXFx1MDAzZWxlbiwgLnBhY2tldHMgPSAxLCAudGFyZ2V0ID0gdHJ1ZSxcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTM0LVxcdCAgLnRpbWVvdXQgPSBpcF9zZXRfYWR0X29wdF90aW1lb3V0KG9wdCwgc2V0KSB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjUyLjYxODczNjM5MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY1OTM0OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVAgU2V0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSVBfU0VUX0lOSVRfS0VYVGAgbWFjcm8uIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgdXNlZCB0byBpbml0aWFsaXplIHNvbWUgc29ydCBvZiBgaXBfc2V0YCBzdHJ1Y3R1cmUgZm9yIGtlcm5lbCBleHRlbnNpb25zIChrZXh0cykuICBJdCdzIHNldHRpbmcgdXAgdGhlIGJhc2ljczogdGhlIG51bWJlciBvZiBieXRlcyBhbmQgcGFja2V0cywgYSBib29sZWFuIGluZGljYXRpbmcgYSAndGFyZ2V0JywgYW5kIGEgdGltZW91dCB2YWx1ZS4gIFRoZSBgKHNrYiktXHUwMDNlbGVuYCBwYXJ0IGlzIGludGVyZXN0aW5nOyB0aGF0IGxpa2VseSByZWZlcnMgdG8gdGhlIHNpemUgb2YgYSBzb2NrZXQgYnVmZmVyLiBUaGUgYGlwX3NldF9hZHRfb3B0X3RpbWVvdXRgIHN1Z2dlc3RzIHNvbWUgZHluYW1pYyB0aW1lb3V0IGNhbGN1bGF0aW9uLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlLCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaXBfc2V0LmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNi0xMzA7IHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgd2l0aCB0aGUgYElQX1NFVGAgYW5kIHN1cnJvdW5kaW5nIGxvZ2ljLiBBbHNvIEknbGwgY2hlY2sgYGlwX3NldF9oYXNoX2dlbi5oYCBhcm91bmQgbGluZSAxMTIzLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBpbiBjb250ZXh0LiBNaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnksIGlmIEkgY2FuIGFjY2VzcyBpdCwgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhpcyBpbml0aWFsaXphdGlvbi4gSWYgbm90LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGlwX3NldF9oYXNoX2dlbi5oYCBpbiBkZXB0aC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBtYWNybyBmaXRzIGludG8gdGhlIGxhcmdlciBgaXBfc2V0YCBmcmFtZXdvcmsgYW5kIGhvdyBoYXNoIGdlbmVyYXRpb24gcGxheXMgYSByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTI4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjU1LjM4NDY3NTA2MloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcbiAxMTY6XFx0c3RydWN0IGlwX3NldF9leHQge1xcbiAxMTc6XFx0XFx0c3RydWN0IGlwX3NldF9za2JpbmZvIHNrYmluZm87XFxuIDExODpcXHRcXHR1NjQgcGFja2V0cztcXG4gMTE5OlxcdFxcdHU2NCBieXRlcztcXG4gMTIwOlxcdFxcdGNoYXIgKmNvbW1lbnQ7XFxuIDEyMTpcXHRcXHR1MzIgdGltZW91dDtcXG4gMTIyOlxcdFxcdHU4IHBhY2tldHNfb3A7XFxuIDEyMzpcXHRcXHR1OCBieXRlc19vcDtcXG4gMTI0OlxcdFxcdGJvb2wgdGFyZ2V0O1xcbiAxMjU6XFx0fTtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0I2RlZmluZSBleHRfdGltZW91dChlLCBzKVxcdFxcXFxcXG4gMTI4OlxcdCgodW5zaWduZWQgbG9uZyAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX1RJTUVPVVRdKSlcXG4gMTI5OlxcdCNkZWZpbmUgZXh0X2NvdW50ZXIoZSwgcylcXHRcXFxcXFxuIDEzMDpcXHQoKHN0cnVjdCBpcF9zZXRfY291bnRlciAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX0NPVU5URVJdKSlcXG4gMTMxOlxcdCNkZWZpbmUgZXh0X2NvbW1lbnQoZSwgcylcXHRcXFxcXFxuIDEzMjpcXHQoKHN0cnVjdCBpcF9zZXRfY29tbWVudCAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX0NPTU1FTlRdKSlcXG4gMTMzOlxcdCNkZWZpbmUgZXh0X3NrYmluZm8oZSwgcylcXHRcXFxcXFxuIDEzNDpcXHQoKHN0cnVjdCBpcF9zZXRfc2tiaW5mbyAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX1NLQklORk9dKSlcXG4gMTM1OlxcdFxcbiAxMzY6XFx0dHlwZWRlZiBpbnQgKCppcHNldF9hZHRmbikoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSxcXG4gMTM3OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIDEzODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGNtZGZsYWdzKTtcXG4gMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo1NS4zODQ4MDUyMTJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcxNTE4MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGlwX3NldGAgQ29tbWVudCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAxMTIzIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAgaGFzIG1lIHNjcmF0Y2hpbmcgbXkgaGVhZC4gVGhlIGNvbmRpdGlvbmFsOiBgaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpYC4uLiB3aHkgdGhlIGAhZXh0LVx1MDAzZXRhcmdldGAgY2hlY2s/IEl0J3MgYSBrZXkgZGV0YWlsLCBzbyBsZXQncyBkaWcgaW50byBpdC5cblxuUmVhZGluZyBhcm91bmQgYGlwX3NldF9pbml0X2NvbW1lbnRgIGluIGBpcF9zZXRfY29yZS5jYCwgSSBzZWUgdGhlIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSBtYXJrZWQgYXMgYmVpbmcgY2FsbGVkIGZyb20gYHVhZGRgICpvbmx5KiwgYW5kIHByb3RlY3RlZCBieSB0aGUgc2V0J3Mgc3BpbmxvY2suIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdGhlIGthZHQgZnVuY3Rpb25zLCB3aGljaCBpcyBob3cgd2UgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGZyb20gdGhlIHVzZXIgc3BhY2Ugd2hlbiB1c2luZyB0aGUgU0VUIHRhcmdldCwgZG9uJ3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cblxuQWhhISBUaGF0J3MgaXQuIFdoZW4gYSBwYWNrZXQgbWF0Y2hpbmcgcnVsZSBvciB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCBjYWxscyB0aGUgYWRkIGZ1bmN0aW9uYWxpdHkgKHdoaWNoIG1lYW5zIHRocm91Z2ggdGhlIGthZHQgLyBrZXJuZWwgYWRkKSBgZXh0LVx1MDAzZXRhcmdldGAgZ2V0cyBzZXQgdG8gYHRydWVgLiBUaGlzIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlIGBleHQtXHUwMDNlY29tbWVudGAgc3RydWN0dXJlIGlzIG5vdCBwcm92aWRlZC4gSWYgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdlcmUgY2FsbGVkIGZyb20gdGhlIHBhY2tldCBjb250ZXh0LCBpdCdzIGVpdGhlciBub3QgZXhwZWN0aW5nIHRoZSBjb21tZW50IG9yLCB0aGUgY29kZSBzaG91bGRuJ3QgYmUgb3ZlcndyaXRpbmcgYW55IGNvbW1lbnRzIG9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgbWVtb3J5IHdpdGggYGtmcmVlX3JjdWAgd2l0aG91dCBhcHByb3ByaWF0ZSBsb2NraW5nIG9yIHVzZXIgY29udGV4dC4gVGhhdCdzIGEgaHVnZSBwb3RlbnRpYWwgaXNzdWUuXG5cbldhaXQgYSBzZWNvbmQuLi4gaW4gYGlwX3NldF9pbml0X2NvbW1lbnRgLCB0aGVyZSdzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNvbW1lbnQtXHUwMDNlYywgMSlgIGFuZCB0aGVuIGBhdG9taWM2NF9zdWJgIG9yIGBhdG9taWM2NF9hZGRgIG1vZGlmaWVzIGBzZXQtXHUwMDNlZXh0X3NpemVgIG9yIGZyZWVzIGBjYC4gSWYgd2Ugd2VyZSB0byBjYWxsIGBpcF9zZXRfaW5pdF9jb21tZW50YCBmcm9tIHRoZSBrZXJuZWwgcGFja2V0IHBhdGgsIHBvdGVudGlhbGx5IGFzIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0LCB0aGlzIGNvdWxkIG9ibGl0ZXJhdGUgYW4gZXhpc3RpbmcgY29tbWVudCwgaW50cm9kdWNlIGNvbmN1cnJlbmN5IHByb2JsZW1zLCBvciB3b3JzZS4gVGhlIGBpcF9zZXRfaGFzaF9nZW4uaGAgY29kZSBhbHJlYWR5IGhhcyB0aGlzIHNhZmVndWFyZCBpbiBwbGFjZTogYGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KWAuIEl0IGlzIGEgZ29vZCB0aGluZyB0aGF0IGl0J3MgdGhlcmUuXG5cbkJ1dCBub3cgSSBzZWUgaXQuLi5gaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgbWlzc2luZyB0aGF0IHZpdGFsIGBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXRgIGNoZWNrISBUaGF0J3MgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5IHRoYXQgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gYSBmdWxsIGF1ZGl0IGFjcm9zcyB0aGUgY29kZWJhc2UgYW5kIGxvb2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWxhdGVkIHRvIGBleHQtXHUwMDNldGFyZ2V0YCwgYGlwX3NldF9leHRgIG9yIGBleHQtXHUwMDNlY29tbWVudGAuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyB3aGVyZSBgaXBfc2V0X2V4dGAgaXMgaW5pdGlhbGl6ZWQgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvci4gVGhpcyBuZWVkcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24gdG8gcHJldmVudCBhbnkgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgZGV2YXN0YXRpbmcsIGZsYXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjQ6MDQuMDk5OTg3MzkyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxNjYyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwX3NldF9leHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTE1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTE2Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTE3OlxcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTExOC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzE6XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTE3NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE3NjptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTc3OlxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTc4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTExMD1iaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTYtXFx0c3RydWN0IGJpdG1hcF9pcF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTE3OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTE4LVxcdHUzMiBpcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTEzMD1iaXRtYXBfaXBfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMzYtXFx0c3RydWN0IGJpdG1hcF9pcF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTM3OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMzgtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0xMTc9Yml0bWFwX2lwbWFjX2FkZF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgKnRpbWVvdXQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMTE4LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtICplLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjExOTpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwgc3RydWN0IGlwX3NldCAqc2V0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTEyMC1cXHRcXHRcXHQgc3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwLCBpbnQgbW9kZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOT1iaXRtYXBfaXBtYWNfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTUtXFx0c3RydWN0IGJpdG1hcF9pcG1hY19hZHRfZWxlbSBlID0geyAuaWQgPSAwLCAuYWRkX21hYyA9IDEgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyMTY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTctXFx0dTMyIGlwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MjQyPWJpdG1hcF9pcG1hY191YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0Ny1cXHRzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyNDg6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0OS1cXHR1MzIgaXAgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0xMjc9Yml0bWFwX3BvcnRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzMy1cXHRzdHJ1Y3QgYml0bWFwX3BvcnRfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6MTM0OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xMzUtXFx0X19iZTE2IF9fcG9ydDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MTUzPWJpdG1hcF9wb3J0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNTgtXFx0c3RydWN0IGJpdG1hcF9wb3J0X2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjE1OTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNjAtXFx0dTMyIHBvcnQ7XFx0Lyogd3JhcGFyb3VuZCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM0Nz1pcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDg6XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDAxPXR5cGVkZWYgdm9pZCAoKmRlc3Ryb3llcikoc3RydWN0IGlwX3NldCAqLCB2b2lkICopO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQwMy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDA0OmNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0X3R5cGUgaXBfc2V0X2V4dGVuc2lvbnNbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDA1LVxcdFtJUFNFVF9FWFRfSURfQ09VTlRFUl0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDY4PWlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQ2OTpcXHRcXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00NzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYyMD1pcF9zZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MjE6XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYzMT1pcF9zZXRfZ2V0X3NrYmluZm8oc3RydWN0IGlwX3NldF9za2JpbmZvICpza2JpbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MzI6XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjMzOlxcdFxcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYzNC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjM4PWJvb2xcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjM5OmlwX3NldF9tYXRjaF9leHRlbnNpb25zKHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjQwOlxcdFxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MsIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTY0MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMzNT1zdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzM4LVxcdHN0cnVjdCBtdHlwZV9lbGVtIGQ7XFx0LyogRWxlbWVudCB2YWx1ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzM5OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dDtcXHQvKiBFeHRlbnNpb25zIGZvciBBREQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0MDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBtZXh0O1xcdC8qIFRhcmdldCBleHRlbnNpb25zIGZvciBBREQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0MS1cXHR1MzIgZmxhZ3M7XFx0XFx0LyogRmxhZ3MgZm9yIEFERCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQxOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQyOlxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NDMtc3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQ0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQ1OlxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODk6XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTkwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE1MS1cXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZWQsIHZhbHVlLCBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNTI6XFx0XFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VleHQsIGV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTUzOlxcdFxcdG1lbWNweShcXHUwMDI2eC1cXHUwMDNlbWV4dCwgbWV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTU0LVxcdFxcdHgtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE3OTptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExODA6XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE4MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEyODY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI4NzptdHlwZV9kYXRhX21hdGNoKHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI4ODpcXHRcXHQgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHN0cnVjdCBpcF9zZXQgKnNldCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTI4OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzMDE9bXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMwMjpcXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzMDM6XFx0XFx0IHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzA0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTM4Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzg3Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzODg6XFx0ICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzODkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTgwPWhhc2hfaXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6ODc6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtODgtXFx0X19iZTMyIGlwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTEwMD1oYXNoX2lwNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDUtXFx0c3RydWN0IGhhc2hfaXA0X2VsZW0gZSA9IHsgMCB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoxMDY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDctXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBob3N0cywgaSA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjE2PWhhc2hfaXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyMi1cXHRzdHJ1Y3QgaGFzaF9pcDZfZWxlbSBlID0geyB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIyMzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMjQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjM0PWhhc2hfaXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIzOS1cXHRzdHJ1Y3QgaGFzaF9pcDZfZWxlbSBlID0geyB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjI0MDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTI0MS1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTg1PWhhc2hfaXBtYWM0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTkwLVxcdHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtIGUgPSB7IC5pcCA9IDAsIHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6OTE6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MTExPWhhc2hfaXBtYWM0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTExNS1cXHRzdHJ1Y3QgaGFzaF9pcG1hYzRfZWxlbSBlID0geyAuaXAgPSAwLCB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjExNjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTExNy1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE5OD1oYXNoX2lwbWFjNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDYtXFx0fTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MjA3OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTIwOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0yMjc9aGFzaF9pcG1hYzZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjM0LVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjIzNTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTIzNi1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz04MD1oYXNoX2lwbWFyazRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6ODc6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMi1cXHRzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjEwMzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDQtXFx0dTMyIGlwLCBpcF90byA9IDAsIGkgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMTk9aGFzaF9pcG1hcms2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMjUtXFx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMjY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIyNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjM2PWhhc2hfaXBtYXJrNl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjQxLVxcdHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjQyOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTI0My1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz05MT1oYXNoX2lwcG9ydDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTk2LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo5NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTgtXFx0Y29uc3Qgc3RydWN0IE1UWVBFICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0xMTI9aGFzaF9pcHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTctXFx0c3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjExODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTktXFx0dTMyIGlwLCBpcF90byA9IDAsIHAgPSAwLCBwb3J0LCBwb3J0X3RvLCBpID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjY0PWhhc2hfaXBwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjY5LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNzA6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI3MS1cXHRjb25zdCBzdHJ1Y3QgTVRZUEUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI4Nj1oYXNoX2lwcG9ydDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5MS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjkyOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5My1cXHR1MzIgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz05MD1oYXNoX2lwcG9ydGlwNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjk2OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTk3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTEwOD1oYXNoX2lwcG9ydGlwNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTMtXFx0c3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoxMTQ6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTUtXFx0dTMyIGlwLCBpcF90byA9IDAsIHAgPSAwLCBwb3J0LCBwb3J0X3RvLCBpID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNjM9aGFzaF9pcHBvcnRpcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjY4LVxcdHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtIGUgPSB7IC5pcCA9IHsgLmFsbCA9IHsgMCB9IH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjY5OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI3MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yODE9aGFzaF9pcHBvcnRpcDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjg2LVxcdHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtIGUgPSB7ICAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4OC1cXHR1MzIgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTM0PWhhc2hfaXBwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTQyLVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxNDM6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE0NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTYwPWhhc2hfaXBwb3J0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTY1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjE2NjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNjctXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBwID0gMCwgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzk0PWhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDAyLVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0MDM6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwNC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9NDIwPWhhc2hfaXBwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDI1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQyNjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00MjctXFx0dTMyIHBvcnQsIHBvcnRfdG87XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTczPWhhc2hfbWFjNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNzgtXFx0c3RydWN0IGhhc2hfbWFjNF9lbGVtIGUgPSB7IHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjc5OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy04MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9OTY9aGFzaF9tYWM0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0xMDAtXFx0c3RydWN0IGhhc2hfbWFjNF9lbGVtIGUgPSB7IHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjEwMTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0xMDItXFx0aW50IHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTEzPWhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIxLVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMjI6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEyMy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTM2PWhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQxLVxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQyOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0My1cXHR1MzIgaXAgPSAwLCBpcF90byA9IDAsIGkgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yODc9aGFzaF9uZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yOTUtXFx0fTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI5NjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjk3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zMTQtXFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzozMTU6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE2LVxcdGludCByZXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE2NS1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNjY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTY3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTE5Nz1oYXNoX25ldGlmYWNlNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0yMDItXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoyMDM6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0yMDQtXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBpID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNzc9aGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzg2LVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zODgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9NDE2PWhhc2hfbmV0aWZhY2U2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQyMC1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSywgLmVsZW0gPSAxIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjQyMTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQyMi1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xNDM9aGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDktXFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxNTA6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE1MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTY4PWhhc2hfbmV0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTczLVxcdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTc0OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3NS1cXHR1MzIgaXAgPSAwLCBpcF90byA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM4ND1oYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM5MC1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM5MTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzkyLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz00MTQ9aGFzaF9uZXRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy00MTgtXFx0c3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzo0MTk6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtNDIwLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMjk9aGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzNy1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEzODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzOS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTE1ND1oYXNoX25ldHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU5LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTYwOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xNjEtXFx0dTMyIHBvcnQsIHBvcnRfdG8sIHAgPSAwLCBpcCA9IDAsIGlwX3RvID0gMCwgaSA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNDk9aGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1Ny1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM1ODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTM3ND1oYXNoX25ldHBvcnQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzc5LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgIC0gMSB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM4MDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzgxLVxcdHUzMiBwb3J0LCBwb3J0X3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MTUwPWhhc2hfbmV0cG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNTYtXFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE1NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE1OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE4OT1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTk0LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxOTU6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5Ni1cXHR1MzIgaXAgPSAwLCBpcF90byA9IDAsIHAgPSAwLCBwb3J0LCBwb3J0X3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDQ3PWhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00NTMtXFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQ1NDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ3Nj1oYXNoX25ldHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgxLVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0ODI6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ4My1cXHR1MzIgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NDk9bGlzdF9zZXRfa3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTAtXFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjUxOlxcdCAgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTUyLXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTUzLVxcdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTQ6XFx0c3RydWN0IGlwX3NldF9leHQgKm1leHQgPSBcXHUwMDI2b3B0LVxcdTAwM2VleHQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NS1cXHRzdHJ1Y3Qgc2V0X2VsZW0gKmU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTc0PWxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNzUtXFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NzY6XFx0ICAgICAgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy03Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTk0PWxpc3Rfc2V0X2tkZWwoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtOTUtXFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6OTY6XFx0ICAgICAgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy05Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTExND1saXN0X3NldF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE3LXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjExODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE5LVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xODQ9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTg1Omxpc3Rfc2V0X3V0ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxODY6XFx0ICAgICAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xODcte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMjA9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjIyMTpsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjIyLVxcdFxcdFxcdCBzdHJ1Y3Qgc2V0X2VsZW0gKmUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIzNT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzY6bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjM3OlxcdCAgICAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0zMjA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzIxOmxpc3Rfc2V0X3VkZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjMyMjpcXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzIzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUzPWxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zNTgtXFx0c3RydWN0IHNldF9hZHRfZWxlbSBlID0geyAucmVmaWQgPSBJUFNFVF9JTlZBTElEX0lEIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTk6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzYwLVxcdHN0cnVjdCBpcF9zZXQgKnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI0OjA0LjIzNzE1OTAxWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjMyMzg0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXplcnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgSVBfU0VUX0lOSVRfS0VYVGAgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBSaWdodCwgdGhhdCdzIHRoZSBDOTkgc3ludGF4LiBXZSdyZSBkaXJlY3RseSBzZXR0aW5nIGAuYnl0ZXNgLCBgLnBhY2tldHNgLCBgLnRhcmdldGAsIGFuZCBgLnRpbWVvdXRgIHdpdGhpbiB0aGUgc3RydWN0LiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGJ5IGV4cGxpY2l0bHkgc2V0dGluZyB0aG9zZSBmaWVsZHMsIEM5OSBndWFyYW50ZWVzIHRoYXQgYW55IHVubWVudGlvbmVkIGZpZWxkcyB3aWxsIGJlIGltcGxpY2l0bHkgemVyb2VkIG91dC4gU28sIHdoaWxlIHdlIGFyZW4ndCBzZWVpbmcgaXQgZGlyZWN0bHksIHRoZSBgZXh0LmNvbW1lbnQgPSBOVUxMYCBwYXJ0IGlzIGVmZmVjdGl2ZWx5IGltcGxpZWQuIFRoaXMgZGVzaWduYXRlZCBpbml0aWFsaXphdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseSBsZWF2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyb3VuZC5cblxuTm93LCBsZXQncyBwaXZvdCB0byBgSVBfU0VUX0lOSVRfVUVYVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBtYWNybyBhY3R1YWxseSBleHBhbmRzIHRvLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBpbml0aWFsaXplciBpcyBjb25zdHJ1Y3RlZC4gSSB3aWxsIGV4YW1pbmUgaXQsIHRvIHVuZGVyc3RhbmQgaWYgaXQgdG9vIHVzZXMgZGVzaWduYXRlZCBpbml0aWFsaXphdGlvbiBhbmQgemVyby1maWxscyB0aGUgcmVtYWluaW5nIG1lbW9yeSwgb3IgaWYgaXQgZXhwbGljaXRseSBzcGVjaWZpZXMgZXZlcnkgZmllbGQgaW4gdGhlIHN0cnVjdCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBhcmUgaGFuZGxpbmcgbWVtb3J5IHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyNDowNy4wMDAzOTk3OTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjMwMDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9TRVRfSU5JVF9VRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTUyMz1uZl9pbmV0X2FkZHJfbWFza19pbnBsYWNlKHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC01MzUtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTM2OiNkZWZpbmUgSVBfU0VUX0lOSVRfVUVYVChzZXQpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzNy1cXHR7IC5ieXRlcyA9IFVMTE9OR19NQVgsIC5wYWNrZXRzID0gVUxMT05HX01BWCxcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI0OjA3LjEwNjcxNzQ5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMjE0NjcyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpcF9zZXQuaGAgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGlwX3NldC5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDUzNi4gSSBrbm93IHRoaXMgZmlsZSBwcmV0dHkgd2VsbCwgc28gaG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHdoYXRldmVyIHNlY3Rpb24gaXMgcmVsZXZhbnQuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIHNvbWV0aGluZyByZWxhdGl2ZWx5IGltcG9ydGFudCwgb3IgZWxzZSBJIHdvdWxkbid0IGhhdmUgc2luZ2xlZCBvdXQgYSBzcGVjaWZpYyBsaW5lIG51bWJlciBsaWtlIHRoYXQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTYwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjQ6MTAuMjI4MTg3OTA4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzA6XFx0fVxcbiA1MzE6XFx0XFxuIDUzMjpcXHQjZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcXHRcXHRcXHRcXFxcXFxuIDUzMzpcXHRcXHR7IC5ieXRlcyA9IChza2IpLVxcdTAwM2VsZW4sIC5wYWNrZXRzID0gMSwgLnRhcmdldCA9IHRydWUsXFxcXFxcbiA1MzQ6XFx0XFx0ICAudGltZW91dCA9IGlwX3NldF9hZHRfb3B0X3RpbWVvdXQob3B0LCBzZXQpIH1cXG4gNTM1OlxcdFxcbiA1MzY6XFx0I2RlZmluZSBJUF9TRVRfSU5JVF9VRVhUKHNldClcXHRcXHRcXHRcXHRcXFxcXFxuIDUzNzpcXHRcXHR7IC5ieXRlcyA9IFVMTE9OR19NQVgsIC5wYWNrZXRzID0gVUxMT05HX01BWCxcXHRcXFxcXFxuIDUzODpcXHRcXHQgIC50aW1lb3V0ID0gKHNldCktXFx1MDAzZXRpbWVvdXQgfVxcbiA1Mzk6XFx0XFxuIDU0MDpcXHQjZGVmaW5lIElQU0VUX0NPTkNBVChhLCBiKVxcdFxcdGEjI2JcXG4gNTQxOlxcdCNkZWZpbmUgSVBTRVRfVE9LRU4oYSwgYilcXHRcXHRJUFNFVF9DT05DQVQoYSwgYilcXG4gNTQyOlxcdFxcbiA1NDM6XFx0I2VuZGlmIC8qX0lQX1NFVF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI0OjEwLjIyODMyNDU4OFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzkwNzk0NjcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogUHJldmVudGluZyBDb21tZW50IENvcnJ1cHRpb24gaW4gQml0bWFwIFNldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYElQX1NFVF9JTklUX1VFWFRgIGluaXRpYWxpemVyIHVzZXMgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIG1lYW5pbmcgYW55IHVuc3BlY2lmaWVkIGZpZWxkcywgbGlrZSBgdGFyZ2V0YCwgd2lsbCBiZSB6ZXJvZWQuIFNvLCBieSBkZWZhdWx0LCBgZXh0LVx1MDAzZXRhcmdldGAgaXMgYGZhbHNlYCB3aGVuIGluaXRpYWxpemVkIHRoaXMgd2F5LlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgdGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0YCB0byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBtdHlwZV9hZGRgIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGA6XG5cbmBgYGRpZmZcblx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5cdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XG5gYGBcblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHdoZW4gYSBwYWNrZXQgdHJpZ2dlcmVkIGFuIGBJUFNFVF9BRERgIHZpYSB0aGUgbmV0ZmlsdGVyIGtlcm5lbCB0YXJnZXQgKGBleHQtXHUwMDNldGFyZ2V0ID09IHRydWVgKSwgdGhlIGNvZGUgd291bGQgZXhlY3V0ZSBgaXBfc2V0X2luaXRfY29tbWVudGAgcmVnYXJkbGVzcywgZXZlbiB3aGVuIGBleHQtXHUwMDNlY29tbWVudGAgd2FzIGBOVUxMYCBmb3Iga2VybmVsLWFkZGVkIHRhcmdldHMgKGthZHQpLiBUaGlzIG1lYW50IHRoYXQgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdvdWxkIGluYWR2ZXJ0ZW50bHkgZnJlZSBhbnkgKmV4aXN0aW5nKiBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCwgYmVjYXVzZSBgbGVuYCB3aWxsIGJlIHplcm8uIFRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgYGlwX3NldF9pbml0X2NvbW1lbnRgIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gdXNlci1zcGFjZSBhZGRzICh1YWRkKSB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24sIGFuZCBrYWR0IHRhcmdldHMgc2hvdWxkbid0IGJlIHRvdWNoaW5nIGNvbW1lbnRzIGF0IGFsbC4gVGhlIGVxdWl2YWxlbnQgbG9naWMgaGFkIGFscmVhZHkgYmVlbiBpbXBsZW1lbnRlZCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHBhdGNoIGlzIHNpbXBseSBicmluZ2luZyBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaW50byBhbGlnbm1lbnQgd2l0aCB0aGF0IGV4aXN0aW5nLCBjb3JyZWN0IGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgcGF0Y2ggZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2U6KiogTm8uIFRoaXMgcGF0Y2ggKm9ubHkqIGFkZHMgYSBjb25kaXRpb24uIEl0IGRvZXNuJ3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGUgYGV4dC1cdTAwM2V0YXJnZXRgIGZpZWxkIGlzIGEgYGJvb2xgIGluIGBzdHJ1Y3QgaXBfc2V0X2V4dGAuIEl0J3MgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBieSBgSVBfU0VUX0lOSVRfS0VYVGAgKHNldHRpbmcgaXQgdG8gYHRydWVgKSBvciBgSVBfU0VUX0lOSVRfVUVYVGAgKHdoZXJlIGl0IGRlZmF1bHRzIHRvIGBmYWxzZWApLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogTm8uIFRoZSBwYXRjaCBza2lwcyBhbiBpbml0aWFsaXphdGlvbiBjYWxsOyBpdCBkb2Vzbid0IGNyZWF0ZSBvbmUuXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBOby5cblxuU28sIGluIHN1bW1hcnk6XG5cbiogICBUaGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgSXQgKmRvZXMqIGZpeCBhIGxvZ2ljIGJ1Zy9tZW1vcnkgbGVhay91bmludGVuZGVkIGRlbGV0aW9uIHRoYXQgd2FzIHByZXNlbnQgd2hlcmUga2VybmVsIHRhcmdldCBpbnZvY2F0aW9ucyBjb3VsZCBkZWxldGUgZXhpc3RpbmcgZWxlbWVudCBjb21tZW50cy5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIHVuaXQgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGNyZWF0ZWQgb3IgZXhwb3NlZC5cbiogICBgTmVlZHNLTVNBTmA6IGBmYWxzZWBcbiogICBSZWFzb246IENsZWFyIGNvbnRyYXN0IGJldHdlZW4gS0FTQU4vZ2VuZXJpYyB0ZXN0aW5nIGFuZCBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDksIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI1OjM4LjEzNjI3NTA4M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgbXR5cGVfYWRkKClgIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhgIHRvIGNoZWNrIGAhZXh0LVxcdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cXG5cXG4tIEFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBpcF9zZXRfZXh0YCBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBJUF9TRVRfSU5JVF9LRVhUYCBvciBgSVBfU0VUX0lOSVRfVUVYVGApLCB3aGljaCBmdWxseSB6ZXJvIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMsIGVuc3VyaW5nIGBleHQtXFx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIFRoZSBidWcgZml4ZWQgaXMgYSBsb2dpYyBpc3N1ZSAodW5pbnRlbmRlZCBjb21tZW50IGRlbGV0aW9uIGR1cmluZyBrZXJuZWwtc3BhY2UgcGFja2V0IG1hdGNoaW5nL3RhcmdldCBleGVjdXRpb24pLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBtdHlwZV9hZGQoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gY2hlY2sgYCFleHQtXFx1MDAzZXRhcmdldGAgYmVmb3JlIGNhbGxpbmcgYGlwX3NldF9pbml0X2NvbW1lbnQoKWAsIG1hdGNoaW5nIHRoZSBleGlzdGluZyBwYXR0ZXJuIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoaXMgcHJldmVudHMga2VybmVsIGlwdGFibGVzIFNFVCB0YXJnZXQgYWN0aW9ucyBmcm9tIGNsZWFyaW5nL21vZGlmeWluZyBlbGVtZW50IGNvbW1lbnRzLlxcblxcbi0gQWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGlwX3NldF9leHRgIGFyZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYElQX1NFVF9JTklUX0tFWFRgIG9yIGBJUF9TRVRfSU5JVF9VRVhUYCksIHdoaWNoIGZ1bGx5IHplcm8gYWxsIHVubWVudGlvbmVkIGZpZWxkcywgZW5zdXJpbmcgYGV4dC1cXHUwMDNldGFyZ2V0YCBhbmQgYWxsIG90aGVyIGZpZWxkcyBhcmUgd2VsbC1kZWZpbmVkIGFuZCBuZXZlciB1bmluaXRpYWxpemVkLlxcbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlIGVtaXNzaW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcbi0gVGhlIGJ1ZyBmaXhlZCBpcyBhIGxvZ2ljIGlzc3VlICh1bmludGVuZGVkIGNvbW1lbnQgZGVsZXRpb24gZHVyaW5nIGtlcm5lbC1zcGFjZSBwYWNrZXQgbWF0Y2hpbmcvdGFyZ2V0IGV4ZWN1dGlvbikuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwr9nn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 05:02:01 +0000 UTC FinishedAt: 2026-09-06 05:25:39 +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": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT", "NETFILTER", "NETFILTER_XT_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT", "NETFILTER", "NETFILTER_XT_SET" ], "series_id": "a38ada7e-71dd-4b01-ac04-41235b1744df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bitmap_ip_add", "bitmap_ipmac_add", "bitmap_port_add", "bitmap_ip_kadt", "bitmap_ipmac_kadt", "bitmap_port_kadt", "bitmap_ip_uadt", "bitmap_ipmac_uadt", "bitmap_port_uadt", "ip_set_init_comment" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVBNQUMmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9QT1JUJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Yml0bWFwX2lwX2FkZCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBtYWNfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X2FkZCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBfa2FkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBtYWNfa2FkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfcG9ydF9rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcF91YWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY191YWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X3VhZHQmIzM0OywKICAgICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYG10eXBlX2FkZCgpYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCB0byBjaGVjayBgIWV4dC1cdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cblxuLSBBbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYXJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgSVBfU0VUX0lOSVRfS0VYVGAgb3IgYElQX1NFVF9JTklUX1VFWFRgKSwgd2hpY2ggZnVsbHkgemVybyBhbGwgdW5tZW50aW9uZWQgZmllbGRzLCBlbnN1cmluZyBgZXh0LVx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlIGVtaXNzaW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBUaGUgYnVnIGZpeGVkIGlzIGEgbG9naWMgaXNzdWUgKHVuaW50ZW5kZWQgY29tbWVudCBkZWxldGlvbiBkdXJpbmcga2VybmVsLXNwYWNlIHBhY2tldCBtYXRjaGluZy90YXJnZXQgZXhlY3V0aW9uKS5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtdHlwZV9hZGQoKSBpbiBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggdG8gYXZvaWQgY2FsbGluZyBpcF9zZXRfaW5pdF9jb21tZW50KCkgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgdmlhIGtlcm5lbC1zaWRlIG5ldGZpbHRlciBwYWNrZXQgcGF0aHMgKHdoZXJlIGV4dC1cdTAwM2V0YXJnZXQgaXMgdHJ1ZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIGlwc2V0IGJpdG1hcCB0eXBlcyAoYml0bWFwOmlwLCBiaXRtYXA6aXAsbWFjLCBiaXRtYXA6cG9ydCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGV4dGVuc2lvbiBoYW5kbGluZyBhbmQgY29tbWVudCBsaWZlY3ljbGUgcmVtYWluIHNvdW5kIGFjcm9zcyB1c2Vyc3BhY2UgbmV0bGluayBhbmQgcGFja2V0LXByb2Nlc3NpbmcgZXhlY3V0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU3MDllYmM5MjU1Yjk5YmQ5M2FlOTNiYjk2M2IxYmIxMDg5MDBhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MjI6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5pbmRleCBkNmE3ZTY2MDQ1NDIyLi5hZTM3NmZhM2U3YTNiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcbkBAIC0xNTksNyAmIzQzOzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFxuIFx0aWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSlcbiBcdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpO1xuLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbiYjNDM7XHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbiBcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XG4gXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuIFx0XHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKHgsIHNldCksIGV4dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaXRtYXBfaXBfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcF9rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfdWFkdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG10eXBlX2FkZCgpIGluIG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCB0byBhdm9pZCBjYWxsaW5nIGlwX3NldF9pbml0X2NvbW1lbnQoKSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCB2aWEga2VybmVsLXNpZGUgbmV0ZmlsdGVyIHBhY2tldCBwYXRocyAod2hlcmUgZXh0LVx1MDAzZXRhcmdldCBpcyB0cnVlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgaXBzZXQgYml0bWFwIHR5cGVzIChiaXRtYXA6aXAsIGJpdG1hcDppcCxtYWMsIGJpdG1hcDpwb3J0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgZXh0ZW5zaW9uIGhhbmRsaW5nIGFuZCBjb21tZW50IGxpZmVjeWNsZSByZW1haW4gc291bmQgYWNyb3NzIHVzZXJzcGFjZSBuZXRsaW5rIGFuZCBwYWNrZXQtcHJvY2Vzc2luZyBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTcwOWViYzkyNTViOTliZDkzYWU5M2JiOTYzYjFiYjEwODkwMGE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNToyMjoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaAppbmRleCBkNmE3ZTY2MDQ1NDIyLi5hZTM3NmZhM2U3YTNiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCkBAIC0xNTksNyAmIzQzOzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCiAJaWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSkKIAkJaXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpOwotCWlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkpCiYjNDM7CWlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgJmFtcDsmYW1wOyAhZXh0LSZndDt0YXJnZXQpCiAJCWlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpOwogCWlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpCiAJCWlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwX3NldF9iaXRtYXBfZ2VuLmggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgcGF0Y2guIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyB3aXRoaW4gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgZXh0ZW5zaW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBpcHNldGAgZnJhbWV3b3JrLiBUaGUgZGlmZiBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGNvbW1lbnRzLiBUaGUgb3JpZ2luYWwgY29kZSBpbmNsdWRlZCBhIGNvbW1lbnQgaW5pdGlhbGl6YXRpb24gaWYgYFNFVF9XSVRIX0NPTU1FTlQoc2V0KWAgd2FzIHRydWUuIFRoZSBtb2RpZmllZCBjb2RlIGludHJvZHVjZXMgYW4gYWRkaXRpb25hbCBjaGVjazogYCFleHQtJmd0O3RhcmdldGAuIFRoYXQgc3VnZ2VzdHMgYSB2ZXJ5IHNwZWNpZmljIHVzZS1jYXNlIGlzIGJlaW5nIGFkZHJlc3NlZCBvciBhIGJ1ZyBpcyBiZWluZyBmaXhlZCByZWxhdGVkIHRvIGhvdyBjb21tZW50cyBhcmUgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgYHRhcmdldGAgZXh0ZW5zaW9uIGZpZWxkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvbW1lbnQgZmllbGQsIGFuZCBhIHRhcmdldCBmaWVsZC4KCk5vdywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGlzIGhlYWRlciBpcyBpbmNsdWRlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW5jbHVzaW9uIHBvaW50cyBvZiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIGxvb2sgYXQgaXRzIGRlcGVuZGVuY2llcywgZmluZCBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXRzIG9wZXJhdGlvbiwgYW5kIHplcm8gaW4gb24gYW55IGtleSBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgdGhlIGZvY3VzIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGBTRVRfV0lUSF9DT01NRU5UYCwgYGV4dC0mZ3Q7dGFyZ2V0YCwgYW5kIGBpcF9zZXRfaW5pdF9jb21tZW50YCBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIHVzZWQsIHdoaWNoIGlzIHByb2JhYmx5IHdoZXJlIHRoaXMgY2hhbmdlIGJlY29tZXMgaW1wb3J0YW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGVkIGNvZGUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gaW5mZXIgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2UgYW5kIGFzc2VzcyBpdHMgaW1wYWN0IG1vcmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X2JpdG1hcF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0yMDg9c3RydWN0IGJpdG1hcF9pcF9lbGVtIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0yMTAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzoyMTE6I2luY2x1ZGUgXCYjMzQ7aXBfc2V0X2JpdG1hcF9nZW4uaFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMjEyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTI4Mj1iaXRtYXBfaXBtYWNfc2FtZV9zZXQoY29uc3Qgc3RydWN0IGlwX3NldCAqYSwgY29uc3Qgc3RydWN0IGlwX3NldCAqYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yOTQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyOTU6I2luY2x1ZGUgXCYjMzQ7aXBfc2V0X2JpdG1hcF9nZW4uaFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjk2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MjIzPXN0cnVjdCBiaXRtYXBfcG9ydF9lbGVtIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTIyNS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6MjI2OiNpbmNsdWRlIFwmIzM0O2lwX3NldF9iaXRtYXBfZ2VuLmhcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMjI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgR2VuZXJhdGlvbiBpbiBgaXBzZXRgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGhlYWRlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE1OS4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aCB0aGUgY29yZSBiaXRtYXAgbG9naWMgYW5kIGdlbmVyYXRpb24gd2l0aGluIHRoZSBgaXBzZXRgIGZyYW1ld29yaywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgYml0bWFwcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGZvciB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGJpdCB2ZWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIGFueSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9ucy4gVGhpcyBjb3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIGhvdyB0aGV5IGhhbmRsZSBhbGlnbm1lbnQsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIHNwZWNpZmljIGJpdHdpc2Ugb3BlcmF0aW9ucyB1c2VkIGZvciBzZXQvY2xlYXIgYW5kIGxvb2t1cCBvcGVyYXRpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBwb2ludHMgdGhlcmUsIGdpdmVuIGl0JiMzOTtzIHNoYXJlZCBzdGF0ZS4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCB0cmFuc2xhdGVzIHRvIHJlYWwgd29ybGQgdGhyb3VnaHB1dCB1bmRlciBoZWF2eSBsb2FkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb2Ygbm92ZWwgYWxnb3JpdGhtcyBvciBjbGV2ZXIgdXNlcyBvZiBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0ICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQoeCwgc2V0KSkpIHtcbiAxNDE6XHRcdFx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbiAxNDI6XHRcdFx0XHRyZXQgPSAwO1xuIDE0MzpcdFx0XHR9IGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfRVhJU1QpKSB7XG4gMTQ0Olx0XHRcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTQ1Olx0XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XG4gMTQ2Olx0XHRcdH1cbiAxNDc6XHRcdFx0LyogRWxlbWVudCBpcyByZS1hZGRlZCwgY2xlYW51cCBleHRlbnNpb25zICovXG4gMTQ4Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xuIDE0OTpcdFx0fVxuIDE1MDpcdFx0aWYgKHJldCBcdTAwM2UgMClcbiAxNTE6XHRcdFx0c2V0LVx1MDAzZWVsZW1lbnRzLS07XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxuIDE1NDpcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG4gMTU1Olx0XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG4gMTU2Olx0I2Vsc2VcbiAxNTc6XHRcdFx0aXBfc2V0X3RpbWVvdXRfc2V0KGV4dF90aW1lb3V0KHgsIHNldCksIGV4dC1cdTAwM2V0aW1lb3V0KTtcbiAxNTg6XHQjZW5kaWZcbiAxNTk6XHRcbiAxNjA6XHRcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXG4gMTYxOlx0XHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcbiAxNjI6XHRcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIDE2MzpcdFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiAxNjQ6XHRcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gMTY1Olx0XHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiAxNjY6XHRcbiAxNjc6XHRcdC8qIEFjdGl2YXRlIGVsZW1lbnQgKi9cbiAxNjg6XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIDE2OTpcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTcwOlx0XHRzZXQtXHUwMDNlZWxlbWVudHMmIzQzOyYjNDM7O1xuIDE3MTpcdFxuIDE3MjpcdFx0cmV0dXJuIDA7XG4gMTczOlx0fVxuIDE3NDpcdFxuIDE3NTpcdHN0YXRpYyBpbnRcbiAxNzY6XHRtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAxNzc6XHRcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAxNzg6XHR7XG4gMTc5Olx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDE4MDpcdFx0Y29uc3Qgc3RydWN0IG10eXBlX2FkdF9lbGVtICplID0gdmFsdWU7XG4gMTgxOlx0XHR2b2lkICp4ID0gZ2V0X2V4dChzZXQsIG1hcCwgZS1cdTAwM2VpZCk7XG4gMTgyOlx0XG4gMTgzOlx0XHRpZiAobXR5cGVfZG9fZGVsKGUsIG1hcCkpXG4gMTg0Olx0XHRcdHJldHVybiAtSVBTRVRfRVJSX0VYSVNUO1xuIDE4NTpcdFxuIDE4NjpcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XG4gMTg3Olx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbiAxODg6XHRcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXHUwMDI2XHUwMDI2XG4gMTg5Olx0XHQgICAgaXBfc2V0X3RpbWVvdXRfZXhwaXJlZChleHRfdGltZW91dCh4LCBzZXQpKSlcbiAxOTA6XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XG4gMTkxOlx0XG4gMTkyOlx0XHRyZXR1cm4gMDtcbiAxOTM6XHR9XG4gMTk0Olx0XG4gMTk1Olx0I2lmbmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG4gMTk2Olx0c3RhdGljIGJvb2xcbiAxOTc6XHRtdHlwZV9pc19maWxsZWQoY29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKngpXG4gMTk4Olx0e1xuIDE5OTpcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgSVAgU2V0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiaXRtYXAgSVAgc2V0cyBmdW5jdGlvbiB1bmRlciB0aGUgaG9vZCwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBzeW1ib2wgZ2VuZXJhdGlvbiBhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBzZXQgdHlwZXMuIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gc2VlIGV4YWN0bHkgd2hhdCBgbXR5cGVfYWRkYCBpcyBkb2luZyBhbmQgaG93IHRoZSBgbXR5cGVgIG1hY3JvIGdlbmVyYXRlcyB0aGUgc3ltYm9scy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBiaXRtYXAgaW1wbGVtZW50YXRpb25zIGZvciBgYml0bWFwOmlwYCwgYGJpdG1hcDppcCxtYWNgLCBhbmQgYGJpdG1hcDpwb3J0YCBhcmUgaGFuZGxlZCDigJMgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgYml0cyBhcmUgbWFuYWdlZC4gVGhlbiwgSSYjMzk7bGwgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBleGFtaW5pbmcgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCB0byBzZWUgdGhlIG51YW5jZXMgYW5kIGRpZmZlcmVuY2VzIGluIGhvdyB0aGVzZSB2YXJpb3VzIHNldCB0eXBlcyBhY3R1YWxseSBzdG9yZSBhbmQgbWFuaXB1bGF0ZSB0aGUgZGF0YS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGludGVyZXN0aW5nIHZhcmlhdGlvbnMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHQgICAgICAgeC1cdTAwM2VsYXN0X2lwID09IHktXHUwMDNlbGFzdF9pcCBcdTAwMjZcdTAwMjZcbiAyMDE6XHRcdCAgICAgICB4LVx1MDAzZW5ldG1hc2sgPT0geS1cdTAwM2VuZXRtYXNrIFx1MDAyNlx1MDAyNlxuIDIwMjpcdFx0ICAgICAgIGEtXHUwMDNldGltZW91dCA9PSBiLVx1MDAzZXRpbWVvdXQgXHUwMDI2XHUwMDI2XG4gMjAzOlx0XHQgICAgICAgYS1cdTAwM2VleHRlbnNpb25zID09IGItXHUwMDNlZXh0ZW5zaW9ucztcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0LyogUGxhaW4gdmFyaWFudCAqL1xuIDIwNzpcdFxuIDIwODpcdHN0cnVjdCBiaXRtYXBfaXBfZWxlbSB7XG4gMjA5Olx0fTtcbiAyMTA6XHRcbiAyMTE6XHQjaW5jbHVkZSBcJiMzNDtpcF9zZXRfYml0bWFwX2dlbi5oXCYjMzQ7XG4gMjEyOlx0XG4gMjEzOlx0LyogQ3JlYXRlIGJpdG1hcDppcCB0eXBlIG9mIHNldHMgKi9cbiAyMTQ6XHRcbiAyMTU6XHRzdGF0aWMgYm9vbFxuIDIxNjpcdGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxuIDIxNzpcdFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXG4gMjE4Olx0XHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXG4gMjE5Olx0e1xuIDIyMDpcdFx0bWFwLVx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbiAyMjE6XHRcdGlmICghbWFwLVx1MDAzZW1lbWJlcnMpXG4gMjIyOlx0XHRcdHJldHVybiBmYWxzZTtcbiAyMjM6XHRcdG1hcC1cdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xuIDIyNDpcdFx0bWFwLVx1MDAzZWxhc3RfaXAgPSBsYXN0X2lwO1xuIDIyNTpcdFx0bWFwLVx1MDAzZWVsZW1lbnRzID0gZWxlbWVudHM7XG4gMjI2Olx0XHRtYXAtXHUwMDNlaG9zdHMgPSBob3N0cztcbiAyMjc6XHRcdG1hcC1cdTAwM2VuZXRtYXNrID0gbmV0bWFzaztcbiAyMjg6XHRcdHNldC1cdTAwM2V0aW1lb3V0ID0gSVBTRVRfTk9fVElNRU9VVDtcbiAyMjk6XHRcbiAyMzA6XHRcdG1hcC1cdTAwM2VzZXQgPSBzZXQ7XG4gMjMxOlx0XHRzZXQtXHUwMDNlZGF0YSA9IG1hcDtcbiAyMzI6XHRcdHNldC1cdTAwM2VmYW1pbHkgPSBORlBST1RPX0lQVjQ7XG4gMjMzOlx0XG4gMjM0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAyMzU6XHR9XG4gMjM2Olx0XG4gMjM3Olx0c3RhdGljIHUzMlxuIDIzODpcdHJhbmdlX3RvX21hc2sodTMyIGZyb20sIHUzMiB0bywgdTggKmJpdHMpXG4gMjM5Olx0e1xuIDI0MDpcdFx0dTMyIG1hc2sgPSAweEZGRkZGRkZFO1xuIDI0MTpcdFxuIDI0MjpcdFx0KmJpdHMgPSAzMjtcbiAyNDM6XHRcdHdoaWxlICgtLSgqYml0cykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG1hc2sgXHUwMDI2XHUwMDI2ICh0byBcdTAwMjYgbWFzaykgIT0gZnJvbSlcbiAyNDQ6XHRcdFx0bWFzayBcdTAwM2NcdTAwM2M9IDE7XG4gMjQ1Olx0XG4gMjQ2Olx0XHRyZXR1cm4gbWFzaztcbiAyNDc6XHR9XG4gMjQ4Olx0XG4gMjQ5Olx0c3RhdGljIGludFxuIDI1MDpcdGJpdG1hcF9pcF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gMjUxOlx0XHRcdCB1MzIgZmxhZ3MpXG4gMjUyOlx0e1xuIDI1MzpcdFx0c3RydWN0IGJpdG1hcF9pcCAqbWFwO1xuIDI1NDpcdFx0dTMyIGZpcnN0X2lwID0gMCwgbGFzdF9pcCA9IDAsIGhvc3RzO1xuIDI1NTpcdFx0dTY0IGVsZW1lbnRzO1xuIDI1NjpcdFx0dTggbmV0bWFzayA9IDMyO1xuIDI1NzpcdFx0aW50IHJldDtcbiAyNTg6XHRcbiAyNTk6XHRcdGlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHxcbiAyNjA6XHRcdFx0ICAgICAhaXBfc2V0X29wdGF0dHJfbmV0b3JkZXIodGIsIElQU0VUX0FUVFJfVElNRU9VVCkgfHxcbiAyNjE6XHRcdFx0ICAgICAhaXBfc2V0X29wdGF0dHJfbmV0b3JkZXIodGIsIElQU0VUX0FUVFJfQ0FEVF9GTEFHUykpKVxuIDI2MjpcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9QUk9UT0NPTDtcbiAyNjM6XHRcbiAyNjQ6XHRcdHJldCA9IGlwX3NldF9nZXRfaG9zdGlwYWRkcjQodGJbSVBTRVRfQVRUUl9JUF0sIFx1MDAyNmZpcnN0X2lwKTtcbiAyNjU6XHRcdGlmIChyZXQpXG4gMjY2Olx0XHRcdHJldHVybiByZXQ7XG4gMjY3Olx0XG4gMjY4Olx0XHRpZiAodGJbSVBTRVRfQVRUUl9JUF9UT10pIHtcbiAyNjk6XHRcdFx0cmV0ID0gaXBfc2V0X2dldF9ob3N0aXBhZGRyNCh0YltJUFNFVF9BVFRSX0lQX1RPXSwgXHUwMDI2bGFzdF9pcCk7XG4gMjcwOlx0XHRcdGlmIChyZXQpXG4gMjcxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAyNzI6XHRcdFx0aWYgKGZpcnN0X2lwIFx1MDAzZSBsYXN0X2lwKVxuIDI3MzpcdFx0XHRcdHN3YXAoZmlyc3RfaXAsIGxhc3RfaXApO1xuIDI3NDpcdFx0fSBlbHNlIGlmICh0YltJUFNFVF9BVFRSX0NJRFJdKSB7XG4gMjc1Olx0XHRcdHU4IGNpZHIgPSBubGFfZ2V0X3U4KHRiW0lQU0VUX0FUVFJfQ0lEUl0pO1xuIDI3NjpcdFxuIDI3NzpcdFx0XHRpZiAoY2lkciBcdTAwM2U9IEhPU1RfTUFTSylcbiAyNzg6XHRcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9JTlZBTElEX0NJRFI7XG4gMjc5Olx0XHRcdGlwX3NldF9tYXNrX2Zyb21fdG8oZmlyc3RfaXAsIGxhc3RfaXAsIGNpZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEJpdG1hcCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGJpdG1hcC1iYXNlZCBJUCBzZXQgaW1wbGVtZW50YXRpb24gd29ya3MuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBtYWNybyBleHBhbnNpb24gcHJvY2VzcyB0aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhhdCBmaWxlLiBTZWVpbmcgaG93IHRoZSBtYWNyb3MgYXJlIGRlZmluZWQgd2lsbCBiZSBrZXkuIFRoZW4sIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhleSYjMzk7cmUgYmVpbmcgKnVzZWQqLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgaXBfc2V0X2JpdG1hcF9pcC5jYCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIgYW5kIHdoZXJlIHRoZSBleHBhbnNpb24gaXMgaGFwcGVuaW5nLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuICAgMjpcdC8qIENvcHlyaWdodCAoQykgMjAxMyBKb3pzZWYgS2FkbGVjc2lrIFx1MDAzY2thZGxlY0BuZXRmaWx0ZXIub3JnXHUwMDNlICovXG4gICAzOlx0XG4gICA0Olx0I2lmbmRlZiBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcbiAgIDU6XHQjZGVmaW5lIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSFxuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdCNkZWZpbmUgbXR5cGVfZG9fdGVzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX3Rlc3QpXG4gIDEwOlx0I2RlZmluZSBtdHlwZV9nY190ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfdGVzdClcbiAgMTE6XHQjZGVmaW5lIG10eXBlX2lzX2ZpbGxlZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2lzX2ZpbGxlZClcbiAgMTI6XHQjZGVmaW5lIG10eXBlX2RvX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2FkZClcbiAgMTM6XHQjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxuICAxNDpcdCNkZWZpbmUgbXR5cGVfZG9fZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZG9fZGVsKVxuICAxNTpcdCNkZWZpbmUgbXR5cGVfZG9fbGlzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2xpc3QpXG4gIDE2Olx0I2RlZmluZSBtdHlwZV9kb19oZWFkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZG9faGVhZClcbiAgMTc6XHQjZGVmaW5lIG10eXBlX2FkdF9lbGVtXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWR0X2VsZW0pXG4gIDE4Olx0I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfdGltZW91dClcbiAgMTk6XHQjZGVmaW5lIG10eXBlX2djX2luaXRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxuICAyMDpcdCNkZWZpbmUgbXR5cGVfa2FkdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2thZHQpXG4gIDIxOlx0I2RlZmluZSBtdHlwZV91YWR0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdClcbiAgMjI6XHQjZGVmaW5lIG10eXBlX2Rlc3Ryb3lcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZXN0cm95KVxuICAyMzpcdCNkZWZpbmUgbXR5cGVfbWVtc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX21lbXNpemUpXG4gIDI0Olx0I2RlZmluZSBtdHlwZV9mbHVzaFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKVxuICAyNTpcdCNkZWZpbmUgbXR5cGVfaGVhZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2hlYWQpXG4gIDI2Olx0I2RlZmluZSBtdHlwZV9zYW1lX3NldFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KVxuICAyNzpcdCNkZWZpbmUgbXR5cGVfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2VsZW0pXG4gIDI4Olx0I2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbiAgMjk6XHQjZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbiAgMzA6XHQjZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbiAgMzE6XHQjZGVmaW5lIG10eXBlX2xpc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9saXN0KVxuICAzMjpcdCNkZWZpbmUgbXR5cGVfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nYylcbiAgMzM6XHQjZGVmaW5lIG10eXBlX2NhbmNlbF9nY1x0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcbiAgMzQ6XHQjZGVmaW5lIG10eXBlXHRcdFx0TVRZUEVcbiAgMzU6XHRcbiAgMzY6XHQjZGVmaW5lIGdldF9leHQoc2V0LCBtYXAsIGlkKVx0KChtYXApLVx1MDAzZWV4dGVuc2lvbnMgJiM0MzsgKChzZXQpLVx1MDAzZWRzaXplICogKGlkKSkpXG4gIDM3Olx0XG4gIDM4Olx0c3RhdGljIHZvaWRcbiAgMzk6XHRtdHlwZV9nY19pbml0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAoKmdjKShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkpXG4gIDQwOlx0e1xuICA0MTpcdFx0c3RydWN0IG10eXBlICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAgNDI6XHRcbiAgNDM6XHRcdHRpbWVyX3NldHVwKFx1MDAyNm1hcC1cdTAwM2VnYywgZ2MsIDApO1xuICA0NDpcdFx0bW9kX3RpbWVyKFx1MDAyNm1hcC1cdTAwM2VnYywgamlmZmllcyAmIzQzOyBJUFNFVF9HQ19QRVJJT0Qoc2V0LVx1MDAzZXRpbWVvdXQpICogSFopO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHRzdGF0aWMgdm9pZFxuICA0ODpcdG10eXBlX2V4dF9jbGVhbnVwKHN0cnVjdCBpcF9zZXQgKnNldClcbiAgNDk6XHR7XG4gIDUwOlx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNVFlQRSBEZWZpbml0aW9uIGluIGlwX3NldF9iaXRtYXAgRmlsZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgTVRZUEVgIGlzIGJlaW5nIGRlZmluZWQgYW5kIHVzZWQgYWNyb3NzIHRoZXNlIHRocmVlIHNwZWNpZmljIGZpbGVzOiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNgLCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgTVRZUEVgIHdpdGhpbiBlYWNoIG9mIHRob3NlIHNvdXJjZSBmaWxlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgY29udGV4dCBmb3IgaXRzIHB1cnBvc2UgYW5kIGFzc29jaWF0ZWQgdmFsdWVzIGFjcm9zcyB0aGUgZGlmZmVyZW50IGJpdG1hcCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSBpdHMgdXNhZ2UsIGRlZmluaXRpb24sIGFuZCB0byBpZGVudGlmeSB2YXJpYXRpb25zIGluIGhvdyB0aGUgZmlsZXMgYXJlIHVzaW5nIGBNVFlQRWAsIHdpdGhvdXQgaGF2aW5nIHRvIGV4aGF1c3RpdmVseSByZWFkIGVhY2ggZmlsZSBsaW5lLWJ5LWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgTVRZUEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI4PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNDojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM1LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjI9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNjktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcwOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzEtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzE9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzktI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI1PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM0OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM1LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYGlwX3NldF9iaXRtYXBfZ2VuLmhgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gc2VlaW5nIHRoYXQgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGlzIGluY2x1ZGVkIGFjcm9zcyBhIGZldyBmaWxlcy4gU3BlY2lmaWNhbGx5OgoKKiAgIGBpcF9zZXRfYml0bWFwX2lwLmNgOiAgVGhlIGBNVFlQRWAgaGVyZSBpcyBkZWZpbmVkIGFzIGBiaXRtYXBfaXBgLiAgU28sIHRoYXQgbWVhbnMgY2FsbHMgdG8gbWFjcm9zIGxpa2UgYG10eXBlX2FkZGAgYXJlIGVmZmVjdGl2ZWx5IGV4cGFuZGluZyB0byBgYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBfdWFkdGAsIGBiaXRtYXBfaXBfa2FkdGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKiAgIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgOiAgSGVyZSwgYE1UWVBFYCBpcyBgYml0bWFwX2lwbWFjYC4gIGBtdHlwZV9hZGRgIHdpbGwgZXhwYW5kIHRvIGBiaXRtYXBfaXBtYWNfYWRkYCwgZXRjLiAgTWFrZXMgc2Vuc2UsIGZvbGxvd3MgdGhlIHBhdHRlcm4uCiogICBgaXBfc2V0X2JpdG1hcF9wb3J0LmNgOiBBbmQgZmluYWxseSwgd2l0aCBgYml0bWFwX3BvcnRgIGFzIHRoZSBgTVRZUEVgLCBgbXR5cGVfYWRkYCBleHBhbmRzIHRvIGBiaXRtYXBfcG9ydF9hZGRgLCBldGMuIENvbnNpc3RlbnQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGdvb2QuCgpNeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFdoeSB0aGlzIGBiaXRtYXBfZ2VuLmhgIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIGNvbXBhcmUgYGlwX3NldF9oYXNoX2dlbi5oYCBhbmQgdGhpcyBuZXcgYGlwX3NldF9iaXRtYXBfZ2VuLmhgLiBXaGF0JiMzOTtzIHRoZSBmdW5kYW1lbnRhbCBkaWZmZXJlbmNlIGluIGFwcHJvYWNoPyBXaGF0IHdlcmUgdGhlIGRyaXZpbmcgZGVzaWduIGNvbnNpZGVyYXRpb25zIHRoYXQgbGVkIHRvIHRoaXMgc2hpZnQ/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF9zZXRfaGFzaF9nZW4uaGAgaXMgZG9pbmcgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGBleHQtJmd0O3RhcmdldGAgd2l0aGluIHRoZSBgaXBfc2V0YCBzdHJ1Y3R1cmUuICBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gdHJhZGUtb2ZmcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQtXHUwMDNldGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTMwPW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjEtXHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNjI6XHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjMtXHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyMi1cdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcihkYXRhLCBzZXQpLCBleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTIzOlx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjQtXHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChkYXRhLCBzZXQpLCBleHQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE0MS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE0MjpcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE0My1cdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzk9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjI3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjI4Olx0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEyMjktXHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgSW5jb25zaXN0ZW5jaWVzIGluIGlwX3NldCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgZGlzY3JlcGFuY3kgYmV0d2VlbiB0d28gaGVhZGVyIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHdheSB0aGV5IGhhbmRsZSBjb21tZW50cyBhbmQgdGFyZ2V0IGV4dGVuc2lvbnMuIGBpcF9zZXRfaGFzaF9nZW4uaGAgaW5jbHVkZXMgYW4gYGlmYCBjb25kaXRpb24gdGhhdCBjaGVja3MgZm9yIGBTRVRfV0lUSF9DT01NRU5UKHNldCkgJmFtcDsmYW1wOyAhZXh0LSZndDt0YXJnZXRgLCB3aGVyZWFzIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgdGhlIGAhZXh0LSZndDt0YXJnZXRgIHBhcnQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgY291bGQgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBvciB0aGVyZSBtaWdodCBiZSBhbiBpbnRlbnRpb25hbCBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIGJldHdlZW4gdGhlc2UgdHdvIHNldCB0eXBlcy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBleHQtJmd0O3RhcmdldGAgYWN0dWFsbHkgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGlwX3NldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZpZWxkIHJlbGF0ZXMgdG8gdGhlIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSBhbmQgaWYgdGhlIGRpZmZlcmVuY2UgaXMsIGluIGZhY3QsIGNvcnJlY3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgZGVmaW5pdGlvbiBhbmQgdGhlIHJvbGUgb2YgYGlwX3NldF9pbml0X2NvbW1lbnRgLiBUaGVzZSBhcmUgdGhlIGtleXMgdG8gdW5sb2NraW5nIHRoZSBpbnRlbmRlZCBsb2dpYyBhbmQgc2VlaW5nIGlmIHRoaXMgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaXMgYSBidWcgb3Igbm90LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9pbml0X2NvbW1lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMzA9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE2Mi1cdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE2MzpcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTY0LVx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzQ2PXZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDc6aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNDgtXHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNjgtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM2OTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05ODg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTIzLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMjQ6XHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChkYXRhLCBzZXQpLCBleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI1LVx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIyMT1saXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjI2LVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjI3Olx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZSwgc2V0KSwgZXh0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjI4LVx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgaXBfc2V0X2luaXRfY29tbWVudGAgZnVuY3Rpb24sIGFzIGlmIEkmIzM5O20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjoKCioqRGl2aW5nIGludG8gaXBfc2V0X2luaXRfY29tbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGd1dHMgb2YgdGhpcyBgaXBfc2V0X2luaXRfY29tbWVudGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGluaXRpYWxpemF0aW9uIGFuZCBjb21tZW50cywgc28gbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB3aGVyZSB3ZSBzZXQgdXAgdGhlIGNvbW1lbnRzIGZpZWxkIHdpdGhpbiBhbiBJUCBzZXQgb3IsIGF0IGxlYXN0LCBlbnN1cmUgaXQmIzM5O3MgaGFuZGxlZCBwcm9wZXJseS4gSXQmIzM5O3MgaW4gYGlwX3NldF9jb3JlLmNgLCBzbyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBpcHNldCBpbmZyYXN0cnVjdHVyZS4gUHJvYmFibHkgY2FsbGVkIGVhcmx5IGluIHNldCBjcmVhdGlvbiwgb3Igd2hlbiBhIGNvbW1lbnQgZmllbGQgaXMgYWRkZWQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB0byBzZWUgaWYgaXQmIzM5O3MgbmV3IG9yIHByZWV4aXN0aW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBtZW1vcnkgaXMgYWxsb2NhdGVkIGhlcmUgYW5kIHRoZSBjaGVja3MgaW52b2x2ZWQuIEl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhlIGNvbW1lbnQgZmllbGQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSBkaWZmZXJlbnQgaXBzZXQgdHlwZXMuIEkgZXhwZWN0IHRvIHNlZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUsIGFsb25nc2lkZSBlcnJvciBoYW5kbGluZy4gVGhlcmUgY291bGQgYmUgbG9ja2luZyBpbnZvbHZlZCwgYnV0IEkmIzM5O2xsIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIHRoZSBuYW1lIGFsb25lLCBJIGNhbiBpbWFnaW5lIHRoZSBmdW5jdGlvbiBoYW5kbGluZyBOVUxMIG9yIGVtcHR5IGNvbW1lbnQgc3RyaW5ncywgbWF5YmUgZXZlbiB0cnVuY2F0aW5nIG92ZXJseSBsb25nIGNvbW1lbnRzLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRyZXR1cm4gbmxhX2RhdGEodGIpO1xuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHQvKiBDYWxsZWQgZnJvbSB1YWRkIG9ubHksIHByb3RlY3RlZCBieSB0aGUgc2V0IHNwaW5sb2NrLlxuIDM0NDpcdCAqIFRoZSBrYWR0IGZ1bmN0aW9ucyBkb24mIzM5O3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cbiAzNDU6XHQgKi9cbiAzNDY6XHR2b2lkXG4gMzQ3Olx0aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiAzNDg6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4gMzQ5Olx0e1xuIDM1MDpcdFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiAzNTE6XHRcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIDM1MjpcdFxuIDM1MzpcdFx0aWYgKHVubGlrZWx5KGMpKSB7XG4gMzU0Olx0XHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiAzNTU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gMzU2Olx0XHRcdGtmcmVlX3JjdShjLCByY3UpO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFx0aWYgKCFsZW4pXG4gMzU5Olx0XHRcdHJldHVybjtcbiAzNjA6XHRcdGlmICh1bmxpa2VseShsZW4gXHUwMDNlIElQU0VUX01BWF9DT01NRU5UX1NJWkUpKVxuIDM2MTpcdFx0XHRsZW4gPSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFO1xuIDM2MjpcdFx0YyA9IGttYWxsb2Moc2l6ZW9mKCpjKSAmIzQzOyBsZW4gJiM0MzsgMSwgR0ZQX0FUT01JQyk7XG4gMzYzOlx0XHRpZiAodW5saWtlbHkoIWMpKVxuIDM2NDpcdFx0XHRyZXR1cm47XG4gMzY1Olx0XHRzdHJzY3B5KGMtXHUwMDNlc3RyLCBleHQtXHUwMDNlY29tbWVudCwgbGVuICYjNDM7IDEpO1xuIDM2NjpcdFx0YXRvbWljNjRfYWRkKHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIDM2NzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgYyk7XG4gMzY4Olx0fVxuIDM2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xuIDM3MDpcdFxuIDM3MTpcdC8qIFVzZWQgb25seSB3aGVuIGR1bXBpbmcgYSBzZXQsIHByb3RlY3RlZCBieSByY3VfcmVhZF9sb2NrKCkgKi9cbiAzNzI6XHRzdGF0aWMgaW50XG4gMzczOlx0aXBfc2V0X3B1dF9jb21tZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudClcbiAzNzQ6XHR7XG4gMzc1Olx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjID0gcmN1X2RlcmVmZXJlbmNlKGNvbW1lbnQtXHUwMDNlYyk7XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoIWMpXG4gMzc4Olx0XHRcdHJldHVybiAwO1xuIDM3OTpcdFx0cmV0dXJuIG5sYV9wdXRfc3RyaW5nKHNrYiwgSVBTRVRfQVRUUl9DT01NRU5ULCBjLVx1MDAzZXN0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTk5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaXBfc2V0X2luaXRfY29tbWVudCBDYWxsIGluIFJlbGF0aW9uIHRvIHh0X1NFVCBhbmQgQml0bWFwIE9wZXJhdGlvbnMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYXMgSSBkaXNzZWN0IHRoaXMgY29kZS4gVGhhdCBjb21tZW50IG9uIGBpcF9zZXRfaW5pdF9jb21tZW50YCBpcyBpbnRlcmVzdGluZzogJiMzNDtDYWxsZWQgZnJvbSB1YWRkIG9ubHksIHByb3RlY3RlZCBieSB0aGUgc2V0IHNwaW5sb2NrLiYjMzQ7IFJpZ2h0LCB0aGUga2FkdCBmdW5jdGlvbnMgYXJlbiYjMzk7dCBzdXBwb3NlZCB0byB0b3VjaCB0aGUgY29tbWVudCBleHRlbnNpb25zLiBCdXQgdGhlbiBJIHNlZSB0aGlzIGB4dF9TRVRgIHBhdGgsIHNwZWNpZmljYWxseSB3aGVuIGFkZGluZyBhbiBlbGVtZW50IHRvIGFuIGlwc2V0IHRocm91Z2ggdGhlIG5ldGZpbHRlciB0YXJnZXQg4oCTIGlwdGFibGVzIG9yIG5mdGFibGVzJiMzOTsgU0VUIHRhcmdldC4gSXQgbG9va3MgbGlrZSBgZXh0LSZndDt0YXJnZXRgIGlzIHRydWUgaGVyZSEgVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBwcm9ibGVtIGJlY2F1c2UsIGluIHRoZSBrYWR0L3h0X1NFVCBwYXRoLCB3aGVuIGBleHQtJmd0O3RhcmdldGAgaXMgdHJ1ZSwgd2Ugd2VyZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50YCB3aXRoIGJpdG1hcCBzZXRzLiBUaGF0IGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBkZXJlZmVyZW5jZSBhIGNvbW1lbnQgc3RydWN0dXJlIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC0mZ3Q7YywgMSlgIG9yIGZyZWUgaXQsIG9yIGV2ZW4gZG8gYSBga21hbGxvY2Agd2l0aCBgZXh0LSZndDtjb21tZW50YCwgd2hpY2ggY291bGQgYmUgdW5pbml0aWFsaXplZCwgZ2FyYmFnZSwgb3IgTlVMTC4gVGhpcyBpcyBhIHJlYWwgaXNzdWUsIGFzIHdlIGNvdWxkIGJlIGZyZWVpbmcgYW4gZXhpc3RpbmcgY29tbWVudCBhdHRhY2hlZCB0byBhbiBlbGVtZW50IHdoZW4gaXQmIzM5O3MgYmVpbmcgdXBkYXRlZCBieSB0aGUgcGFja2V0IHBhdGghCgpOb3cgSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX2FkZGAgYXJlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aGluIHRoZSBiaXRtYXAgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoZSBrYWR0L3VhZHQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgYW5kIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBoYW5kbGUgdGhlIGNvbW1lbnQgZXh0ZW5zaW9ucyBkaWZmZXJlbnRseSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgeHRfU0VUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzcGlubG9jayBwcm90ZWN0aW9uIGlzICp0cnVseSogZWZmZWN0aXZlIGFuZCB0aGF0IHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBjYXVzaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTctI2RlZmluZSBtdHlwZV9hZHRfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkdF9lbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE4OiNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTktI2RlZmluZSBtdHlwZV9nY19pbml0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyOTojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMC0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzA6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTMxLVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTQtI2lmZGVmIElQX1NFVF9CSVRNQVBfU1RPUkVEX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMwNjpcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA3LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE4OD1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTktI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIyMDojdW5kZWYgbXR5cGVfYWRkX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIxLSN1bmRlZiBtdHlwZV9kZWxfY2lkclxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjMxLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMzI6I3VuZGVmIG10eXBlX2FkZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzMtI3VuZGVmIG10eXBlX2RlbFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2ODojZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2OS0jZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI4MDojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjgxLSNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzM1PXN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ1LS8qKlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozNDY6ICogbXR5cGVfYWRkX2NpZHIgLSBBZGQgYSBDSURSIGVudHJ5IHRvIGhhc2ggdGFibGUgYm9va2tlZXBpbmdcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzU3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQxOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NDItXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzUyPW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNC1cdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkwNTpcdFx0XHRtdHlwZV9hZGQoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIFx1MDAyNngtXHUwMDNlZXh0LCBcdTAwMjZ4LVx1MDAzZW1leHQsIHgtXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDYtXHRcdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05ODc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk4OS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTE0Olx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjM0LVx0LmFkdFx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2MzU6XHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjM2LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaXRtYXAgSVAgU2V0IEdlbmVyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGhlYWRlciBmaWxlIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBgbXR5cGVfYWRkYCBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBpdC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpZmZlcmVudCBgTVRZUEVgIHZhcmlhbnRzLgoKU28sIGJlZm9yZSBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgaW5jbHVkZWQsIHRoZXJlIHNlZW0gdG8gYmUgYSBmZXcgdHlwZXMgZGVmaW5lZC4gTGV0JiMzOTtzIGxvb2sgYXQgYGJpdG1hcF9pcGAgKGZyb20gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jYCksIHdoaWNoIHdpbGwgdXNlIGBiaXRtYXBfaXBfYWRkYCwgdGhlbiBgYml0bWFwX2lwbWFjYCAoZGVmaW5lZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNgKSwgdXNpbmcgdGhlIGBiaXRtYXBfaXBtYWNfYWRkYCBmdW5jdGlvbiwgYW5kIGxhc3RseSBgYml0bWFwX3BvcnRgIChmb3VuZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuY2ApLCB3aGljaCB1dGlsaXplcyBgYml0bWFwX3BvcnRfYWRkYC4gVGhpcyBnaXZlcyBtZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuCgpOb3csIEkmIzM5O2xsIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXRzZWxmLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgc3RydWN0dXJlIG9mIGBtdHlwZV92YXJpYW50YCBvciBgbXR5cGVgLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmVzIDI5MC0zMzAgb2YgdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRlZmluaXRpb24uIFdpdGggdGhvc2UgZGV0YWlscyBpbiBoYW5kLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBgbXR5cGVgIGFuZCBgbXR5cGVfYWRkYCBhcmUgaW50ZW5kZWQgdG8gd29yayB0b2dldGhlciBhbmQgaG93IHRoZSBkaWZmZXJlbnQgYml0bWFwIHR5cGVzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg1Olx0XHRcdFx0fVxuIDI4NjpcdFx0XHR9XG4gMjg3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gMjg4Olx0XG4gMjg5Olx0XHRtYXAtXHUwMDNlZ2MuZXhwaXJlcyA9IGppZmZpZXMgJiM0MzsgSVBTRVRfR0NfUEVSSU9EKHNldC1cdTAwM2V0aW1lb3V0KSAqIEhaO1xuIDI5MDpcdFx0YWRkX3RpbWVyKFx1MDAyNm1hcC1cdTAwM2VnYyk7XG4gMjkxOlx0fVxuIDI5MjpcdFxuIDI5MzpcdHN0YXRpYyB2b2lkXG4gMjk0Olx0bXR5cGVfY2FuY2VsX2djKHN0cnVjdCBpcF9zZXQgKnNldClcbiAyOTU6XHR7XG4gMjk2Olx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDI5NzpcdFxuIDI5ODpcdFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcbiAyOTk6XHRcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2bWFwLVx1MDAzZWdjKTtcbiAzMDA6XHR9XG4gMzAxOlx0XG4gMzAyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlID0ge1xuIDMwMzpcdFx0LmthZHRcdD0gbXR5cGVfa2FkdCxcbiAzMDQ6XHRcdC51YWR0XHQ9IG10eXBlX3VhZHQsXG4gMzA1Olx0XHQuYWR0XHQ9IHtcbiAzMDY6XHRcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG4gMzA3Olx0XHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxuIDMwODpcdFx0XHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxuIDMwOTpcdFx0fSxcbiAzMTA6XHRcdC5kZXN0cm95ID0gbXR5cGVfZGVzdHJveSxcbiAzMTE6XHRcdC5mbHVzaFx0PSBtdHlwZV9mbHVzaCxcbiAzMTI6XHRcdC5oZWFkXHQ9IG10eXBlX2hlYWQsXG4gMzEzOlx0XHQubGlzdFx0PSBtdHlwZV9saXN0LFxuIDMxNDpcdFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXG4gMzE1Olx0XHQuY2FuY2VsX2djID0gbXR5cGVfY2FuY2VsX2djLFxuIDMxNjpcdH07XG4gMzE3Olx0XG4gMzE4Olx0I2VuZGlmIC8qIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0NwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpcHNldGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBpcHNldGAgY29kZSBhZ2Fpbi4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG10eXBlX2thZHRgIGFuZCBgbXR5cGVfdWFkdGAgYW5kIHRoZSBgbXR5cGVfYWRkYCBmdW5jdGlvbiAob3IsIG1vcmUgZ2VuZXJhbGx5LCBob3cgdGhlIGtlcm5lbCYjMzk7cyBuZXRmaWx0ZXIgaXBzZXQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgYHZhcmlhbnQtJmd0O2FkdFtJUFNFVF9BRERdYCBvciBgdmFyaWFudC0mZ3Q7a2FkdGAgLyBgdmFyaWFudC0mZ3Q7dWFkdGAgY2FsbHMpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGFkZCBmdW5jdGlvbnMgYXJlIGludm9rZWQgYW5kIHdoYXQmIzM5O3MgZHJpdmluZyB0aGUgY2FsbCBzZXF1ZW5jZS4KCk15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX3VhZHRgIG1vcmUgY2xvc2VseS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBmbG93IGFuZCB0aGUgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBlYWNoIG9mIHRob3NlIGltcGxlbWVudGF0aW9ucy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBob3cgdGhlc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBgaXBzZXRgIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX2lwX2thZHR8Yml0bWFwX2lwbWFjX2thZHR8Yml0bWFwX3BvcnRfa2FkdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MTA5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjExMDpiaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTEtXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyMDk6Yml0bWFwX2lwbWFjX2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjEwLVx0XHQgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTEyNj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjEyNzpiaXRtYXBfcG9ydF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTI4LVx0XHQgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU4NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSBvZiBCaXRtYXAgSVAgU2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZmFtaWx5IG9mIGJpdG1hcCBmdW5jdGlvbnM6IGBiaXRtYXBfaXBfa2FkdGAsIGBiaXRtYXBfaXBtYWNfa2FkdGAsIGBiaXRtYXBfcG9ydF9rYWR0YCwgYGJpdG1hcF9pcF91YWR0YCwgYGJpdG1hcF9pcG1hY191YWR0YCwgYW5kIGBiaXRtYXBfcG9ydF91YWR0YC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGBiaXRtYXBfaXBfYWRkYCwgYGJpdG1hcF9pcG1hY19hZGRgLCBhbmQgYGJpdG1hcF9wb3J0X2FkZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhleSBhcmUgKmFjdHVhbGx5KiBkZWZpbmVkIHN0YXRpY2FsbHkuIEFyZSB0aGV5IGdvaW5nIHRvIHNob3cgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZT8KCkEgcXVpY2sgcGVlayBhdCBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgcmV2ZWFscyBgbXR5cGVfYWRkYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHNvIGl0IGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uISBUaGF0IGNvbXBsaWNhdGVzIHRoaW5ncywgYmVjYXVzZSB0aGlzIG1lYW5zIGl0IGNvdWxkIGJlIGlubGluZWQsIG9yIHN0b3JlZCBkaXJlY3RseSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzICphY3R1YWxseSogdXNlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbmNsdWRlZCBpbiBhbiBvYmplY3QgZmlsZSwgYnV0IG5vdCBhIGdsb2JhbCBzeW1ib2wuIFNpbmNlIGl0JiMzOTtzIGBzdGF0aWNgLCBpdCBzaG91bGQgZWl0aGVyIGJlIGlubGluZWQgb3IgcHJlc2VudCBpbiB0aGUgY2FsbGluZyBvYmplY3QgYXMgYSBsb2NhbCBmdW5jdGlvbiwgd2l0aGluIGB1YWR0YCBhbmQgYGthZHRgIG9yIHN0b3JlZCBkaXJlY3RseSBpbiBgdmFyaWFudC0mZ3Q7YWR0YC4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbXR5cGVfYWRkYCwgb3IsIGV2ZW4gYmV0dGVyLCB1bmRlcnN0YW5kIGhvdyBgaXBfc2V0X2JpdG1hcF9pcC5jYCBkZWZpbmVzIGBiaXRtYXBfaXBfa2FkdGAgYW5kIGBiaXRtYXBfaXBfdWFkdGAuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiB0aGF0IHN0YXRpYyBmdW5jdGlvbiwgYW5kIHRodXMsIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA4Olx0XG4gMTA5Olx0c3RhdGljIGludFxuIDExMDpcdGJpdG1hcF9pcF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxMTE6XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gMTEyOlx0XHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdClcbiAxMTM6XHR7XG4gMTE0Olx0XHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAxMTU6XHRcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gMTE2Olx0XHRzdHJ1Y3QgYml0bWFwX2lwX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcbiAxMTc6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gMTE4Olx0XHR1MzIgaXA7XG4gMTE5Olx0XG4gMTIwOlx0XHRpcCA9IG50b2hsKGlwNGFkZHIoc2tiLCBvcHQtXHUwMDNlZmxhZ3MgXHUwMDI2IElQU0VUX0RJTV9PTkVfU1JDKSk7XG4gMTIxOlx0XHRpZiAoaXAgXHUwMDNjIG1hcC1cdTAwM2VmaXJzdF9pcCB8fCBpcCBcdTAwM2UgbWFwLVx1MDAzZWxhc3RfaXApXG4gMTIyOlx0XHRcdHJldHVybiAtSVBTRVRfRVJSX0JJVE1BUF9SQU5HRTtcbiAxMjM6XHRcbiAxMjQ6XHRcdGUuaWQgPSBpcF90b19pZChtYXAsIGlwKTtcbiAxMjU6XHRcbiAxMjY6XHRcdHJldHVybiBhZHRmbihzZXQsIFx1MDAyNmUsIFx1MDAyNmV4dCwgXHUwMDI2b3B0LVx1MDAzZWV4dCwgb3B0LVx1MDAzZWNtZGZsYWdzKTtcbiAxMjc6XHR9XG4gMTI4Olx0XG4gMTI5Olx0c3RhdGljIGludFxuIDEzMDpcdGJpdG1hcF9pcF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiAxMzE6XHRcdCAgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZClcbiAxMzI6XHR7XG4gMTMzOlx0XHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAxMzQ6XHRcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gMTM1Olx0XHR1MzIgaXAgPSAwLCBpcF90byA9IDA7XG4gMTM2Olx0XHRzdHJ1Y3QgYml0bWFwX2lwX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcbiAxMzc6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbiAxMzg6XHRcdGludCByZXQgPSAwO1xuIDEzOTpcdFxuIDE0MDpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfTElORU5PXSlcbiAxNDE6XHRcdFx0KmxpbmVubyA9IG5sYV9nZXRfdTMyKHRiW0lQU0VUX0FUVFJfTElORU5PXSk7XG4gMTQyOlx0XG4gMTQzOlx0XHRpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfSVBdKSlcbiAxNDQ6XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRyZXQgPSBpcF9zZXRfZ2V0X2hvc3RpcGFkZHI0KHRiW0lQU0VUX0FUVFJfSVBdLCBcdTAwMjZpcCk7XG4gMTQ3Olx0XHRpZiAocmV0KVxuIDE0ODpcdFx0XHRyZXR1cm4gcmV0O1xuIDE0OTpcdFxuIDE1MDpcdFx0cmV0ID0gaXBfc2V0X2dldF9leHRlbnNpb25zKHNldCwgdGIsIFx1MDAyNmV4dCk7XG4gMTUxOlx0XHRpZiAocmV0KVxuIDE1MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKGlwIFx1MDAzYyBtYXAtXHUwMDNlZmlyc3RfaXAgfHwgaXAgXHUwMDNlIG1hcC1cdTAwM2VsYXN0X2lwKVxuIDE1NTpcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9CSVRNQVBfUkFOR0U7XG4gMTU2Olx0XG4gMTU3Olx0XHRpZiAoYWR0ID09IElQU0VUX1RFU1QpIHtcbiAxNTg6XHRcdFx0ZS5pZCA9IGlwX3RvX2lkKG1hcCwgaXApO1xuIDE1OTpcdFx0XHRyZXR1cm4gYWR0Zm4oc2V0LCBcdTAwMjZlLCBcdTAwMjZleHQsIFx1MDAyNmV4dCwgZmxhZ3MpO1xuIDE2MDpcdFx0fVxuIDE2MTpcdFxuIDE2MjpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfSVBfVE9dKSB7XG4gMTYzOlx0XHRcdHJldCA9IGlwX3NldF9nZXRfaG9zdGlwYWRkcjQodGJbSVBTRVRfQVRUUl9JUF9UT10sIFx1MDAyNmlwX3RvKTtcbiAxNjQ6XHRcdFx0aWYgKHJldClcbiAxNjU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDE2NjpcdFx0XHRpZiAoaXAgXHUwMDNlIGlwX3RvKVxuIDE2NzpcdFx0XHRcdHN3YXAoaXAsIGlwX3RvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQIFNldCBJbml0aWFsaXphdGlvbiBhbmQgQWRkaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJUCBzZXRzIGFyZSBjcmVhdGVkIGFuZCBwb3B1bGF0ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYml0bWFwLWJhc2VkIHR5cGVzIChgYml0bWFwX2lwX2thZHRgIGFuZCBgYml0bWFwX2lwX3VhZHRgKS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGJvdGggb2YgdGhlc2UgY2FsbCB0aGUgYGFkdGZuYCBmdW5jdGlvbiwgcGFzc2luZyBpbiBhIHNldCwgYW4gZWxlbWVudCBwb2ludGVyIChgJmFtcDtlYCksIGFuIGV4dGVuc2lvbiBwb2ludGVyIChgJmFtcDtleHRgKSwgYW5kIHNvbWUgb3RoZXIgYXJndW1lbnRzLiBUaGlzIGBhZHRmbmAgaXMgYWN0dWFsbHkgYGJpdG1hcF9pcF9hZGRgIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgSVBTRVRfQUREYCBvcGVyYXRpb24uIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWRkaW5nIHRvIHRoZSBiaXRtYXAgSVAgc2V0cy4KClRoZW4gSSBub3RpY2VkIHNvbWV0aGluZyBlbHNlOiBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgbXR5cGVfYWRkYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB0aGUgY3JlYXRpb24gcGhhc2UgYnkgZnVuY3Rpb25zIHNwZWNpZmljIHRvIGJpdG1hcCB0eXBlcywgbmFtZWx5LCBgYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBtYWNfYWRkYCwgYW5kIGBiaXRtYXBfcG9ydF9hZGRgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYGlwX3NldF9pbml0X2NvbW1lbnRgIHBsYXlzIGEga2V5IHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlIGJpdG1hcC1iYXNlZCBJUCBzZXQgdmFyaWFudHMuCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGlzIG92ZXJhbGwgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQmIzM5O3MgdGltZSB0byBzZWUgaG93IHRoZSBJUFNFVCBhbmQgYml0bWFwIHR5cGVzIGFyZSBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIGFuZCBwZXJoYXBzIHNvbWUgaW5zaWdodCBvbiBhdmFpbGFibGUgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9CSVRNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNj1jb25maWcgSVBfU0VUX01BWFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZT05PW9iai0kKENPTkZJR19JUF9TRVQpICYjNDM7PSBpcF9zZXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMTEtIyBiaXRtYXAgdHlwZXNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0lQX1NFVF9CSVRNQVBfSVApICYjNDM7PSBpcF9zZXRfYml0bWFwX2lwLm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBNQUMpICYjNDM7PSBpcF9zZXRfYml0bWFwX2lwbWFjLm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0lQX1NFVF9CSVRNQVBfUE9SVCkgJiM0Mzs9IGlwX3NldF9iaXRtYXBfcG9ydC5vXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTE1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjQ6I2lmbmRlZiBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDo1OiNkZWZpbmUgX19JUF9TRVRfQklUTUFQX0lQX0dFTl9IXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTMwPW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTMtXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NDojaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NS1cdFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTc2PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOTQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTk1OiNpZm5kZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5Ni1zdGF0aWMgYm9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0yMDQ9bXR5cGVfbGlzdChjb25zdCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTIyNC1cdFx0ICAgIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MjI1OiNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjI2LVx0XHQgICAgIG10eXBlX2lzX2ZpbGxlZCh4KSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzE3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMxODojZW5kaWYgLyogX19JUF9TRVRfQklUTUFQX0lQX0dFTl9IICovXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9iaXRtYXA6aXAsbWFjXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM3OiNkZWZpbmUgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBTZXQgQ29uZmlndXJhdGlvbiBIaWVyYXJjaHkqKgoKUmlnaHQsIHNvIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgSVAgc2V0IGZlYXR1cmVzIGFyZSBvcmdhbml6ZWQgYW5kIHdoYXQgZGVwZW5kcyBvbiB3aGF0LiBNeSBnby10byBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBpbiB0aGlzIGNhc2UsIHRoZSBvbmUgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLiBJdCYjMzk7bGwgYmUgYSBtYXAgb2YgdGhlIGxhbmRzY2FwZS4KCkkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBgSVBfU0VUYCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyB0aGUgdG9wLWxldmVsIG9wdGlvbiwgYW5kIHRoZSB2YXJpb3VzIGJpdG1hcC1yZWxhdGVkIHR5cGVzOiBgSVBfU0VUX0JJVE1BUF9JUGAsIGBJUF9TRVRfQklUTUFQX0lQTUFDYCwgYW5kIGBJUF9TRVRfQklUTUFQX1BPUlRgLiBUaGlzIHNob3VsZCBjbGFyaWZ5IGFueSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogJiMzNDtJZiBgSVBfU0VUX0JJVE1BUF9JUGAgaXMgZW5hYmxlZCwgdGhlbiBgSVBfU0VUYCBtdXN0IGFsc28gYmUgZW5hYmxlZCwmIzM0OyBvciBwZXJoYXBzIHNvbWUgbXV0dWFsbHkgZXhjbHVzaXZlIG9wdGlvbnMuCgpPbmNlIEkmIzM5O3ZlIG1hcHBlZCB0aGUgc3RydWN0dXJlIGZyb20gdGhlIGBLY29uZmlnYCBmaWxlLCBJIHNob3VsZCBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZXNlIElQIHNldCBiaXRtYXAgZmVhdHVyZXMsIGFuZCB3aGVyZSB0aGV5IGZpdCBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBGcm9tIHRoZXJlIEkgY2FuIGNoZWNrIGFueSBjb2RlIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgSVBfU0VUXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUCBzZXQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIElQIHNldCBzdXBwb3J0IHRvIHRoZSBrZXJuZWwuXG4gICA4Olx0XHQgIEluIG9yZGVyIHRvIGRlZmluZSBhbmQgdXNlIHRoZSBzZXRzLCB5b3UgbmVlZCB0aGUgdXNlcnNwYWNlIHV0aWxpdHlcbiAgIDk6XHRcdCAgaXBzZXQoOCkuIFlvdSBjYW4gdXNlIHRoZSBzZXRzIGluIG5ldGZpbHRlciB2aWEgdGhlIFwmIzM0O3NldFwmIzM0OyBtYXRjaFxuICAxMDpcdFx0ICBhbmQgXCYjMzQ7U0VUXCYjMzQ7IHRhcmdldC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDEzOlx0XG4gIDE0Olx0aWYgSVBfU0VUXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElQX1NFVF9NQVhcbiAgMTc6XHRcdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiBJUCBzZXRzXCYjMzQ7XG4gIDE4Olx0XHRkZWZhdWx0IDI1NlxuICAxOTpcdFx0cmFuZ2UgMiA2NTUzNFxuICAyMDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgWW91IGNhbiBkZWZpbmUgaGVyZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtYXhpbXVtIG51bWJlciBcbiAgMjM6XHRcdCAgb2YgSVAgc2V0cyBmb3IgdGhlIGtlcm5lbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVGhlIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAmIzM5O21heF9zZXRzJiMzOTsgbW9kdWxlXG4gIDI2Olx0XHQgIHBhcmFtZXRlciBvZiB0aGUgJiMzOTtpcF9zZXQmIzM5OyBtb2R1bGUuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYml0bWFwOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxuICAzMzpcdFx0ICBjYW4gc3RvcmUgSVB2NCBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKSBmcm9tIGEgcmFuZ2UuXG4gIDM0Olx0XG4gIDM1Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIElQX1NFVFxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBiaXRtYXA6aXAsbWFjIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxuICA0MjpcdFx0ICBjYW4gc3RvcmUgSVB2NCBhZGRyZXNzIGFuZCAoc291cmNlKSBNQUMgYWRkcmVzcyBwYWlycyBmcm9tIGEgcmFuZ2UuXG4gIDQzOlx0XG4gIDQ0Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIElQX1NFVFxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBiaXRtYXA6cG9ydCBzZXQgdHlwZSBzdXBwb3J0LCBieSB3aGljaCBvbmVcbiAgNTE6XHRcdCAgY2FuIHN0b3JlIFRDUC9VRFAgcG9ydCBudW1iZXJzIGZyb20gYSByYW5nZS5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDU0Olx0XG4gIDU1Olx0Y29uZmlnIElQX1NFVF9IQVNIX0lQXG4gIDU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4gIDU3Olx0XHRkZXBlbmRzIG9uIElQX1NFVFxuICA1ODpcdFx0aGVscFxuICA1OTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBoYXNoOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxuICA2MDpcdFx0ICBjYW4gc3RvcmUgYXJiaXRyYXJ5IElQdjQgb3IgSVB2NiBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIHRhcmdldHMgdGhlIGBuZXRmaWx0ZXIvaXBzZXRgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJdCYjMzk7cyBjbGVhcmx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGJvdGggbmV0bGluayAoc3BlY2lmaWNhbGx5IGBuZm5ldGxpbmtgIGFuZCBgaXBzZXRgKSBhbmQgdGhlIG5ldGZpbHRlciBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLCB2aWEgdGhlIGB4dF9TRVRgIHRhcmdldCBmb3IgcGFja2V0LWRyaXZlbiBzZXQgdXBkYXRlcy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIHdpdGhpbiB0aGUgYG10eXBlX2FkZGAgZnVuY3Rpb24sIG1vcmUgcHJlY2lzZWx5IHdoZW4gaW5pdGlhbGl6aW5nIGNvbW1lbnRzIHZpYSBgaXBfc2V0X2luaXRfY29tbWVudGAuIFRoaXMgZGlyZWN0bHkgaW5mbHVlbmNlcyBiZWhhdmlvciwgcGFydGljdWxhcmx5IHdoZW4gdGhlIGBleHQtJmd0O3RhcmdldGAgaXMgY29uZmlndXJlZCwgd2hpY2ggaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYml0bWFwIHNldHMgdGhhdCBoYXZlIGNvbW1lbnRzIGVuYWJsZWQuCgpHaXZlbiBpdHMgcmVhY2hhYmlsaXR5IGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBteSBpbml0aWFsIGluc3RpbmN0IGlzOiAqKnllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuKiogSXQgdGlja3MgYWxsIHRoZSBib3hlcyDigJMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCBhbmQgaW50ZXJhY3RzIHdpdGggY29uZmlndXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4gYG10eXBlX2FkZGAgaXRzZWxmIGlzIGdlbmVyYXRlZCBmb3IgdGhlIGJpdG1hcCBzZXQgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGFuZCBgYml0bWFwX3BvcnRfYWRkYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIGJvdGgga2VybmVsIGFuZCB1c2VyLWFjY2Vzc2libGUgZnVuY3Rpb25zLCBhcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGBrYWR0YCBhbmQgYHVhZHRgIHZhcmlhbnRzLiAgYGlwX3NldF9pbml0X2NvbW1lbnRgIGlzIGFsc28gY3J1Y2lhbCwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgY2FsbGVkIGJ5IGBtdHlwZV9hZGRgLiBJdCBzZWVtcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdmVyeSByZWxldmFudDoKYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGBiaXRtYXBfcG9ydF9hZGRgLCBgYml0bWFwX2lwX2thZHRgLCBgYml0bWFwX2lwbWFjX2thZHRgLCBgYml0bWFwX3BvcnRfa2FkdGAsIGBiaXRtYXBfaXBfdWFkdGAsIGBiaXRtYXBfaXBtYWNfdWFkdGAsIGBiaXRtYXBfcG9ydF91YWR0YCwgYGlwX3NldF9pbml0X2NvbW1lbnRgLgoKVGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBpcHNldCBiaXRtYXAgdHlwZXMgYW5kIGNvbW1lbnQgZXh0ZW5zaW9uIGhhbmRsaW5nLCBtYWtpbmcgdGhlbSBpZGVhbCB0YXJnZXRzLiBUaGV5IGFyZSBub3QgdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLCBidXQgYXJlIHNwZWNpZmljIHRvIGlwc2V0IGZ1bmN0aW9uYWxpdHkuCgpGb3IgZnV6emluZywgSSYjMzk7bGwgc2VsZWN0IHRoZSBtb3N0IGRpcmVjdGx5IHJlbGV2YW50IHN5bWJvbHM6IGBiaXRtYXBfaXBfYWRkYCwgYGJpdG1hcF9pcG1hY19hZGRgLCBgYml0bWFwX3BvcnRfYWRkYCwgYGJpdG1hcF9pcF9rYWR0YCwgYGJpdG1hcF9pcG1hY19rYWR0YCwgYGJpdG1hcF9wb3J0X2thZHRgLCBgYml0bWFwX2lwX3VhZHRgLCBgYml0bWFwX2lwbWFjX3VhZHRgLCBgYml0bWFwX3BvcnRfdWFkdGAsIGBpcF9zZXRfaW5pdF9jb21tZW50YC4KCkZpbmFsbHksIHJlZ2FyZGluZyBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgc2V0OiBgSVBfU0VUYCwgYElQX1NFVF9CSVRNQVBfSVBgLCBgSVBfU0VUX0JJVE1BUF9JUE1BQ2AsIGBJUF9TRVRfQklUTUFQX1BPUlRgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kICBgTkVURklMVEVSX1hUX1RBUkdFVF9TRVRgIChvciBgTkVURklMVEVSX1hUX1NFVGApLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZyBuYW1lIGZvciBgeHRfU0VUYCB0byBlbnN1cmUgYWNjdXJhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3h0X1NFVHxORVRGSUxURVJfWFQuKlNFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc3Mz1jb25maWcgTkVURklMVEVSX1hUX0NPTk5NQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTc4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3ODU6Y29uZmlnIE5FVEZJTFRFUl9YVF9TRVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03ODYtXHR0cmlzdGF0ZSAmIzM5O3NldCB0YXJnZXQgYW5kIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTYwPW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICYjNDM7PSB4dF9jb25ubWFyay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1NFVCkgJiM0Mzs9IHh0X3NldC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2Mi1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX05BVCkgJiM0Mzs9IHh0X25hdC5vXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0yMT1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WHRhYmxlczogSVAgc2V0IG1hdGNoIGFuZCB0YXJnZXQgbW9kdWxlXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjI6TU9EVUxFX0FMSUFTKFwmIzM0O3h0X1NFVFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTIzLU1PRFVMRV9BTElBUyhcJiMzNDtpcHRfc2V0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYHh0X1NFVGAgTmV0ZmlsdGVyIE1vZHVsZSoqCgpPa2F5LCBzbyBgTkVURklMVEVSX1hUX1NFVGAgaXMgdGhlIE5ldGZpbHRlciB0YXJnZXQgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGB4dF9TRVRgIG1vZHVsZS4gR290IGl0LiBUaGlzIG1vZHVsZSYjMzk7cyBqb2IgaXMgdG8gc2V0IHRoZSBgZXh0LSZndDt0YXJnZXRgIGZpZWxkIHRvIGAxYCB3aGVuIGEgcGFja2V0IG1hdGNoZXMgaXRzIGNyaXRlcmlhIGFuZCB0aGUgdGFyZ2V0IGlzIGV4ZWN1dGVkLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNwb3Qtb24sIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiBgeHRfc2V0LmNgLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgcGFja2V0IGZpbHRlcmluZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC50YXJnZXQgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGAudGFyZ2V0YCBGaWVsZCBpbiBpcF9zZXRfZXh0IGFuZCBJUF9TRVRfSU5JVF9LRVhUKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGAudGFyZ2V0YCB3aXRoaW4gdGhlIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYW5kIHRoZSBgSVBfU0VUX0lOSVRfS0VYVGAgbWFjcm8uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCBleHRlbnNpb24gaW5pdGlhbGl6YXRpb24gYW5kIHRhcmdldCBhc3NpZ25tZW50LCBzbyB0aGUgc3RydWN0dXJlIGBpcF9zZXRfZXh0YCBwcm9iYWJseSBjb250YWlucyBzb21lIGRhdGEgcmVsZXZhbnQgZm9yIHRoZSBpcHNldC4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSB3aGVyZSB0aGVzZSBhcmUgZGVmaW5lZC4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIGB0YXJnZXRgIGZpZWxkIGlzIGEgc2ltcGxlIHBvaW50ZXIgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleC4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBJIGV4cGVjdCB0byBzZWUgYW4gYXNzb2NpYXRlZCBpbml0aWFsaXphdGlvbiBtYWNyby4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9JTklUX0tFWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjM9bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzMS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjUzMjojZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTMzLVx0eyAuYnl0ZXMgPSAoc2tiKS1cdTAwM2VsZW4sIC5wYWNrZXRzID0gMSwgLnRhcmdldCA9IHRydWUsXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NjYKCQkJCQkJCW91dHB1dDogMjc2CgkJCQkJCQl0aG91Z2h0czogNjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwtU3BhY2UgSVAgU2V0IEluaXRpYWxpemF0aW9uIGFuZCBDb21tZW50IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVAgc2V0cyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgY29tbWVudHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoZSBtYWNybyBgSVBfU0VUX0lOSVRfS0VYVGAsIHdoaWNoIGlzIHVzZWQgaW4gYGJpdG1hcF9pcF9rYWR0YCwgYGJpdG1hcF9pcG1hY19rYWR0YCwgYW5kIGBiaXRtYXBfcG9ydF9rYWR0YC4gIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgSVBfU0VUX0lOSVRfS0VYVGAgaXMgY2FsbGVkIHdoZW4gdGhlIGBrYWR0YCBmdW5jdGlvbiAoa2VybmVsIGFkZC9kZWwvdGVzdCkgaXMgaW52b2tlZCwgdHlwaWNhbGx5IHdoZW4gdGhlIGB4dF9zZXRgIHRhcmdldCBpcyB1c2VkLCBhbmQgaW4gdGhpcyBjYXNlLCBgZXh0LnRhcmdldGAgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBjb250cmFzdHMgd2l0aCBgSVBfU0VUX0lOSVRfVUVYVGAsIHVzZWQgZHVyaW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgKGB1YWR0YCkgd2hlcmUgYGV4dC50YXJnZXRgIGlzIGBmYWxzZWAuCgpUaGUgaW1wbGljYXRpb24gaGVyZSBpcyBjcnVjaWFsOiBXaGVuIGFkZGluZyBlbGVtZW50cyB0aHJvdWdoIHRoZSBrZXJuZWwgcGF0aCwgd2UgKmRvbiYjMzk7dCogd2FudCB0byBjYWxsIGBpcF9zZXRfaW5pdF9jb21tZW50YC4gVGhlIGtlcm5lbCBwYWNrZXQgcGF0aCBpc24mIzM5O3Qgc3VwcG9zZWQgdG8gcHJvdmlkZSBjb21tZW50cywgYW5kIHdlIGNlcnRhaW5seSBkb24mIzM5O3Qgd2FudCB0byBjbGVhciBvciBvdmVyd3JpdGUgZXhpc3RpbmcgY29tbWVudHMgd2l0aCBgTlVMTGAgaW4gdGhlIGBrYWR0YCBjb250ZXh0LiBUaGlzIGlzIHdoYXQgdGhlIHBhdGNoIGlzIGFib3V0LgoKVG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyB2ZXJpZnkgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmU6CiogICBgSVBfU0VUYCBpcyBlbmFibGVkCiogICBgSVBfU0VUX0JJVE1BUF9JUGAgaXMgZW5hYmxlZAoqICAgYElQX1NFVF9CSVRNQVBfSVBNQUNgIGlzIGVuYWJsZWQKKiAgIGBJUF9TRVRfQklUTUFQX1BPUlRgIGlzIGVuYWJsZWQKKiAgIGBORVRGSUxURVJgIGlzIGVuYWJsZWQKKiAgIGBORVRGSUxURVJfWFRfU0VUYCBpcyBlbmFibGVkCgpOb3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgc3ltYm9scyBhcmUgY29ycmVjdCwgbGV0cyB2ZXJpZnkgdGhlc2U6CiogICBgYml0bWFwX2lwX2FkZGAKKiAgIGBiaXRtYXBfaXBtYWNfYWRkYAoqICAgYGJpdG1hcF9wb3J0X2FkZGAKKiAgIGBiaXRtYXBfaXBfa2FkdGAKKiAgIGBiaXRtYXBfaXBtYWNfa2FkdGAKKiAgIGBiaXRtYXBfcG9ydF9rYWR0YAoqICAgYGJpdG1hcF9pcF91YWR0YAoqICAgYGJpdG1hcF9pcG1hY191YWR0YAoqICAgYGJpdG1hcF9wb3J0X3VhZHRgCiogICBgaXBfc2V0X2luaXRfY29tbWVudGAKClRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBtdHlwZV9hZGQoKWAgZnVuY3Rpb24gaW4gYGlwX3NldF9iaXRtYXBfZ2VuLmhgIHRvIHByZWNpc2VseSBhZGRyZXNzIHRoaXMga2VybmVsLXNpZGUgY29tbWVudCBpbml0aWFsaXphdGlvbiBpc3N1ZS4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcHJldmVudCBjb21tZW50IGV4dGVuc2lvbnMgZnJvbSBiZWluZyBpbml0aWFsaXplZCBvciBvdmVyd3JpdHRlbiB3aGVuIHRoZSBhZGRpdGlvbiBjb21lcyBmcm9tIHRoZSBrZXJuZWwgcGF0aC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIHdpdGhpbiBgYml0bWFwOmlwYCwgYGJpdG1hcDppcCxtYWNgLCBhbmQgYGJpdG1hcDpwb3J0YCBpcHNldCB0eXBlcy4KClRvIHZhbGlkYXRlIHRoaXMgcGF0Y2ggYW5kIGVuc3VyZSB0aGUgY29ycmVjdCBiZWhhdmlvciwgZnV6emluZyBpcyB0aGUgYmVzdCBhcHByb2FjaC4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgdGhlIGVsZW1lbnQgYWRkaXRpb25zIGZyb20gYm90aCBrZXJuZWwtc3BhY2UgYW5kIHVzZXJzcGFjZSBuZXRsaW5rIGNvcnJlY3RseSBoYW5kbGUgYW5kIG1haW50YWluIHNldCBleHRlbnNpb25zLCBwcmV2ZW50aW5nIGJvdGggY29tbWVudCBjb3JydXB0aW9uIGFuZCBtZW1vcnkgbGVha3MuCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHRoZSBmdXp6aW5nIHNldCB1cCwgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQTUFDJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfUE9SVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JpdG1hcF9pcF9hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX2FkZCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfcG9ydF9hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwX2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfa2FkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBfdWFkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfaXBtYWNfdWFkdCYjMzQ7LAogICAgJiMzNDtiaXRtYXBfcG9ydF91YWR0JiMzNDssCiAgICAmIzM0O2lwX3NldF9pbml0X2NvbW1lbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbXR5cGVfYWRkKCkgaW4gbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIHRvIGF2b2lkIGNhbGxpbmcgaXBfc2V0X2luaXRfY29tbWVudCgpIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIHZpYSBrZXJuZWwtc2lkZSBuZXRmaWx0ZXIgcGFja2V0IHBhdGhzICh3aGVyZSBleHQtXHUwMDNldGFyZ2V0IGlzIHRydWUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciBpcHNldCBiaXRtYXAgdHlwZXMgKGJpdG1hcDppcCwgYml0bWFwOmlwLG1hYywgYml0bWFwOnBvcnQpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBleHRlbnNpb24gaGFuZGxpbmcgYW5kIGNvbW1lbnQgbGlmZWN5Y2xlIHJlbWFpbiBzb3VuZCBhY3Jvc3MgdXNlcnNwYWNlIG5ldGxpbmsgYW5kIHBhY2tldC1wcm9jZXNzaW5nIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaXRtYXBfaXBfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19hZGQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfYWRkJiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcF9rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9pcG1hY19rYWR0JiMzNDssCiAgICAmIzM0O2JpdG1hcF9wb3J0X2thZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX2lwbWFjX3VhZHQmIzM0OywKICAgICYjMzQ7Yml0bWFwX3BvcnRfdWFkdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG10eXBlX2FkZCgpIGluIG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCB0byBhdm9pZCBjYWxsaW5nIGlwX3NldF9pbml0X2NvbW1lbnQoKSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCB2aWEga2VybmVsLXNpZGUgbmV0ZmlsdGVyIHBhY2tldCBwYXRocyAod2hlcmUgZXh0LVx1MDAzZXRhcmdldCBpcyB0cnVlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgaXBzZXQgYml0bWFwIHR5cGVzIChiaXRtYXA6aXAsIGJpdG1hcDppcCxtYWMsIGJpdG1hcDpwb3J0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgZXh0ZW5zaW9uIGhhbmRsaW5nIGFuZCBjb21tZW50IGxpZmVjeWNsZSByZW1haW4gc291bmQgYWNyb3NzIHVzZXJzcGFjZSBuZXRsaW5rIGFuZCBwYWNrZXQtcHJvY2Vzc2luZyBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBtdHlwZV9hZGQoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gY2hlY2sgYCFleHQtXHUwMDNldGFyZ2V0YCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2luaXRfY29tbWVudCgpYCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBhdHRlcm4gaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwcmV2ZW50cyBrZXJuZWwgaXB0YWJsZXMgU0VUIHRhcmdldCBhY3Rpb25zIGZyb20gY2xlYXJpbmcvbW9kaWZ5aW5nIGVsZW1lbnQgY29tbWVudHMuXG5cbi0gQWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGlwX3NldF9leHRgIGFyZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYElQX1NFVF9JTklUX0tFWFRgIG9yIGBJUF9TRVRfSU5JVF9VRVhUYCksIHdoaWNoIGZ1bGx5IHplcm8gYWxsIHVubWVudGlvbmVkIGZpZWxkcywgZW5zdXJpbmcgYGV4dC1cdTAwM2V0YXJnZXRgIGFuZCBhbGwgb3RoZXIgZmllbGRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIG5ldmVyIHVuaW5pdGlhbGl6ZWQuXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVGhlIGJ1ZyBmaXhlZCBpcyBhIGxvZ2ljIGlzc3VlICh1bmludGVuZGVkIGNvbW1lbnQgZGVsZXRpb24gZHVyaW5nIGtlcm5lbC1zcGFjZSBwYWNrZXQgbWF0Y2hpbmcvdGFyZ2V0IGV4ZWN1dGlvbikuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlNzA5ZWJjOTI1NWI5OWJkOTNhZTkzYmI5NjNiMWJiMTA4OTAwYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA1OjIyOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCmluZGV4IGQ2YTdlNjYwNDU0MjIuLmFlMzc2ZmEzZTdhM2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKQEAgLTE1OSw3ICYjNDM7MTU5LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAKIAlpZiAoU0VUX1dJVEhfQ09VTlRFUihzZXQpKQogCQlpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7Ci0JaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkKJiM0MzsJaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSAmYW1wOyZhbXA7ICFleHQtJmd0O3RhcmdldCkKIAkJaXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7CiAJaWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSkKIAkJaXBfc2V0X2luaXRfc2tiaW5mbyhleHRfc2tiaW5mbyh4LCBzZXQpLCBleHQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUmVxdWVzdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyBhIExpbnV4IGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCwgYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgaXQuIEl0JiMzOTtzIGEgbG93LXNldmVyaXR5LCBkZWZlbnNpdmUgY29kZSByZXZpZXcsIGJhc2ljYWxseSBhIHNhbml0aXplciBzZWxlY3Rpb24gaXNzdWUuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgY2hhbmdlIHRob3JvdWdobHkuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gcHJvYmFibHkgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgdGhlIHBhdGNoICphY3R1YWxseSogZG9lcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkgaGVyZSDigJMgYXJlIHdlIGNyZWF0aW5nIGFueSBuZXcsIG9yIG1ha2luZyBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBzdGF0ZXMgYWNjZXNzaWJsZT8gSWYgSSBmaW5kIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGl0LCBJJiMzOTtsbCBmbGFnIGl0IGZvciBLTVNBTi4gSSYjMzk7bGwgbmVlZCB0byB0aGVuIGRvY3VtZW50IHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgYXR0ZW50aW9uIHRvIGRldGFpbCBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNy0jZGVmaW5lIG10eXBlX2FkdF9lbGVtXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWR0X2VsZW0pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg6I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfdGltZW91dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOS0jZGVmaW5lIG10eXBlX2djX2luaXRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yOC0jZGVmaW5lIG10eXBlX3Rlc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI5OiNkZWZpbmUgbXR5cGVfYWRkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwLSNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMjk9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjEzMDptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzEtXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NC0jaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NTpcdFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTYtI2Vsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA1LVx0LmFkdFx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MzA2Olx0XHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMDctXHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOS0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjEtI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIzMjojdW5kZWYgbXR5cGVfYWRkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIzMy0jdW5kZWYgbXR5cGVfZGVsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfY2xlYW51cClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI3OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjgwOiNkZWZpbmUgbXR5cGVfYWRkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yODEtI2RlZmluZSBtdHlwZV9kZWxcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNDUtLyoqXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNDctICogQHNldDogUG9pbnRlciB0byB0aGUgaXBfc2V0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozNTg6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM1OS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA0LVx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1Olx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkwNi1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjk4ODptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTg5LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExMy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XHRcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaSksIGkpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTE1LSNlbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzQtXHQuYWR0XHQ9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTYzNTpcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE2MzYtXHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEJpdG1hcCBHZW5lcmF0aW9uIGluIGBpcHNldGAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBpcHNldGAgYml0bWFwIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIGdlbmVyYXRpbmcgdGhlIGJpdG1hcHMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgZm9jdXMgb24gbGluZXMgMTMwIHRocm91Z2ggMTgwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGJpdG1hcCBnZW5lcmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBgaXBzZXRgIGZyYW1ld29yay4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGJpdHdpc2Ugb3BlcmF0aW9ucyBhbmQgYWRkcmVzcyBtYXBwaW5nIHdpdGhpbiB0aGF0IHNlY3Rpb24uIEl0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCB0byBhY2hpZXZlIGVmZmljaWVudCBsb29rdXBzIGFuZCBzdG9yYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uLi4gSSBuZWVkIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNjpcdFx0cmV0dXJuIGlwX3NldF9tYXRjaF9leHRlbnNpb25zKHNldCwgZXh0LCBtZXh0LCBmbGFncywgeCk7XG4gMTI3Olx0fVxuIDEyODpcdFxuIDEyOTpcdHN0YXRpYyBpbnRcbiAxMzA6XHRtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAxMzE6XHRcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAxMzI6XHR7XG4gMTMzOlx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDEzNDpcdFx0Y29uc3Qgc3RydWN0IG10eXBlX2FkdF9lbGVtICplID0gdmFsdWU7XG4gMTM1Olx0XHR2b2lkICp4ID0gZ2V0X2V4dChzZXQsIG1hcCwgZS1cdTAwM2VpZCk7XG4gMTM2Olx0XHRpbnQgcmV0ID0gbXR5cGVfZG9fYWRkKGUsIG1hcCwgZmxhZ3MsIHNldC1cdTAwM2Vkc2l6ZSk7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAocmV0ID09IElQU0VUX0FERF9GQUlMRUQpIHtcbiAxMzk6XHRcdFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSBcdTAwMjZcdTAwMjZcbiAxNDA6XHRcdFx0ICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQoeCwgc2V0KSkpIHtcbiAxNDE6XHRcdFx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbiAxNDI6XHRcdFx0XHRyZXQgPSAwO1xuIDE0MzpcdFx0XHR9IGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfRVhJU1QpKSB7XG4gMTQ0Olx0XHRcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTQ1Olx0XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XG4gMTQ2Olx0XHRcdH1cbiAxNDc6XHRcdFx0LyogRWxlbWVudCBpcyByZS1hZGRlZCwgY2xlYW51cCBleHRlbnNpb25zICovXG4gMTQ4Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xuIDE0OTpcdFx0fVxuIDE1MDpcdFx0aWYgKHJldCBcdTAwM2UgMClcbiAxNTE6XHRcdFx0c2V0LVx1MDAzZWVsZW1lbnRzLS07XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxuIDE1NDpcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXG4gMTU1Olx0XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG4gMTU2Olx0I2Vsc2VcbiAxNTc6XHRcdFx0aXBfc2V0X3RpbWVvdXRfc2V0KGV4dF90aW1lb3V0KHgsIHNldCksIGV4dC1cdTAwM2V0aW1lb3V0KTtcbiAxNTg6XHQjZW5kaWZcbiAxNTk6XHRcbiAxNjA6XHRcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXG4gMTYxOlx0XHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcbiAxNjI6XHRcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIDE2MzpcdFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiAxNjQ6XHRcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gMTY1Olx0XHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiAxNjY6XHRcbiAxNjc6XHRcdC8qIEFjdGl2YXRlIGVsZW1lbnQgKi9cbiAxNjg6XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIDE2OTpcdFx0c2V0X2JpdChlLVx1MDAzZWlkLCBtYXAtXHUwMDNlbWVtYmVycyk7XG4gMTcwOlx0XHRzZXQtXHUwMDNlZWxlbWVudHMmIzQzOyYjNDM7O1xuIDE3MTpcdFxuIDE3MjpcdFx0cmV0dXJuIDA7XG4gMTczOlx0fVxuIDE3NDpcdFxuIDE3NTpcdHN0YXRpYyBpbnRcbiAxNzY6XHRtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAxNzc6XHRcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAxNzg6XHR7XG4gMTc5Olx0XHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDE4MDpcdFx0Y29uc3Qgc3RydWN0IG10eXBlX2FkdF9lbGVtICplID0gdmFsdWU7XG4gMTgxOlx0XHR2b2lkICp4ID0gZ2V0X2V4dChzZXQsIG1hcCwgZS1cdTAwM2VpZCk7XG4gMTgyOlx0XG4gMTgzOlx0XHRpZiAobXR5cGVfZG9fZGVsKGUsIG1hcCkpXG4gMTg0Olx0XHRcdHJldHVybiAtSVBTRVRfRVJSX0VYSVNUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIGlwX3NldCBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhpcyBgaXBfc2V0YCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGV4dC0mZ3Q7dGFyZ2V0YCBhbmQgYGlwX3NldF9pbml0X2NvbW1lbnRgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG1hY3JvIGBTRVRfV0lUSF9DT01NRU5UYCBtYXkgYWxzbyBiZSByZWxldmFudC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhlc2UgYXJlIGFsbCBjb25uZWN0ZWQgc29tZWhvdywgYW5kIHRyYWNpbmcgdXNhZ2UgaXMgbXkgYmVzdCBiZXQuIFNvLCBsZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcGAuIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIG9jY3VycmVuY2VzIG9mIGBpcF9zZXRfaW5pdF9jb21tZW50YCwgdGhlIG1hY3JvIGBTRVRfV0lUSF9DT01NRU5UYCwgYW5kIGFsc28sIGNyaXRpY2FsbHksIGBleHQtJmd0O3RhcmdldGAuIFNlZWluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMsIG1hY3JvLCBhbmQgc3RydWN0dXJlIG1lbWJlciBhcmUgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgY2x1ZXMgSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGdyZXAgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTYyLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTYzOlx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjQtXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDY9dm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM0NzppcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OC1cdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM2OC19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM3MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjMtXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyNDpcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjUtXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjIxPWxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMjYtXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMjc6XHRcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChlLCBzZXQpLCBleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMjgtXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBTZXQgQ29yZSBhbmQgSGFzaCBHZW5lcmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhlIElQIHNldCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgaGFzaCBnZW5lcmF0aW9uIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGV4YW1pbmUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2AgYXJvdW5kIGxpbmUgMzQ2LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYmFzaWMgSVAgc2V0IGRhdGEgc3RydWN0dXJlcyBhbmQgb3BlcmF0aW9ucyBhcmUgbWFuYWdlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBmdW5jdGlvbiBjYWxscyBvciBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGVyZSB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB3aG9sZSB0aGluZy4KClRoZW4sIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBoYXNoIGltcGxlbWVudGF0aW9uLCBJIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFyb3VuZCBsaW5lIDExMjAuIFRoZSBoZWFkZXIgZmlsZXMgYXJlIGdlbmVyYWxseSB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIG1hY3JvcywgYW5kIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkcml2ZSB0aGUgY3JpdGljYWwgYWxnb3JpdGhtcywgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGhvbGRzIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBoYXNoIHRhYmxlIGdlbmVyYXRpb24gaW4gdGhhdCBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGRldGFpbHMgYXJlIGNvcnJlY3QuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyBjb2xsaXNpb25zLCBob3cgdGhleSBhcmUgYnVpbGRpbmcgdGhlIGhhc2ggdGFibGVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuIFRoYXQmIzM5O2xsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHRyZXR1cm4gbmxhX2RhdGEodGIpO1xuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHQvKiBDYWxsZWQgZnJvbSB1YWRkIG9ubHksIHByb3RlY3RlZCBieSB0aGUgc2V0IHNwaW5sb2NrLlxuIDM0NDpcdCAqIFRoZSBrYWR0IGZ1bmN0aW9ucyBkb24mIzM5O3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cbiAzNDU6XHQgKi9cbiAzNDY6XHR2b2lkXG4gMzQ3Olx0aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiAzNDg6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4gMzQ5Olx0e1xuIDM1MDpcdFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiAzNTE6XHRcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIDM1MjpcdFxuIDM1MzpcdFx0aWYgKHVubGlrZWx5KGMpKSB7XG4gMzU0Olx0XHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiAzNTU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gMzU2Olx0XHRcdGtmcmVlX3JjdShjLCByY3UpO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFx0aWYgKCFsZW4pXG4gMzU5Olx0XHRcdHJldHVybjtcbiAzNjA6XHRcdGlmICh1bmxpa2VseShsZW4gXHUwMDNlIElQU0VUX01BWF9DT01NRU5UX1NJWkUpKVxuIDM2MTpcdFx0XHRsZW4gPSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFO1xuIDM2MjpcdFx0YyA9IGttYWxsb2Moc2l6ZW9mKCpjKSAmIzQzOyBsZW4gJiM0MzsgMSwgR0ZQX0FUT01JQyk7XG4gMzYzOlx0XHRpZiAodW5saWtlbHkoIWMpKVxuIDM2NDpcdFx0XHRyZXR1cm47XG4gMzY1Olx0XHRzdHJzY3B5KGMtXHUwMDNlc3RyLCBleHQtXHUwMDNlY29tbWVudCwgbGVuICYjNDM7IDEpO1xuIDM2NjpcdFx0YXRvbWljNjRfYWRkKHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIDM2NzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgYyk7XG4gMzY4Olx0fVxuIDM2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xuIDM3MDpcdFxuIDM3MTpcdC8qIFVzZWQgb25seSB3aGVuIGR1bXBpbmcgYSBzZXQsIHByb3RlY3RlZCBieSByY3VfcmVhZF9sb2NrKCkgKi9cbiAzNzI6XHRzdGF0aWMgaW50XG4gMzczOlx0aXBfc2V0X3B1dF9jb21tZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudClcbiAzNzQ6XHR7XG4gMzc1Olx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjID0gcmN1X2RlcmVmZXJlbmNlKGNvbW1lbnQtXHUwMDNlYyk7XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoIWMpXG4gMzc4Olx0XHRcdHJldHVybiAwO1xuIDM3OTpcdFx0cmV0dXJuIG5sYV9wdXRfc3RyaW5nKHNrYiwgSVBTRVRfQVRUUl9DT01NRU5ULCBjLVx1MDAzZXN0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgYCFleHQtJmd0O3RhcmdldGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBjaGVjaywgc3BlY2lmaWNhbGx5IHdoeSBgIWV4dC0mZ3Q7dGFyZ2V0YCB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCB0aGUgZmllbGQgYGV4dC0mZ3Q7dGFyZ2V0YCBhY3R1YWxseSByZXByZXNlbnRzLiBUaW1lIHRvIGdvIGh1bnRpbmcuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiB0aGUgYHN0cnVjdCBpcF9zZXRfZXh0YCBkZWZpbml0aW9uIGFuZCBhbnkgc3Vycm91bmRpbmcgY29kZSBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYGV4dC0mZ3Q7dGFyZ2V0YCBhbmQganVzdCBwbGFpbiBgdGFyZ2V0YC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBvdmVydmlldyBvZiBob3cgaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IHRvIGxvb2sgYXQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xMTY9c3RydWN0IGlwX3NldF9leHQge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTEyMy1cdHU4IGJ5dGVzX29wO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MTI0Olx0Ym9vbCB0YXJnZXQ7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xMjUtfTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xNDE9c3RydWN0IGlwX3NldF9hZHRfb3B0IHtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0Mi1cdHU4IGZhbWlseTtcdFx0LyogQWN0dWFsIHByb3RvY29sIGZhbWlseSAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MTQzOlx0dTggZGltO1x0XHRcdC8qIERpbWVuc2lvbiBvZiBtYXRjaC90YXJnZXQgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0NC1cdHU4IGZsYWdzO1x0XHQvKiBEaXJlY3Rpb24gYW5kIG5lZ2F0aW9uIGZsYWdzICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9MzE2PWV4dGVybiB2b2lkIGlwX3NldF9uZm5sX3B1dChzdHJ1Y3QgbmV0ICpuZXQsIGlwX3NldF9pZF90IGluZGV4KTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMxNy1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjMxODovKiBBUEkgZm9yIGlwdGFibGVzIHNldCBtYXRjaCwgYW5kIFNFVCB0YXJnZXQgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMxOS1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjM9bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzMi0jZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTMzOlx0eyAuYnl0ZXMgPSAoc2tiKS1cdTAwM2VsZW4sIC5wYWNrZXRzID0gMSwgLnRhcmdldCA9IHRydWUsXFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzNC1cdCAgLnRpbWVvdXQgPSBpcF9zZXRfYWR0X29wdF90aW1lb3V0KG9wdCwgc2V0KSB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYElQX1NFVF9JTklUX0tFWFRgIG1hY3JvLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyB1c2VkIHRvIGluaXRpYWxpemUgc29tZSBzb3J0IG9mIGBpcF9zZXRgIHN0cnVjdHVyZSBmb3Iga2VybmVsIGV4dGVuc2lvbnMgKGtleHRzKS4gIEl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIGJhc2ljczogdGhlIG51bWJlciBvZiBieXRlcyBhbmQgcGFja2V0cywgYSBib29sZWFuIGluZGljYXRpbmcgYSAmIzM5O3RhcmdldCYjMzk7LCBhbmQgYSB0aW1lb3V0IHZhbHVlLiAgVGhlIGAoc2tiKS0mZ3Q7bGVuYCBwYXJ0IGlzIGludGVyZXN0aW5nOyB0aGF0IGxpa2VseSByZWZlcnMgdG8gdGhlIHNpemUgb2YgYSBzb2NrZXQgYnVmZmVyLiBUaGUgYGlwX3NldF9hZHRfb3B0X3RpbWVvdXRgIHN1Z2dlc3RzIHNvbWUgZHluYW1pYyB0aW1lb3V0IGNhbGN1bGF0aW9uLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlLCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBpcF9zZXQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTE2LTEzMDsgdGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoIHRoZSBgSVBfU0VUYCBhbmQgc3Vycm91bmRpbmcgbG9naWMuIEFsc28gSSYjMzk7bGwgY2hlY2sgYGlwX3NldF9oYXNoX2dlbi5oYCBhcm91bmQgbGluZSAxMTIzLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBpbiBjb250ZXh0LiBNaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnksIGlmIEkgY2FuIGFjY2VzcyBpdCwgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhpcyBpbml0aWFsaXphdGlvbi4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBpcF9zZXRfaGFzaF9nZW4uaGAgaW4gZGVwdGguIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgbWFjcm8gZml0cyBpbnRvIHRoZSBsYXJnZXIgYGlwX3NldGAgZnJhbWV3b3JrIGFuZCBob3cgaGFzaCBnZW5lcmF0aW9uIHBsYXlzIGEgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XG4gMTE2Olx0c3RydWN0IGlwX3NldF9leHQge1xuIDExNzpcdFx0c3RydWN0IGlwX3NldF9za2JpbmZvIHNrYmluZm87XG4gMTE4Olx0XHR1NjQgcGFja2V0cztcbiAxMTk6XHRcdHU2NCBieXRlcztcbiAxMjA6XHRcdGNoYXIgKmNvbW1lbnQ7XG4gMTIxOlx0XHR1MzIgdGltZW91dDtcbiAxMjI6XHRcdHU4IHBhY2tldHNfb3A7XG4gMTIzOlx0XHR1OCBieXRlc19vcDtcbiAxMjQ6XHRcdGJvb2wgdGFyZ2V0O1xuIDEyNTpcdH07XG4gMTI2Olx0XG4gMTI3Olx0I2RlZmluZSBleHRfdGltZW91dChlLCBzKVx0XFxcbiAxMjg6XHQoKHVuc2lnbmVkIGxvbmcgKikoKCh2b2lkICopKGUpKSAmIzQzOyAocyktXHUwMDNlb2Zmc2V0W0lQU0VUX0VYVF9JRF9USU1FT1VUXSkpXG4gMTI5Olx0I2RlZmluZSBleHRfY291bnRlcihlLCBzKVx0XFxcbiAxMzA6XHQoKHN0cnVjdCBpcF9zZXRfY291bnRlciAqKSgoKHZvaWQgKikoZSkpICYjNDM7IChzKS1cdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX0NPVU5URVJdKSlcbiAxMzE6XHQjZGVmaW5lIGV4dF9jb21tZW50KGUsIHMpXHRcXFxuIDEzMjpcdCgoc3RydWN0IGlwX3NldF9jb21tZW50ICopKCgodm9pZCAqKShlKSkgJiM0MzsgKHMpLVx1MDAzZW9mZnNldFtJUFNFVF9FWFRfSURfQ09NTUVOVF0pKVxuIDEzMzpcdCNkZWZpbmUgZXh0X3NrYmluZm8oZSwgcylcdFxcXG4gMTM0Olx0KChzdHJ1Y3QgaXBfc2V0X3NrYmluZm8gKikoKCh2b2lkICopKGUpKSAmIzQzOyAocyktXHUwMDNlb2Zmc2V0W0lQU0VUX0VYVF9JRF9TS0JJTkZPXSkpXG4gMTM1Olx0XG4gMTM2Olx0dHlwZWRlZiBpbnQgKCppcHNldF9hZHRmbikoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSxcbiAxMzc6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIDEzODpcdFx0XHRcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgY21kZmxhZ3MpO1xuIDEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaXBfc2V0YCBDb21tZW50IEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgMTEyMyBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgIGhhcyBtZSBzY3JhdGNoaW5nIG15IGhlYWQuIFRoZSBjb25kaXRpb25hbDogYGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgJmFtcDsmYW1wOyAhZXh0LSZndDt0YXJnZXQpYC4uLiB3aHkgdGhlIGAhZXh0LSZndDt0YXJnZXRgIGNoZWNrPyBJdCYjMzk7cyBhIGtleSBkZXRhaWwsIHNvIGxldCYjMzk7cyBkaWcgaW50byBpdC4KClJlYWRpbmcgYXJvdW5kIGBpcF9zZXRfaW5pdF9jb21tZW50YCBpbiBgaXBfc2V0X2NvcmUuY2AsIEkgc2VlIHRoZSBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgbWFya2VkIGFzIGJlaW5nIGNhbGxlZCBmcm9tIGB1YWRkYCAqb25seSosIGFuZCBwcm90ZWN0ZWQgYnkgdGhlIHNldCYjMzk7cyBzcGlubG9jay4gVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCB0aGUga2FkdCBmdW5jdGlvbnMsIHdoaWNoIGlzIGhvdyB3ZSBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgZnJvbSB0aGUgdXNlciBzcGFjZSB3aGVuIHVzaW5nIHRoZSBTRVQgdGFyZ2V0LCBkb24mIzM5O3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS4KCkFoYSEgVGhhdCYjMzk7cyBpdC4gV2hlbiBhIHBhY2tldCBtYXRjaGluZyBydWxlIG9yIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0IGNhbGxzIHRoZSBhZGQgZnVuY3Rpb25hbGl0eSAod2hpY2ggbWVhbnMgdGhyb3VnaCB0aGUga2FkdCAvIGtlcm5lbCBhZGQpIGBleHQtJmd0O3RhcmdldGAgZ2V0cyBzZXQgdG8gYHRydWVgLiBUaGlzIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlIGBleHQtJmd0O2NvbW1lbnRgIHN0cnVjdHVyZSBpcyBub3QgcHJvdmlkZWQuIElmIGBpcF9zZXRfaW5pdF9jb21tZW50YCB3ZXJlIGNhbGxlZCBmcm9tIHRoZSBwYWNrZXQgY29udGV4dCwgaXQmIzM5O3MgZWl0aGVyIG5vdCBleHBlY3RpbmcgdGhlIGNvbW1lbnQgb3IsIHRoZSBjb2RlIHNob3VsZG4mIzM5O3QgYmUgb3ZlcndyaXRpbmcgYW55IGNvbW1lbnRzIG9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgbWVtb3J5IHdpdGggYGtmcmVlX3JjdWAgd2l0aG91dCBhcHByb3ByaWF0ZSBsb2NraW5nIG9yIHVzZXIgY29udGV4dC4gVGhhdCYjMzk7cyBhIGh1Z2UgcG90ZW50aWFsIGlzc3VlLgoKV2FpdCBhIHNlY29uZC4uLiBpbiBgaXBfc2V0X2luaXRfY29tbWVudGAsIHRoZXJlJiMzOTtzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNvbW1lbnQtJmd0O2MsIDEpYCBhbmQgdGhlbiBgYXRvbWljNjRfc3ViYCBvciBgYXRvbWljNjRfYWRkYCBtb2RpZmllcyBgc2V0LSZndDtleHRfc2l6ZWAgb3IgZnJlZXMgYGNgLiBJZiB3ZSB3ZXJlIHRvIGNhbGwgYGlwX3NldF9pbml0X2NvbW1lbnRgIGZyb20gdGhlIGtlcm5lbCBwYWNrZXQgcGF0aCwgcG90ZW50aWFsbHkgYXMgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQsIHRoaXMgY291bGQgb2JsaXRlcmF0ZSBhbiBleGlzdGluZyBjb21tZW50LCBpbnRyb2R1Y2UgY29uY3VycmVuY3kgcHJvYmxlbXMsIG9yIHdvcnNlLiBUaGUgYGlwX3NldF9oYXNoX2dlbi5oYCBjb2RlIGFscmVhZHkgaGFzIHRoaXMgc2FmZWd1YXJkIGluIHBsYWNlOiBgaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSAmYW1wOyZhbXA7ICFleHQtJmd0O3RhcmdldClgLiBJdCBpcyBhIGdvb2QgdGhpbmcgdGhhdCBpdCYjMzk7cyB0aGVyZS4KCkJ1dCBub3cgSSBzZWUgaXQuLi5gaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgbWlzc2luZyB0aGF0IHZpdGFsIGAmYW1wOyZhbXA7ICFleHQtJmd0O3RhcmdldGAgY2hlY2shIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5IHRoYXQgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgZnVsbCBhdWRpdCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFuZCBsb29rIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVsYXRlZCB0byBgZXh0LSZndDt0YXJnZXRgLCBgaXBfc2V0X2V4dGAgb3IgYGV4dC0mZ3Q7Y29tbWVudGAuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyB3aGVyZSBgaXBfc2V0X2V4dGAgaXMgaW5pdGlhbGl6ZWQgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvci4gVGhpcyBuZWVkcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24gdG8gcHJldmVudCBhbnkgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgZGV2YXN0YXRpbmcsIGZsYXdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaXBfc2V0X2V4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTExNT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTE2Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMTc6XHQgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTExOC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEyOT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjEzMTpcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xNzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE3NjptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNzc6XHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTc4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0xMTA9Yml0bWFwX2lwX2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExNi1cdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTE3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExOC1cdHUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0xMzA9Yml0bWFwX2lwX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTEzNi1cdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTM3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTM4LVx0aW50IHJldCA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MTE3PWJpdG1hcF9pcG1hY19hZGRfdGltZW91dCh1bnNpZ25lZCBsb25nICp0aW1lb3V0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMTE4LVx0XHRcdCBjb25zdCBzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtICplLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MTE5Olx0XHRcdCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0xMjAtXHRcdFx0IHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCwgaW50IG1vZGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MjA5PWJpdG1hcF9pcG1hY19rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTUtXHRzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAsIC5hZGRfbWFjID0gMSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjE2Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTIxNy1cdHUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0yNDI9Yml0bWFwX2lwbWFjX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0Ny1cdHN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjQ4Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjQ5LVx0dTMyIGlwID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTEyNz1iaXRtYXBfcG9ydF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzMy1cdHN0cnVjdCBiaXRtYXBfcG9ydF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjEzNDpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzNS1cdF9fYmUxNiBfX3BvcnQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0xNTM9Yml0bWFwX3BvcnRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNTgtXHRzdHJ1Y3QgYml0bWFwX3BvcnRfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoxNTk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTE2MC1cdHUzMiBwb3J0O1x0Lyogd3JhcGFyb3VuZCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDc9aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDg6XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwMT10eXBlZGVmIHZvaWQgKCpkZXN0cm95ZXIpKHN0cnVjdCBpcF9zZXQgKiwgdm9pZCAqKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDAzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQwNDpjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDA1LVx0W0lQU0VUX0VYVF9JRF9DT1VOVEVSXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDY4PWlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDY5Olx0XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQ3MC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYyMD1pcF9zZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYyMTpcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYyMi17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYzMT1pcF9zZXRfZ2V0X3NrYmluZm8oc3RydWN0IGlwX3NldF9za2JpbmZvICpza2JpbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYzMjpcdFx0ICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MzM6XHRcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjM0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjM4PWJvb2xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2Mzk6aXBfc2V0X21hdGNoX2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjY0MDpcdFx0XHRzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzLCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTY0MS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMzgtXHRzdHJ1Y3QgbXR5cGVfZWxlbSBkO1x0LyogRWxlbWVudCB2YWx1ZSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMzk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQ7XHQvKiBFeHRlbnNpb25zIGZvciBBREQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzQwOlx0c3RydWN0IGlwX3NldF9leHQgbWV4dDtcdC8qIFRhcmdldCBleHRlbnNpb25zIGZvciBBREQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQxLVx0dTMyIGZsYWdzO1x0XHQvKiBGbGFncyBmb3IgQUREICovXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NDE6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MjpcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0My1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0NDptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQ1Olx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzQ2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTg4Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODk6XHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk5MC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTUxLVx0XHRtZW1jcHkoXHUwMDI2eC1cdTAwM2VkLCB2YWx1ZSwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNTI6XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWV4dCwgZXh0LCBzaXplb2Yoc3RydWN0IGlwX3NldF9leHQpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE1MzpcdFx0bWVtY3B5KFx1MDAyNngtXHUwMDNlbWV4dCwgbWV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNTQtXHRcdHgtXHUwMDNlZmxhZ3MgPSBmbGFncztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzg9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTc5Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTgwOlx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTgxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEyODY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjg3Om10eXBlX2RhdGFfbWF0Y2goc3RydWN0IG10eXBlX2VsZW0gKmRhdGEsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyODg6XHRcdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgc3RydWN0IGlwX3NldCAqc2V0LCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEyODkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTMwMT1tdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzMDI6XHRcdCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzAzOlx0XHQgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTMwNC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzg2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTM4NzptdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzODg6XHQgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzg5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9ODA9aGFzaF9pcDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTg2LVx0c3RydWN0IGhhc2hfaXA0X2VsZW0gZSA9IHsgMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjg3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy04OC1cdF9fYmUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MTAwPWhhc2hfaXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDUtXHRzdHJ1Y3QgaGFzaF9pcDRfZWxlbSBlID0geyAwIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MTA2Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTEwNy1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMCwgaG9zdHMsIGkgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMTY9aGFzaF9pcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyMi1cdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMjM6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyNC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjM0PWhhc2hfaXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMzktXHRzdHJ1Y3QgaGFzaF9pcDZfZWxlbSBlID0geyB7IC5hbGwgPSB7IDAgfSB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjQwOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTI0MS1cdGludCByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTg1PWhhc2hfaXBtYWM0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy05MC1cdHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtIGUgPSB7IC5pcCA9IDAsIHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo5MTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTItXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTExMT1oYXNoX2lwbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTE1LVx0c3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gZSA9IHsgLmlwID0gMCwgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjExNjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xMTctXHRpbnQgcmV0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0xOTg9aGFzaF9pcG1hYzZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTIwNi1cdH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MjA3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTIyNz1oYXNoX2lwbWFjNl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjM0LVx0fTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoyMzU6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjM2LVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTgwPWhhc2hfaXBtYXJrNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVx0c3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjg3Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtODgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDItXHRzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MTAzOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDQtXHR1MzIgaXAsIGlwX3RvID0gMCwgaSA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMTk9aGFzaF9pcG1hcms2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjI1LVx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjIyNjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTIzNj1oYXNoX2lwbWFyazZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDEtXHRzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjQyOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDMtXHRpbnQgcmV0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9OTE9aGFzaF9pcHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTYtXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo5NzpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTk4LVx0Y29uc3Qgc3RydWN0IE1UWVBFICpoID0gc2V0LVx1MDAzZWRhdGE7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0xMTI9aGFzaF9pcHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE3LVx0c3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MTE4Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTktXHR1MzIgaXAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG8sIGkgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjY0PWhhc2hfaXBwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2OS1cdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI3MDpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI3MS1cdGNvbnN0IHN0cnVjdCBNVFlQRSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9Mjg2PWhhc2hfaXBwb3J0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5MS1cdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI5MjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjkzLVx0dTMyIHBvcnQsIHBvcnRfdG87XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTkwPWhhc2hfaXBwb3J0aXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzo5NjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtOTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTEwOD1oYXNoX2lwcG9ydGlwNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMTEzLVx0c3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjExNDpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTUtXHR1MzIgaXAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG8sIGkgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNjM9aGFzaF9pcHBvcnRpcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI2OC1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtIGUgPSB7IC5pcCA9IHsgLmFsbCA9IHsgMCB9IH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoyNjk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI3MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjgxPWhhc2hfaXBwb3J0aXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yODYtXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBlID0geyAgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NzpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yODgtXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEzND1oYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNDItXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxNDM6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNDQtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xNjA9aGFzaF9pcHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTY1LVx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIC0gMSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxNjY6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2Ny1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG87XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zOTQ9aGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDAyLVx0fTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDAzOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDA0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9NDIwPWhhc2hfaXBwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQyNS1cdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6NDI2Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00MjctXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTczPWhhc2hfbWFjNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTc4LVx0c3RydWN0IGhhc2hfbWFjNF9lbGVtIGUgPSB7IHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6Nzk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy04MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTk2PWhhc2hfbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTEwMC1cdHN0cnVjdCBoYXNoX21hYzRfZWxlbSBlID0geyB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjEwMTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtMTAyLVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTExMz1oYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMjEtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMjI6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMjMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzY9aGFzaF9uZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQxLVx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjE0MjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQzLVx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBpID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI4Nz1oYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yOTUtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyOTY6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yOTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE0LVx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjMxNTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE2LVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNjUtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjE2NjpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTY3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xOTc9aGFzaF9uZXRpZmFjZTRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMi1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLLCAuZWxlbSA9IDEgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoyMDM6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMjA0LVx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBpID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9Mzc3PWhhc2hfbmV0aWZhY2U2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zODYtXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4NzpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzg4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz00MTY9aGFzaF9uZXRpZmFjZTZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQyMC1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLLCAuZWxlbSA9IDEgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzo0MjE6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtNDIyLVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTE0Mz1oYXNoX25ldG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDktXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTUwOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTUxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTY4PWhhc2hfbmV0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3My1cdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxNzQ6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3NS1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM4ND1oYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zOTAtXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzkxOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzkyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9NDE0PWhhc2hfbmV0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxOC1cdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzo0MTk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQyMC1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMjk9aGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMzctXHR9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTM4Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xNTQ9aGFzaF9uZXRwb3J0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xNTktXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIC0gMSB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTYwOlx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTYxLVx0dTMyIHBvcnQsIHBvcnRfdG8sIHAgPSAwLCBpcCA9IDAsIGlwX3RvID0gMCwgaSA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzQ5PWhhc2hfbmV0cG9ydDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzU3LVx0fTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM1ODpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNTktXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9Mzc0PWhhc2hfbmV0cG9ydDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzc5LVx0c3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAgLSAxIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozODA6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zODEtXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xNTA9aGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNTYtXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxNTc6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE4OT1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5NC1cdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE5NTpcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5Ni1cdHUzMiBpcCA9IDAsIGlwX3RvID0gMCwgcCA9IDAsIHBvcnQsIHBvcnRfdG87XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDQ3PWhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDUzLVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDU0Olx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ1NS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz00NzY9aGFzaF9uZXRwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00ODEtXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0ODI6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00ODMtXHR1MzIgcG9ydCwgcG9ydF90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTQ5PWxpc3Rfc2V0X2t0ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTAtXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1MTpcdCAgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTIte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01My1cdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU0Olx0c3RydWN0IGlwX3NldF9leHQgKm1leHQgPSBcdTAwMjZvcHQtXHUwMDNlZXh0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NS1cdHN0cnVjdCBzZXRfZWxlbSAqZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTc0PWxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy03NS1cdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NzY6XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNzcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9OTQ9bGlzdF9zZXRfa2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTk1LVx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo5NjpcdCAgICAgIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy05Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xMTQ9bGlzdF9zZXRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMTcte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxMTg6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMTktXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE4ND1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjE4NTpsaXN0X3NldF91dGVzdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxODY6XHQgICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIyMD1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMjE6bGlzdF9zZXRfaW5pdF9leHRlbnNpb25zKHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjIyLVx0XHRcdCBzdHJ1Y3Qgc2V0X2VsZW0gKmUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzY6bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzc6XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzIwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzIxOmxpc3Rfc2V0X3VkZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzIyOlx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzIzLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTM1Mz1saXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM1OC1cdHN0cnVjdCBzZXRfYWR0X2VsZW0gZSA9IHsgLnJlZmlkID0gSVBTRVRfSU5WQUxJRF9JRCB9O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTk6XHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM2MC1cdHN0cnVjdCBpcF9zZXQgKnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6ZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgSVBfU0VUX0lOSVRfS0VYVGAgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgQzk5IHN5bnRheC4gV2UmIzM5O3JlIGRpcmVjdGx5IHNldHRpbmcgYC5ieXRlc2AsIGAucGFja2V0c2AsIGAudGFyZ2V0YCwgYW5kIGAudGltZW91dGAgd2l0aGluIHRoZSBzdHJ1Y3QuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYnkgZXhwbGljaXRseSBzZXR0aW5nIHRob3NlIGZpZWxkcywgQzk5IGd1YXJhbnRlZXMgdGhhdCBhbnkgdW5tZW50aW9uZWQgZmllbGRzIHdpbGwgYmUgaW1wbGljaXRseSB6ZXJvZWQgb3V0LiBTbywgd2hpbGUgd2UgYXJlbiYjMzk7dCBzZWVpbmcgaXQgZGlyZWN0bHksIHRoZSBgZXh0LmNvbW1lbnQgPSBOVUxMYCBwYXJ0IGlzIGVmZmVjdGl2ZWx5IGltcGxpZWQuIFRoaXMgZGVzaWduYXRlZCBpbml0aWFsaXphdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB3ZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkgbGVhdmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhcm91bmQuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBgSVBfU0VUX0lOSVRfVUVYVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBtYWNybyBhY3R1YWxseSBleHBhbmRzIHRvLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgaW5pdGlhbGl6ZXIgaXMgY29uc3RydWN0ZWQuIEkgd2lsbCBleGFtaW5lIGl0LCB0byB1bmRlcnN0YW5kIGlmIGl0IHRvbyB1c2VzIGRlc2lnbmF0ZWQgaW5pdGlhbGl6YXRpb24gYW5kIHplcm8tZmlsbHMgdGhlIHJlbWFpbmluZyBtZW1vcnksIG9yIGlmIGl0IGV4cGxpY2l0bHkgc3BlY2lmaWVzIGV2ZXJ5IGZpZWxkIGluIHRoZSBzdHJ1Y3QsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgYXJlIGhhbmRsaW5nIG1lbW9yeSBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfU0VUX0lOSVRfVUVYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTUyMz1uZl9pbmV0X2FkZHJfbWFza19pbnBsYWNlKHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTM1LVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTM2OiNkZWZpbmUgSVBfU0VUX0lOSVRfVUVYVChzZXQpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTM3LVx0eyAuYnl0ZXMgPSBVTExPTkdfTUFYLCAucGFja2V0cyA9IFVMTE9OR19NQVgsXHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU2MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpcF9zZXQuaGAgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBpcF9zZXQuaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNTM2LiBJIGtub3cgdGhpcyBmaWxlIHByZXR0eSB3ZWxsLCBzbyBob3BlZnVsbHksIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHdoYXRldmVyIHNlY3Rpb24gaXMgcmVsZXZhbnQuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIHNvbWV0aGluZyByZWxhdGl2ZWx5IGltcG9ydGFudCwgb3IgZWxzZSBJIHdvdWxkbiYjMzk7dCBoYXZlIHNpbmdsZWQgb3V0IGEgc3BlY2lmaWMgbGluZSBudW1iZXIgbGlrZSB0aGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0fVxuIDUzMTpcdFxuIDUzMjpcdCNkZWZpbmUgSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KVx0XHRcdFxcXG4gNTMzOlx0XHR7IC5ieXRlcyA9IChza2IpLVx1MDAzZWxlbiwgLnBhY2tldHMgPSAxLCAudGFyZ2V0ID0gdHJ1ZSxcXFxuIDUzNDpcdFx0ICAudGltZW91dCA9IGlwX3NldF9hZHRfb3B0X3RpbWVvdXQob3B0LCBzZXQpIH1cbiA1MzU6XHRcbiA1MzY6XHQjZGVmaW5lIElQX1NFVF9JTklUX1VFWFQoc2V0KVx0XHRcdFx0XFxcbiA1Mzc6XHRcdHsgLmJ5dGVzID0gVUxMT05HX01BWCwgLnBhY2tldHMgPSBVTExPTkdfTUFYLFx0XFxcbiA1Mzg6XHRcdCAgLnRpbWVvdXQgPSAoc2V0KS1cdTAwM2V0aW1lb3V0IH1cbiA1Mzk6XHRcbiA1NDA6XHQjZGVmaW5lIElQU0VUX0NPTkNBVChhLCBiKVx0XHRhIyNiXG4gNTQxOlx0I2RlZmluZSBJUFNFVF9UT0tFTihhLCBiKVx0XHRJUFNFVF9DT05DQVQoYSwgYilcbiA1NDI6XHRcbiA1NDM6XHQjZW5kaWYgLypfSVBfU0VUX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMDkKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogMTEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogUHJldmVudGluZyBDb21tZW50IENvcnJ1cHRpb24gaW4gQml0bWFwIFNldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgSVBfU0VUX0lOSVRfVUVYVGAgaW5pdGlhbGl6ZXIgdXNlcyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgbWVhbmluZyBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLCBsaWtlIGB0YXJnZXRgLCB3aWxsIGJlIHplcm9lZC4gU28sIGJ5IGRlZmF1bHQsIGBleHQtJmd0O3RhcmdldGAgaXMgYGZhbHNlYCB3aGVuIGluaXRpYWxpemVkIHRoaXMgd2F5LgoKTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYCZhbXA7JmFtcDsgIWV4dC0mZ3Q7dGFyZ2V0YCB0byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBtdHlwZV9hZGRgIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGA6CgpgYGBkaWZmCglpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpICZhbXA7JmFtcDsgIWV4dC0mZ3Q7dGFyZ2V0KQoJCWlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpOwpgYGAKCkJlZm9yZSB0aGlzIHBhdGNoLCB3aGVuIGEgcGFja2V0IHRyaWdnZXJlZCBhbiBgSVBTRVRfQUREYCB2aWEgdGhlIG5ldGZpbHRlciBrZXJuZWwgdGFyZ2V0IChgZXh0LSZndDt0YXJnZXQgPT0gdHJ1ZWApLCB0aGUgY29kZSB3b3VsZCBleGVjdXRlIGBpcF9zZXRfaW5pdF9jb21tZW50YCByZWdhcmRsZXNzLCBldmVuIHdoZW4gYGV4dC0mZ3Q7Y29tbWVudGAgd2FzIGBOVUxMYCBmb3Iga2VybmVsLWFkZGVkIHRhcmdldHMgKGthZHQpLiBUaGlzIG1lYW50IHRoYXQgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdvdWxkIGluYWR2ZXJ0ZW50bHkgZnJlZSBhbnkgKmV4aXN0aW5nKiBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCwgYmVjYXVzZSBgbGVuYCB3aWxsIGJlIHplcm8uIFRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgYGlwX3NldF9pbml0X2NvbW1lbnRgIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gdXNlci1zcGFjZSBhZGRzICh1YWRkKSB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24sIGFuZCBrYWR0IHRhcmdldHMgc2hvdWxkbiYjMzk7dCBiZSB0b3VjaGluZyBjb21tZW50cyBhdCBhbGwuIFRoZSBlcXVpdmFsZW50IGxvZ2ljIGhhZCBhbHJlYWR5IGJlZW4gaW1wbGVtZW50ZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgYnJpbmdpbmcgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGludG8gYWxpZ25tZW50IHdpdGggdGhhdCBleGlzdGluZywgY29ycmVjdCBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIGFzc2VzcyB0aGUgcGF0Y2ggZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIE5vLiBUaGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgY29uZGl0aW9uLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBOby4gVGhlIGBleHQtJmd0O3RhcmdldGAgZmllbGQgaXMgYSBgYm9vbGAgaW4gYHN0cnVjdCBpcF9zZXRfZXh0YC4gSXQmIzM5O3MgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBieSBgSVBfU0VUX0lOSVRfS0VYVGAgKHNldHRpbmcgaXQgdG8gYHRydWVgKSBvciBgSVBfU0VUX0lOSVRfVUVYVGAgKHdoZXJlIGl0IGRlZmF1bHRzIHRvIGBmYWxzZWApLgozLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBOby4gVGhlIHBhdGNoIHNraXBzIGFuIGluaXRpYWxpemF0aW9uIGNhbGw7IGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBvbmUuCjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIE5vLgoKU28sIGluIHN1bW1hcnk6CgoqICAgVGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgSXQgKmRvZXMqIGZpeCBhIGxvZ2ljIGJ1Zy9tZW1vcnkgbGVhay91bmludGVuZGVkIGRlbGV0aW9uIHRoYXQgd2FzIHByZXNlbnQgd2hlcmUga2VybmVsIHRhcmdldCBpbnZvY2F0aW9ucyBjb3VsZCBkZWxldGUgZXhpc3RpbmcgZWxlbWVudCBjb21tZW50cy4KClRoZXJlZm9yZSwgS01TQU4gaXMgKm5vdCogbmVlZGVkIGhlcmUuIFN0YW5kYXJkIEtBU0FOIGFuZCB1bml0IHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBjcmVhdGVkIG9yIGV4cG9zZWQuCiogICBgTmVlZHNLTVNBTmA6IGBmYWxzZWAKKiAgIFJlYXNvbjogQ2xlYXIgY29udHJhc3QgYmV0d2VlbiBLQVNBTi9nZW5lcmljIHRlc3RpbmcgYW5kIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBtdHlwZV9hZGQoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gY2hlY2sgYCFleHQtXHUwMDNldGFyZ2V0YCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2luaXRfY29tbWVudCgpYCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBhdHRlcm4gaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwcmV2ZW50cyBrZXJuZWwgaXB0YWJsZXMgU0VUIHRhcmdldCBhY3Rpb25zIGZyb20gY2xlYXJpbmcvbW9kaWZ5aW5nIGVsZW1lbnQgY29tbWVudHMuXG5cbi0gQWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGlwX3NldF9leHRgIGFyZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYElQX1NFVF9JTklUX0tFWFRgIG9yIGBJUF9TRVRfSU5JVF9VRVhUYCksIHdoaWNoIGZ1bGx5IHplcm8gYWxsIHVubWVudGlvbmVkIGZpZWxkcywgZW5zdXJpbmcgYGV4dC1cdTAwM2V0YXJnZXRgIGFuZCBhbGwgb3RoZXIgZmllbGRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIG5ldmVyIHVuaW5pdGlhbGl6ZWQuXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVGhlIGJ1ZyBmaXhlZCBpcyBhIGxvZ2ljIGlzc3VlICh1bmludGVuZGVkIGNvbW1lbnQgZGVsZXRpb24gZHVyaW5nIGtlcm5lbC1zcGFjZSBwYWNrZXQgbWF0Y2hpbmcvdGFyZ2V0IGV4ZWN1dGlvbikuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYG10eXBlX2FkZCgpYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCB0byBjaGVjayBgIWV4dC1cdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cblxuLSBBbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYXJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgSVBfU0VUX0lOSVRfS0VYVGAgb3IgYElQX1NFVF9JTklUX1VFWFRgKSwgd2hpY2ggZnVsbHkgemVybyBhbGwgdW5tZW50aW9uZWQgZmllbGRzLCBlbnN1cmluZyBgZXh0LVx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlIGVtaXNzaW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBUaGUgYnVnIGZpeGVkIGlzIGEgbG9naWMgaXNzdWUgKHVuaW50ZW5kZWQgY29tbWVudCBkZWxldGlvbiBkdXJpbmcga2VybmVsLXNwYWNlIHBhY2tldCBtYXRjaGluZy90YXJnZXQgZXhlY3V0aW9uKS5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjoyMS4zMTc3Mjk1ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY4MTg1OTIxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpdG1hcF9pcF9hZGRcIixcbiAgICBcImJpdG1hcF9pcG1hY19hZGRcIixcbiAgICBcImJpdG1hcF9wb3J0X2FkZFwiLFxuICAgIFwiYml0bWFwX2lwX2thZHRcIixcbiAgICBcImJpdG1hcF9pcG1hY19rYWR0XCIsXG4gICAgXCJiaXRtYXBfcG9ydF9rYWR0XCIsXG4gICAgXCJiaXRtYXBfaXBfdWFkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX3VhZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X3VhZHRcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYG10eXBlX2FkZCgpYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCB0byBjaGVjayBgIWV4dC1cXHUwMDNldGFyZ2V0YCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2luaXRfY29tbWVudCgpYCwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIHBhdHRlcm4gaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhpcyBwcmV2ZW50cyBrZXJuZWwgaXB0YWJsZXMgU0VUIHRhcmdldCBhY3Rpb25zIGZyb20gY2xlYXJpbmcvbW9kaWZ5aW5nIGVsZW1lbnQgY29tbWVudHMuXFxuXFxuLSBBbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgaXBfc2V0X2V4dGAgYXJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgSVBfU0VUX0lOSVRfS0VYVGAgb3IgYElQX1NFVF9JTklUX1VFWFRgKSwgd2hpY2ggZnVsbHkgemVybyBhbGwgdW5tZW50aW9uZWQgZmllbGRzLCBlbnN1cmluZyBgZXh0LVxcdTAwM2V0YXJnZXRgIGFuZCBhbGwgb3RoZXIgZmllbGRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kIG5ldmVyIHVuaW5pdGlhbGl6ZWQuXFxuLSBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgbmV0bGluayBhdHRyaWJ1dGUgZW1pc3Npb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBUaGUgYnVnIGZpeGVkIGlzIGEgbG9naWMgaXNzdWUgKHVuaW50ZW5kZWQgY29tbWVudCBkZWxldGlvbiBkdXJpbmcga2VybmVsLXNwYWNlIHBhY2tldCBtYXRjaGluZy90YXJnZXQgZXhlY3V0aW9uKS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbXR5cGVfYWRkKCkgaW4gbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIHRvIGF2b2lkIGNhbGxpbmcgaXBfc2V0X2luaXRfY29tbWVudCgpIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIHZpYSBrZXJuZWwtc2lkZSBuZXRmaWx0ZXIgcGFja2V0IHBhdGhzICh3aGVyZSBleHQtXFx1MDAzZXRhcmdldCBpcyB0cnVlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgaXBzZXQgYml0bWFwIHR5cGVzIChiaXRtYXA6aXAsIGJpdG1hcDppcCxtYWMsIGJpdG1hcDpwb3J0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgZXh0ZW5zaW9uIGhhbmRsaW5nIGFuZCBjb21tZW50IGxpZmVjeWNsZSByZW1haW4gc291bmQgYWNyb3NzIHVzZXJzcGFjZSBuZXRsaW5rIGFuZCBwYWNrZXQtcHJvY2Vzc2luZyBleGVjdXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjIxLjMxNzczNjA2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4NTI1MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmU3MDllYmM5MjU1Yjk5YmQ5M2FlOTNiYjk2M2IxYmIxMDg5MDBhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjIyOjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxcbmluZGV4IGQ2YTdlNjYwNDU0MjIuLmFlMzc2ZmEzZTdhM2IgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXFxuQEAgLTE1OSw3ICsxNTksNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFxuIFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoeCwgc2V0KSwgZXh0KTtcXG4tXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcXG4rXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcXHUwMDI2XFx1MDAyNiAhZXh0LVxcdTAwM2V0YXJnZXQpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbiBcXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcbiBcXHRcXHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKHgsIHNldCksIGV4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjIxLjg2Njk2MDgxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzEzOTExMjUxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpdG1hcF9pcF9hZGRcIixcbiAgICBcImJpdG1hcF9pcG1hY19hZGRcIixcbiAgICBcImJpdG1hcF9wb3J0X2FkZFwiLFxuICAgIFwiYml0bWFwX2lwX2thZHRcIixcbiAgICBcImJpdG1hcF9pcG1hY19rYWR0XCIsXG4gICAgXCJiaXRtYXBfcG9ydF9rYWR0XCIsXG4gICAgXCJiaXRtYXBfaXBfdWFkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX3VhZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X3VhZHRcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdHlwZV9hZGQoKSBpbiBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggdG8gYXZvaWQgY2FsbGluZyBpcF9zZXRfaW5pdF9jb21tZW50KCkgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgdmlhIGtlcm5lbC1zaWRlIG5ldGZpbHRlciBwYWNrZXQgcGF0aHMgKHdoZXJlIGV4dC1cXHUwMDNldGFyZ2V0IGlzIHRydWUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciBpcHNldCBiaXRtYXAgdHlwZXMgKGJpdG1hcDppcCwgYml0bWFwOmlwLG1hYywgYml0bWFwOnBvcnQpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBleHRlbnNpb24gaGFuZGxpbmcgYW5kIGNvbW1lbnQgbGlmZWN5Y2xlIHJlbWFpbiBzb3VuZCBhY3Jvc3MgdXNlcnNwYWNlIG5ldGxpbmsgYW5kIHBhY2tldC1wcm9jZXNzaW5nIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTcwOWViYzkyNTViOTliZDkzYWU5M2JiOTYzYjFiYjEwODkwMGE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNToyMjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggZDZhN2U2NjA0NTQyMi4uYWUzNzZmYTNlN2EzYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtMTU5LDcgKzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFxuIFx0aWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSlcbiBcdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpO1xuLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbitcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiBcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjIxLjg2Njk2MjU0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTk2NzMzNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaXBfc2V0X2JpdG1hcF9nZW4uaCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgcGF0Y2guIExvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgc29tZXRoaW5nIHdpdGhpbiB0aGUgYGlwX3NldF9iaXRtYXBfZ2VuLmhgIGhlYWRlciBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBleHRlbnNpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYGlwc2V0YCBmcmFtZXdvcmsuIFRoZSBkaWZmIHNob3dzIGEgY29uZGl0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gY29tbWVudHMuIFRoZSBvcmlnaW5hbCBjb2RlIGluY2x1ZGVkIGEgY29tbWVudCBpbml0aWFsaXphdGlvbiBpZiBgU0VUX1dJVEhfQ09NTUVOVChzZXQpYCB3YXMgdHJ1ZS4gVGhlIG1vZGlmaWVkIGNvZGUgaW50cm9kdWNlcyBhbiBhZGRpdGlvbmFsIGNoZWNrOiBgIWV4dC1cdTAwM2V0YXJnZXRgLiBUaGF0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYyB1c2UtY2FzZSBpcyBiZWluZyBhZGRyZXNzZWQgb3IgYSBidWcgaXMgYmVpbmcgZml4ZWQgcmVsYXRlZCB0byBob3cgY29tbWVudHMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGB0YXJnZXRgIGV4dGVuc2lvbiBmaWVsZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgcmVsYXRlZCB0byBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvbW1lbnQgZmllbGQsIGFuZCBhIHRhcmdldCBmaWVsZC5cblxuTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgYmlnZ2VyIGNvbnRleHQuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGRlZXBlci4gSSdsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGlzIGhlYWRlciBpcyBpbmNsdWRlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW5jbHVzaW9uIHBvaW50cyBvZiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIGxvb2sgYXQgaXRzIGRlcGVuZGVuY2llcywgZmluZCBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXRzIG9wZXJhdGlvbiwgYW5kIHplcm8gaW4gb24gYW55IGtleSBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgdGhlIGZvY3VzIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYFNFVF9XSVRIX0NPTU1FTlRgLCBgZXh0LVx1MDAzZXRhcmdldGAsIGFuZCBgaXBfc2V0X2luaXRfY29tbWVudGAgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLCB3aGljaCBpcyBwcm9iYWJseSB3aGVyZSB0aGlzIGNoYW5nZSBiZWNvbWVzIGltcG9ydGFudC4gSSdsbCBiZSBsb29raW5nIGZvciByZWxhdGVkIGNvZGUuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBpbmZlciB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBhbmQgYXNzZXNzIGl0cyBpbXBhY3QgbW9yZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjMyLjQ2MzY5ODgyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI0MDMzMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9iaXRtYXBfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MjA4PXN0cnVjdCBiaXRtYXBfaXBfZWxlbSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0yMTAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MjExOiNpbmNsdWRlIFxcXCJpcF9zZXRfYml0bWFwX2dlbi5oXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTIxMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTI4Mj1iaXRtYXBfaXBtYWNfc2FtZV9zZXQoY29uc3Qgc3RydWN0IGlwX3NldCAqYSwgY29uc3Qgc3RydWN0IGlwX3NldCAqYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI5NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyOTU6I2luY2x1ZGUgXFxcImlwX3NldF9iaXRtYXBfZ2VuLmhcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjk2LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0yMjM9c3RydWN0IGJpdG1hcF9wb3J0X2VsZW0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yMjUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoyMjY6I2luY2x1ZGUgXFxcImlwX3NldF9iaXRtYXBfZ2VuLmhcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjM1LjA4NzczNzk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1MTY1NjgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQml0bWFwIEdlbmVyYXRpb24gaW4gYGlwc2V0YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaGVhZGVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTU5LiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoIHRoZSBjb3JlIGJpdG1hcCBsb2dpYyBhbmQgZ2VuZXJhdGlvbiB3aXRoaW4gdGhlIGBpcHNldGAgZnJhbWV3b3JrLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSB3aGVyZSB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYW5pcHVsYXRpb24gb2YgdGhlIGJpdG1hcHMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBmb3IgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIGNvZGUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGJpdCB2ZWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIGFueSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9ucy4gVGhpcyBjb3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIGhvdyB0aGV5IGhhbmRsZSBhbGlnbm1lbnQsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIHNwZWNpZmljIGJpdHdpc2Ugb3BlcmF0aW9ucyB1c2VkIGZvciBzZXQvY2xlYXIgYW5kIGxvb2t1cCBvcGVyYXRpb25zLiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGFueSBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIHBvaW50cyB0aGVyZSwgZ2l2ZW4gaXQncyBzaGFyZWQgc3RhdGUuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgdHJhbnNsYXRlcyB0byByZWFsIHdvcmxkIHRocm91Z2hwdXQgdW5kZXIgaGVhdnkgbG9hZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb2Ygbm92ZWwgYWxnb3JpdGhtcyBvciBjbGV2ZXIgdXNlcyBvZiBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6MzcuOTM5Mzk2ODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdCAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KHgsIHNldCkpKSB7XFxuIDE0MTpcXHRcXHRcXHRcXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDM6XFx0XFx0XFx0fSBlbHNlIGlmICghKGZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19FWElTVCkpIHtcXG4gMTQ0OlxcdFxcdFxcdFxcdHNldF9iaXQoZS1cXHUwMDNlaWQsIG1hcC1cXHUwMDNlbWVtYmVycyk7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9FWElTVDtcXG4gMTQ2OlxcdFxcdFxcdH1cXG4gMTQ3OlxcdFxcdFxcdC8qIEVsZW1lbnQgaXMgcmUtYWRkZWQsIGNsZWFudXAgZXh0ZW5zaW9ucyAqL1xcbiAxNDg6XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gMTUxOlxcdFxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMtLTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gMTU0OlxcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxuIDE1NTpcXHRcXHRcXHRtdHlwZV9hZGRfdGltZW91dChleHRfdGltZW91dCh4LCBzZXQpLCBlLCBleHQsIHNldCwgbWFwLCByZXQpO1xcbiAxNTY6XFx0I2Vsc2VcXG4gMTU3OlxcdFxcdFxcdGlwX3NldF90aW1lb3V0X3NldChleHRfdGltZW91dCh4LCBzZXQpLCBleHQtXFx1MDAzZXRpbWVvdXQpO1xcbiAxNTg6XFx0I2VuZGlmXFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIDE2MTpcXHRcXHRcXHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7XFxuIDE2MjpcXHRcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG4gMTYzOlxcdFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbiAxNjQ6XFx0XFx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcXG4gMTY1OlxcdFxcdFxcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogQWN0aXZhdGUgZWxlbWVudCAqL1xcbiAxNjg6XFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIDE2OTpcXHRcXHRzZXRfYml0KGUtXFx1MDAzZWlkLCBtYXAtXFx1MDAzZW1lbWJlcnMpO1xcbiAxNzA6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cysrO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRyZXR1cm4gMDtcXG4gMTczOlxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0c3RhdGljIGludFxcbiAxNzY6XFx0bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIDE3NzpcXHRcXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gMTgwOlxcdFxcdGNvbnN0IHN0cnVjdCBtdHlwZV9hZHRfZWxlbSAqZSA9IHZhbHVlO1xcbiAxODE6XFx0XFx0dm9pZCAqeCA9IGdldF9leHQoc2V0LCBtYXAsIGUtXFx1MDAzZWlkKTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKG10eXBlX2RvX2RlbChlLCBtYXApKVxcbiAxODQ6XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xcbiAxODc6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cy0tO1xcbiAxODg6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSBcXHUwMDI2XFx1MDAyNlxcbiAxODk6XFx0XFx0ICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQoeCwgc2V0KSkpXFxuIDE5MDpcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9FWElTVDtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0cmV0dXJuIDA7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdCNpZm5kZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbiAxOTY6XFx0c3RhdGljIGJvb2xcXG4gMTk3OlxcdG10eXBlX2lzX2ZpbGxlZChjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqeClcXG4gMTk4OlxcdHtcXG4gMTk5OlxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjozNy45Mzk0NzUxMjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTU3NTAwMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgSVAgU2V0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGJpdG1hcCBJUCBzZXRzIGZ1bmN0aW9uIHVuZGVyIHRoZSBob29kLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gdGhlIHN5bWJvbCBnZW5lcmF0aW9uIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlmZmVyZW50IHNldCB0eXBlcy4gTXkgZmlyc3Qgc3RvcCB3aWxsIGJlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCB0byBzZWUgZXhhY3RseSB3aGF0IGBtdHlwZV9hZGRgIGlzIGRvaW5nIGFuZCBob3cgdGhlIGBtdHlwZWAgbWFjcm8gZ2VuZXJhdGVzIHRoZSBzeW1ib2xzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYml0bWFwIGltcGxlbWVudGF0aW9ucyBmb3IgYGJpdG1hcDppcGAsIGBiaXRtYXA6aXAsbWFjYCwgYW5kIGBiaXRtYXA6cG9ydGAgYXJlIGhhbmRsZWQg4oCTIHRoZSBjb3JlIG1lY2hhbmljcyBvZiBob3cgdGhlIGJpdHMgYXJlIG1hbmFnZWQuIFRoZW4sIEknbGwgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBleGFtaW5pbmcgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCB0byBzZWUgdGhlIG51YW5jZXMgYW5kIGRpZmZlcmVuY2VzIGluIGhvdyB0aGVzZSB2YXJpb3VzIHNldCB0eXBlcyBhY3R1YWxseSBzdG9yZSBhbmQgbWFuaXB1bGF0ZSB0aGUgZGF0YS4gSSdtIGV4cGVjdGluZyB0byBzZWUgaW50ZXJlc3RpbmcgdmFyaWF0aW9ucyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NDAuODk2OTc3MzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHQgICAgICAgeC1cXHUwMDNlbGFzdF9pcCA9PSB5LVxcdTAwM2VsYXN0X2lwIFxcdTAwMjZcXHUwMDI2XFxuIDIwMTpcXHRcXHQgICAgICAgeC1cXHUwMDNlbmV0bWFzayA9PSB5LVxcdTAwM2VuZXRtYXNrIFxcdTAwMjZcXHUwMDI2XFxuIDIwMjpcXHRcXHQgICAgICAgYS1cXHUwMDNldGltZW91dCA9PSBiLVxcdTAwM2V0aW1lb3V0IFxcdTAwMjZcXHUwMDI2XFxuIDIwMzpcXHRcXHQgICAgICAgYS1cXHUwMDNlZXh0ZW5zaW9ucyA9PSBiLVxcdTAwM2VleHRlbnNpb25zO1xcbiAyMDQ6XFx0fVxcbiAyMDU6XFx0XFxuIDIwNjpcXHQvKiBQbGFpbiB2YXJpYW50ICovXFxuIDIwNzpcXHRcXG4gMjA4OlxcdHN0cnVjdCBiaXRtYXBfaXBfZWxlbSB7XFxuIDIwOTpcXHR9O1xcbiAyMTA6XFx0XFxuIDIxMTpcXHQjaW5jbHVkZSBcXFwiaXBfc2V0X2JpdG1hcF9nZW4uaFxcXCJcXG4gMjEyOlxcdFxcbiAyMTM6XFx0LyogQ3JlYXRlIGJpdG1hcDppcCB0eXBlIG9mIHNldHMgKi9cXG4gMjE0OlxcdFxcbiAyMTU6XFx0c3RhdGljIGJvb2xcXG4gMjE2OlxcdGluaXRfbWFwX2lwKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGJpdG1hcF9pcCAqbWFwLFxcbiAyMTc6XFx0XFx0ICAgIHUzMiBmaXJzdF9pcCwgdTMyIGxhc3RfaXAsXFxuIDIxODpcXHRcXHQgICAgdTMyIGVsZW1lbnRzLCB1MzIgaG9zdHMsIHU4IG5ldG1hc2spXFxuIDIxOTpcXHR7XFxuIDIyMDpcXHRcXHRtYXAtXFx1MDAzZW1lbWJlcnMgPSBiaXRtYXBfemFsbG9jKGVsZW1lbnRzLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4gMjIxOlxcdFxcdGlmICghbWFwLVxcdTAwM2VtZW1iZXJzKVxcbiAyMjI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyMjM6XFx0XFx0bWFwLVxcdTAwM2VmaXJzdF9pcCA9IGZpcnN0X2lwO1xcbiAyMjQ6XFx0XFx0bWFwLVxcdTAwM2VsYXN0X2lwID0gbGFzdF9pcDtcXG4gMjI1OlxcdFxcdG1hcC1cXHUwMDNlZWxlbWVudHMgPSBlbGVtZW50cztcXG4gMjI2OlxcdFxcdG1hcC1cXHUwMDNlaG9zdHMgPSBob3N0cztcXG4gMjI3OlxcdFxcdG1hcC1cXHUwMDNlbmV0bWFzayA9IG5ldG1hc2s7XFxuIDIyODpcXHRcXHRzZXQtXFx1MDAzZXRpbWVvdXQgPSBJUFNFVF9OT19USU1FT1VUO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRtYXAtXFx1MDAzZXNldCA9IHNldDtcXG4gMjMxOlxcdFxcdHNldC1cXHUwMDNlZGF0YSA9IG1hcDtcXG4gMjMyOlxcdFxcdHNldC1cXHUwMDNlZmFtaWx5ID0gTkZQUk9UT19JUFY0O1xcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjM1OlxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0c3RhdGljIHUzMlxcbiAyMzg6XFx0cmFuZ2VfdG9fbWFzayh1MzIgZnJvbSwgdTMyIHRvLCB1OCAqYml0cylcXG4gMjM5OlxcdHtcXG4gMjQwOlxcdFxcdHUzMiBtYXNrID0gMHhGRkZGRkZGRTtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0KmJpdHMgPSAzMjtcXG4gMjQzOlxcdFxcdHdoaWxlICgtLSgqYml0cykgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IG1hc2sgXFx1MDAyNlxcdTAwMjYgKHRvIFxcdTAwMjYgbWFzaykgIT0gZnJvbSlcXG4gMjQ0OlxcdFxcdFxcdG1hc2sgXFx1MDAzY1xcdTAwM2M9IDE7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdHJldHVybiBtYXNrO1xcbiAyNDc6XFx0fVxcbiAyNDg6XFx0XFxuIDI0OTpcXHRzdGF0aWMgaW50XFxuIDI1MDpcXHRiaXRtYXBfaXBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiAyNTE6XFx0XFx0XFx0IHUzMiBmbGFncylcXG4gMjUyOlxcdHtcXG4gMjUzOlxcdFxcdHN0cnVjdCBiaXRtYXBfaXAgKm1hcDtcXG4gMjU0OlxcdFxcdHUzMiBmaXJzdF9pcCA9IDAsIGxhc3RfaXAgPSAwLCBob3N0cztcXG4gMjU1OlxcdFxcdHU2NCBlbGVtZW50cztcXG4gMjU2OlxcdFxcdHU4IG5ldG1hc2sgPSAzMjtcXG4gMjU3OlxcdFxcdGludCByZXQ7XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdGlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHxcXG4gMjYwOlxcdFxcdFxcdCAgICAgIWlwX3NldF9vcHRhdHRyX25ldG9yZGVyKHRiLCBJUFNFVF9BVFRSX1RJTUVPVVQpIHx8XFxuIDI2MTpcXHRcXHRcXHQgICAgICFpcF9zZXRfb3B0YXR0cl9uZXRvcmRlcih0YiwgSVBTRVRfQVRUUl9DQURUX0ZMQUdTKSkpXFxuIDI2MjpcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9QUk9UT0NPTDtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0cmV0ID0gaXBfc2V0X2dldF9ob3N0aXBhZGRyNCh0YltJUFNFVF9BVFRSX0lQXSwgXFx1MDAyNmZpcnN0X2lwKTtcXG4gMjY1OlxcdFxcdGlmIChyZXQpXFxuIDI2NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRpZiAodGJbSVBTRVRfQVRUUl9JUF9UT10pIHtcXG4gMjY5OlxcdFxcdFxcdHJldCA9IGlwX3NldF9nZXRfaG9zdGlwYWRkcjQodGJbSVBTRVRfQVRUUl9JUF9UT10sIFxcdTAwMjZsYXN0X2lwKTtcXG4gMjcwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDI3MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzI6XFx0XFx0XFx0aWYgKGZpcnN0X2lwIFxcdTAwM2UgbGFzdF9pcClcXG4gMjczOlxcdFxcdFxcdFxcdHN3YXAoZmlyc3RfaXAsIGxhc3RfaXApO1xcbiAyNzQ6XFx0XFx0fSBlbHNlIGlmICh0YltJUFNFVF9BVFRSX0NJRFJdKSB7XFxuIDI3NTpcXHRcXHRcXHR1OCBjaWRyID0gbmxhX2dldF91OCh0YltJUFNFVF9BVFRSX0NJRFJdKTtcXG4gMjc2OlxcdFxcbiAyNzc6XFx0XFx0XFx0aWYgKGNpZHIgXFx1MDAzZT0gSE9TVF9NQVNLKVxcbiAyNzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfSU5WQUxJRF9DSURSO1xcbiAyNzk6XFx0XFx0XFx0aXBfc2V0X21hc2tfZnJvbV90byhmaXJzdF9pcCwgbGFzdF9pcCwgY2lkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjQwLjg5NzA4NjUyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzI2MTUyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQml0bWFwIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBiaXRtYXAtYmFzZWQgSVAgc2V0IGltcGxlbWVudGF0aW9uIHdvcmtzLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbWFjcm8gZXhwYW5zaW9uIHByb2Nlc3MgdGhhdCdzIGdvaW5nIG9uIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAsIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhhdCBmaWxlLiBTZWVpbmcgaG93IHRoZSBtYWNyb3MgYXJlIGRlZmluZWQgd2lsbCBiZSBrZXkuIFRoZW4sIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhleSdyZSBiZWluZyAqdXNlZCosIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBpcF9zZXRfYml0bWFwX2lwLmNgIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlciBhbmQgd2hlcmUgdGhlIGV4cGFuc2lvbiBpcyBoYXBwZW5pbmcuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODM0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0Mi42Njk3MDUwNTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSAyMDEzIEpvenNlZiBLYWRsZWNzaWsgXFx1MDAzY2thZGxlY0BuZXRmaWx0ZXIub3JnXFx1MDAzZSAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaWZuZGVmIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSFxcbiAgIDU6XFx0I2RlZmluZSBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2RlZmluZSBtdHlwZV9kb190ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb190ZXN0KVxcbiAgMTA6XFx0I2RlZmluZSBtdHlwZV9nY190ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY190ZXN0KVxcbiAgMTE6XFx0I2RlZmluZSBtdHlwZV9pc19maWxsZWRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2lzX2ZpbGxlZClcXG4gIDEyOlxcdCNkZWZpbmUgbXR5cGVfZG9fYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb19hZGQpXFxuICAxMzpcXHQjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfY2xlYW51cClcXG4gIDE0OlxcdCNkZWZpbmUgbXR5cGVfZG9fZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb19kZWwpXFxuICAxNTpcXHQjZGVmaW5lIG10eXBlX2RvX2xpc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2xpc3QpXFxuICAxNjpcXHQjZGVmaW5lIG10eXBlX2RvX2hlYWRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2hlYWQpXFxuICAxNzpcXHQjZGVmaW5lIG10eXBlX2FkdF9lbGVtXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZHRfZWxlbSlcXG4gIDE4OlxcdCNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF90aW1lb3V0KVxcbiAgMTk6XFx0I2RlZmluZSBtdHlwZV9nY19pbml0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxcbiAgMjA6XFx0I2RlZmluZSBtdHlwZV9rYWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxcbiAgMjE6XFx0I2RlZmluZSBtdHlwZV91YWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KVxcbiAgMjI6XFx0I2RlZmluZSBtdHlwZV9kZXN0cm95XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZXN0cm95KVxcbiAgMjM6XFx0I2RlZmluZSBtdHlwZV9tZW1zaXplXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9tZW1zaXplKVxcbiAgMjQ6XFx0I2RlZmluZSBtdHlwZV9mbHVzaFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZmx1c2gpXFxuICAyNTpcXHQjZGVmaW5lIG10eXBlX2hlYWRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2hlYWQpXFxuICAyNjpcXHQjZGVmaW5lIG10eXBlX3NhbWVfc2V0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9zYW1lX3NldClcXG4gIDI3OlxcdCNkZWZpbmUgbXR5cGVfZWxlbVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZWxlbSlcXG4gIDI4OlxcdCNkZWZpbmUgbXR5cGVfdGVzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcXG4gIDI5OlxcdCNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxuICAzMDpcXHQjZGVmaW5lIG10eXBlX2RlbFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxcbiAgMzE6XFx0I2RlZmluZSBtdHlwZV9saXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9saXN0KVxcbiAgMzI6XFx0I2RlZmluZSBtdHlwZV9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2MpXFxuICAzMzpcXHQjZGVmaW5lIG10eXBlX2NhbmNlbF9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfY2FuY2VsX2djKVxcbiAgMzQ6XFx0I2RlZmluZSBtdHlwZVxcdFxcdFxcdE1UWVBFXFxuICAzNTpcXHRcXG4gIDM2OlxcdCNkZWZpbmUgZ2V0X2V4dChzZXQsIG1hcCwgaWQpXFx0KChtYXApLVxcdTAwM2VleHRlbnNpb25zICsgKChzZXQpLVxcdTAwM2Vkc2l6ZSAqIChpZCkpKVxcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgdm9pZFxcbiAgMzk6XFx0bXR5cGVfZ2NfaW5pdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKCpnYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IG10eXBlICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZtYXAtXFx1MDAzZWdjLCBnYywgMCk7XFxuICA0NDpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNm1hcC1cXHUwMDNlZ2MsIGppZmZpZXMgKyBJUFNFVF9HQ19QRVJJT0Qoc2V0LVxcdTAwM2V0aW1lb3V0KSAqIEhaKTtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0c3RhdGljIHZvaWRcXG4gIDQ4OlxcdG10eXBlX2V4dF9jbGVhbnVwKHN0cnVjdCBpcF9zZXQgKnNldClcXG4gIDQ5OlxcdHtcXG4gIDUwOlxcdFxcdHN0cnVjdCBtdHlwZSAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0Mi42Njk3ODcyNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2OTMyNTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1UWVBFIERlZmluaXRpb24gaW4gaXBfc2V0X2JpdG1hcCBGaWxlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgTVRZUEVgIGlzIGJlaW5nIGRlZmluZWQgYW5kIHVzZWQgYWNyb3NzIHRoZXNlIHRocmVlIHNwZWNpZmljIGZpbGVzOiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmNgLCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgTVRZUEVgIHdpdGhpbiBlYWNoIG9mIHRob3NlIHNvdXJjZSBmaWxlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgY29udGV4dCBmb3IgaXRzIHB1cnBvc2UgYW5kIGFzc29jaWF0ZWQgdmFsdWVzIGFjcm9zcyB0aGUgZGlmZmVyZW50IGJpdG1hcCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSBpdHMgdXNhZ2UsIGRlZmluaXRpb24sIGFuZCB0byBpZGVudGlmeSB2YXJpYXRpb25zIGluIGhvdyB0aGUgZmlsZXMgYXJlIHVzaW5nIGBNVFlQRWAsIHdpdGhvdXQgaGF2aW5nIHRvIGV4aGF1c3RpdmVseSByZWFkIGVhY2ggZmlsZSBsaW5lLWJ5LWxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjQ0LjYzOTExNjQ0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBNVFlQRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDppcFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXAsbWFjXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MzU6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9pcG1hY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9Mjc9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOnBvcnRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9wb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz03MD1oYXNoX2lwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA0X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNF9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTIwMj1oYXNoX2lwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA2X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNl9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjA5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMTAtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz03Mj1oYXNoX2lwbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjc4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03OS0jZGVmaW5lIFBGXFx0XFx0NFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTg5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYWM2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXFx0XFx0Nlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz02OT1oYXNoX2lwbWFyazRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy03Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTIwNT1oYXNoX2lwbWFyazZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjEzOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFyazZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxNC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz03OT1oYXNoX2lwcG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo4NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy04Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI0OT1oYXNoX2lwcG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjU4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTc3PWhhc2hfaXBwb3J0aXA0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjg1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjQ4PWhhc2hfaXBwb3J0aXA2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI1NzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU4LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEyMT1oYXNoX2lwcG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTI5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEzMC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM3OT1oYXNoX2lwcG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzg4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz02MT1oYXNoX21hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX21hYzRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo2NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9tYWM0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy02Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMj1oYXNoX25ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTA4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwOS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI3Mz1oYXNoX25ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjgxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTEyOD1oYXNoX25ldGlmYWNlNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTMzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxMzQ6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MzYyPWhhc2hfbmV0aWZhY2U2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNjktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM3MDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRpZmFjZTZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcxLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTEyNT1oYXNoX25ldG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTMxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM2Mz1oYXNoX25ldG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzcxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MTE3PWhhc2hfbmV0cG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTI0OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTI1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTMzND1oYXNoX25ldHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM0MzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0NC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MTMxPWhhc2hfbmV0cG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6MTM4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTM5LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQyNT1oYXNoX25ldHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQzNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0NC42ODUxNjYxOThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwNDA2NDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBzZWVpbmcgdGhhdCBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgaW5jbHVkZWQgYWNyb3NzIGEgZmV3IGZpbGVzLiBTcGVjaWZpY2FsbHk6XG5cbiogICBgaXBfc2V0X2JpdG1hcF9pcC5jYDogIFRoZSBgTVRZUEVgIGhlcmUgaXMgZGVmaW5lZCBhcyBgYml0bWFwX2lwYC4gIFNvLCB0aGF0IG1lYW5zIGNhbGxzIHRvIG1hY3JvcyBsaWtlIGBtdHlwZV9hZGRgIGFyZSBlZmZlY3RpdmVseSBleHBhbmRpbmcgdG8gYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwX3VhZHRgLCBgYml0bWFwX2lwX2thZHRgLCBhbmQgc28gb24uIFByZXR0eSBzdHJhaWdodGZvcndhcmQuXG4qICAgYGlwX3NldF9iaXRtYXBfaXBtYWMuY2A6ICBIZXJlLCBgTVRZUEVgIGlzIGBiaXRtYXBfaXBtYWNgLiAgYG10eXBlX2FkZGAgd2lsbCBleHBhbmQgdG8gYGJpdG1hcF9pcG1hY19hZGRgLCBldGMuICBNYWtlcyBzZW5zZSwgZm9sbG93cyB0aGUgcGF0dGVybi5cbiogICBgaXBfc2V0X2JpdG1hcF9wb3J0LmNgOiBBbmQgZmluYWxseSwgd2l0aCBgYml0bWFwX3BvcnRgIGFzIHRoZSBgTVRZUEVgLCBgbXR5cGVfYWRkYCBleHBhbmRzIHRvIGBiaXRtYXBfcG9ydF9hZGRgLCBldGMuIENvbnNpc3RlbnQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGdvb2QuXG5cbk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gV2h5IHRoaXMgYGJpdG1hcF9nZW4uaGAgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gY29tcGFyZSBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFuZCB0aGlzIG5ldyBgaXBfc2V0X2JpdG1hcF9nZW4uaGAuIFdoYXQncyB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBpbiBhcHByb2FjaD8gV2hhdCB3ZXJlIHRoZSBkcml2aW5nIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IGxlZCB0byB0aGlzIHNoaWZ0P1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF9zZXRfaGFzaF9nZW4uaGAgaXMgZG9pbmcgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGBleHQtXHUwMDNldGFyZ2V0YCB3aXRoaW4gdGhlIGBpcF9zZXRgIHN0cnVjdHVyZS4gIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlc2lnbiB0cmFkZS1vZmZzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjQ3LjY4OTIzMjkwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTA4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0LVxcdTAwM2V0YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTMwPW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE2MS1cXHRcXHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE2MjpcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTYzLVxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05ODg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjItXFx0XFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcihkYXRhLCBzZXQpLCBleHQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyMzpcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjQtXFx0XFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNDEtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnQtXFx1MDAzZWhyZWdpb25bcl0ubG9jayk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTQyOlxcdGlmICh0LVxcdTAwM2VyZXNpemluZyBcXHUwMDI2XFx1MDAyNiBleHQgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNDMtXFx0XFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTE3OT1tdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIyNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyMjg6XFx0XFx0aWYgKHQtXFx1MDAzZXJlc2l6aW5nIFxcdTAwMjZcXHUwMDI2IGV4dCBcXHUwMDI2XFx1MDAyNiBleHQtXFx1MDAzZXRhcmdldCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIyOS1cXHRcXHRcXHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo0Ny43MzQyMjgyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5ODM3NTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEluY29uc2lzdGVuY2llcyBpbiBpcF9zZXQgQ29kZSoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBhIHBvdGVudGlhbCBkaXNjcmVwYW5jeSBiZXR3ZWVuIHR3byBoZWFkZXIgZmlsZXMsIHNwZWNpZmljYWxseSBpbiB0aGUgd2F5IHRoZXkgaGFuZGxlIGNvbW1lbnRzIGFuZCB0YXJnZXQgZXh0ZW5zaW9ucy4gYGlwX3NldF9oYXNoX2dlbi5oYCBpbmNsdWRlcyBhbiBgaWZgIGNvbmRpdGlvbiB0aGF0IGNoZWNrcyBmb3IgYFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXRgLCB3aGVyZWFzIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgdGhlIGAhZXh0LVx1MDAzZXRhcmdldGAgcGFydC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCwgb3IgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZW50aW9uYWwgZGlmZmVyZW5jZSBpbiBiZWhhdmlvciBiZXR3ZWVuIHRoZXNlIHR3byBzZXQgdHlwZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBleHQtXHUwMDNldGFyZ2V0YCBhY3R1YWxseSByZXByZXNlbnRzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgaXBfc2V0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZmllbGQgcmVsYXRlcyB0byB0aGUgY29tbWVudCBmdW5jdGlvbmFsaXR5IGFuZCBpZiB0aGUgZGlmZmVyZW5jZSBpcywgaW4gZmFjdCwgY29ycmVjdC4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgc3RydWN0IGlwX3NldF9leHRgIGRlZmluaXRpb24gYW5kIHRoZSByb2xlIG9mIGBpcF9zZXRfaW5pdF9jb21tZW50YC4gVGhlc2UgYXJlIHRoZSBrZXlzIHRvIHVubG9ja2luZyB0aGUgaW50ZW5kZWQgbG9naWMgYW5kIHNlZWluZyBpZiB0aGlzIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IGlzIGEgYnVnIG9yIG5vdC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDc0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTAuMTMyNjA3MDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUwMTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfaW5pdF9jb21tZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNjItXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcXHUwMDI2XFx1MDAyNiAhZXh0LVxcdTAwM2V0YXJnZXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE2MzpcXHRcXHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTY0LVxcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzQ2PXZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzQ3OmlwX3NldF9pbml0X2NvbW1lbnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OC1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNjgtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNjk6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2luaXRfY29tbWVudCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM3MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTg4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTIzLVxcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXFx1MDAyNlxcdTAwMjYgIWV4dC1cXHUwMDNldGFyZ2V0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyNDpcXHRcXHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZGF0YSwgc2V0KSwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjUtXFx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjIxPWxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTIyNi1cXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjI3OlxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChlLCBzZXQpLCBleHQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjI4LVxcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIyOjUwLjE4MzExNTUyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAwNjcyMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGlwX3NldF9pbml0X2NvbW1lbnRgIGZ1bmN0aW9uLCBhcyBpZiBJJ20gd2Fsa2luZyB0aHJvdWdoIGl0IG15c2VsZjpcblxuKipEaXZpbmcgaW50byBpcF9zZXRfaW5pdF9jb21tZW50KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIGd1dHMgb2YgdGhpcyBgaXBfc2V0X2luaXRfY29tbWVudGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1lbnRzLCBzbyBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHdlIHNldCB1cCB0aGUgY29tbWVudHMgZmllbGQgd2l0aGluIGFuIElQIHNldCBvciwgYXQgbGVhc3QsIGVuc3VyZSBpdCdzIGhhbmRsZWQgcHJvcGVybHkuIEl0J3MgaW4gYGlwX3NldF9jb3JlLmNgLCBzbyBpdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIGlwc2V0IGluZnJhc3RydWN0dXJlLiBQcm9iYWJseSBjYWxsZWQgZWFybHkgaW4gc2V0IGNyZWF0aW9uLCBvciB3aGVuIGEgY29tbWVudCBmaWVsZCBpcyBhZGRlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgdG8gc2VlIGlmIGl0J3MgbmV3IG9yIHByZWV4aXN0aW5nLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IG1lbW9yeSBpcyBhbGxvY2F0ZWQgaGVyZSBhbmQgdGhlIGNoZWNrcyBpbnZvbHZlZC4gSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUgY29tbWVudCBmaWVsZCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGRpZmZlcmVudCBpcHNldCB0eXBlcy4gSSBleHBlY3QgdG8gc2VlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gY29kZSwgYWxvbmdzaWRlIGVycm9yIGhhbmRsaW5nLiBUaGVyZSBjb3VsZCBiZSBsb2NraW5nIGludm9sdmVkLCBidXQgSSdsbCBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIHRoZSBuYW1lIGFsb25lLCBJIGNhbiBpbWFnaW5lIHRoZSBmdW5jdGlvbiBoYW5kbGluZyBOVUxMIG9yIGVtcHR5IGNvbW1lbnQgc3RyaW5ncywgbWF5YmUgZXZlbiB0cnVuY2F0aW5nIG92ZXJseSBsb25nIGNvbW1lbnRzLiBPa2F5LCBsZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTIuMzgzNzkwMjE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQwOlxcdFxcdHJldHVybiBubGFfZGF0YSh0Yik7XFxuIDM0MTpcXHR9XFxuIDM0MjpcXHRcXG4gMzQzOlxcdC8qIENhbGxlZCBmcm9tIHVhZGQgb25seSwgcHJvdGVjdGVkIGJ5IHRoZSBzZXQgc3BpbmxvY2suXFxuIDM0NDpcXHQgKiBUaGUga2FkdCBmdW5jdGlvbnMgZG9uJ3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cXG4gMzQ1OlxcdCAqL1xcbiAzNDY6XFx0dm9pZFxcbiAzNDc6XFx0aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcXG4gMzQ4OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbiAzNDk6XFx0e1xcbiAzNTA6XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cXHUwMDNlYywgMSk7XFxuIDM1MTpcXHRcXHRzaXplX3QgbGVuID0gZXh0LVxcdTAwM2Vjb21tZW50ID8gc3RybGVuKGV4dC1cXHUwMDNlY29tbWVudCkgOiAwO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAodW5saWtlbHkoYykpIHtcXG4gMzU0OlxcdFxcdFxcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxLCBcXHUwMDI2c2V0LVxcdTAwM2VleHRfc2l6ZSk7XFxuIDM1NTpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgTlVMTCk7XFxuIDM1NjpcXHRcXHRcXHRrZnJlZV9yY3UoYywgcmN1KTtcXG4gMzU3OlxcdFxcdH1cXG4gMzU4OlxcdFxcdGlmICghbGVuKVxcbiAzNTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjA6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiBcXHUwMDNlIElQU0VUX01BWF9DT01NRU5UX1NJWkUpKVxcbiAzNjE6XFx0XFx0XFx0bGVuID0gSVBTRVRfTUFYX0NPTU1FTlRfU0laRTtcXG4gMzYyOlxcdFxcdGMgPSBrbWFsbG9jKHNpemVvZigqYykgKyBsZW4gKyAxLCBHRlBfQVRPTUlDKTtcXG4gMzYzOlxcdFxcdGlmICh1bmxpa2VseSghYykpXFxuIDM2NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM2NTpcXHRcXHRzdHJzY3B5KGMtXFx1MDAzZXN0ciwgZXh0LVxcdTAwM2Vjb21tZW50LCBsZW4gKyAxKTtcXG4gMzY2OlxcdFxcdGF0b21pYzY0X2FkZChzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxLCBcXHUwMDI2c2V0LVxcdTAwM2VleHRfc2l6ZSk7XFxuIDM2NzpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgYyk7XFxuIDM2ODpcXHR9XFxuIDM2OTpcXHRFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcXG4gMzcwOlxcdFxcbiAzNzE6XFx0LyogVXNlZCBvbmx5IHdoZW4gZHVtcGluZyBhIHNldCwgcHJvdGVjdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSAqL1xcbiAzNzI6XFx0c3RhdGljIGludFxcbiAzNzM6XFx0aXBfc2V0X3B1dF9jb21tZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudClcXG4gMzc0OlxcdHtcXG4gMzc1OlxcdFxcdHN0cnVjdCBpcF9zZXRfY29tbWVudF9yY3UgKmMgPSByY3VfZGVyZWZlcmVuY2UoY29tbWVudC1cXHUwMDNlYyk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmICghYylcXG4gMzc4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzNzk6XFx0XFx0cmV0dXJuIG5sYV9wdXRfc3RyaW5nKHNrYiwgSVBTRVRfQVRUUl9DT01NRU5ULCBjLVxcdTAwM2VzdHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo1Mi4zODM5MDgyMzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzQ5MDE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwX3NldF9pbml0X2NvbW1lbnQgQ2FsbCBpbiBSZWxhdGlvbiB0byB4dF9TRVQgYW5kIEJpdG1hcCBPcGVyYXRpb25zKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFzIEkgZGlzc2VjdCB0aGlzIGNvZGUuIFRoYXQgY29tbWVudCBvbiBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgaW50ZXJlc3Rpbmc6IFwiQ2FsbGVkIGZyb20gdWFkZCBvbmx5LCBwcm90ZWN0ZWQgYnkgdGhlIHNldCBzcGlubG9jay5cIiBSaWdodCwgdGhlIGthZHQgZnVuY3Rpb25zIGFyZW4ndCBzdXBwb3NlZCB0byB0b3VjaCB0aGUgY29tbWVudCBleHRlbnNpb25zLiBCdXQgdGhlbiBJIHNlZSB0aGlzIGB4dF9TRVRgIHBhdGgsIHNwZWNpZmljYWxseSB3aGVuIGFkZGluZyBhbiBlbGVtZW50IHRvIGFuIGlwc2V0IHRocm91Z2ggdGhlIG5ldGZpbHRlciB0YXJnZXQg4oCTIGlwdGFibGVzIG9yIG5mdGFibGVzJyBTRVQgdGFyZ2V0LiBJdCBsb29rcyBsaWtlIGBleHQtXHUwMDNldGFyZ2V0YCBpcyB0cnVlIGhlcmUhIFRoYXQncyBhIHBvdGVudGlhbCBwcm9ibGVtIGJlY2F1c2UsIGluIHRoZSBrYWR0L3h0X1NFVCBwYXRoLCB3aGVuIGBleHQtXHUwMDNldGFyZ2V0YCBpcyB0cnVlLCB3ZSB3ZXJlIGNhbGxpbmcgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdpdGggYml0bWFwIHNldHMuIFRoYXQgZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNlIGEgY29tbWVudCBzdHJ1Y3R1cmUgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVx1MDAzZWMsIDEpYCBvciBmcmVlIGl0LCBvciBldmVuIGRvIGEgYGttYWxsb2NgIHdpdGggYGV4dC1cdTAwM2Vjb21tZW50YCwgd2hpY2ggY291bGQgYmUgdW5pbml0aWFsaXplZCwgZ2FyYmFnZSwgb3IgTlVMTC4gVGhpcyBpcyBhIHJlYWwgaXNzdWUsIGFzIHdlIGNvdWxkIGJlIGZyZWVpbmcgYW4gZXhpc3RpbmcgY29tbWVudCBhdHRhY2hlZCB0byBhbiBlbGVtZW50IHdoZW4gaXQncyBiZWluZyB1cGRhdGVkIGJ5IHRoZSBwYWNrZXQgcGF0aCFcblxuTm93IEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX2FkZGAgYXJlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aGluIHRoZSBiaXRtYXAgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBhcm91bmQgdGhlIGthZHQvdWFkdCBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBhbmQgdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGNvbmRpdGlvbmFsbHkgaGFuZGxlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgZGlmZmVyZW50bHksIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYHh0X1NFVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbiBpcyAqdHJ1bHkqIGVmZmVjdGl2ZSBhbmQgdGhhdCB3ZSdyZSBub3QgaW5hZHZlcnRlbnRseSBjYXVzaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxOTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo1NS45MjE0MDEwNzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDQxMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10eXBlX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNy0jZGVmaW5lIG10eXBlX2FkdF9lbGVtXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZHRfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg6I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5LSNkZWZpbmUgbXR5cGVfZ2NfaW5pdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yOC0jZGVmaW5lIG10eXBlX3Rlc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3QpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI5OiNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzEtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NC0jaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XFx0XFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMDUtXFx0LmFkdFxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozMDY6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNy1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE5LSN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIxLSN1bmRlZiBtdHlwZV9kZWxfY2lkclxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMzI6I3VuZGVmIG10eXBlX2FkZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjMzLSN1bmRlZiBtdHlwZV9kZWxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyODA6I2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNC1cXHQuYWR0XFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjM1OlxcdFxcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNi1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTUuOTY2ODQ4MTgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzExMjM5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCaXRtYXAgSVAgU2V0IEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBoZWFkZXIgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYG10eXBlX2FkZGAgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoaW4gaXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpZmZlcmVudCBgTVRZUEVgIHZhcmlhbnRzLlxuXG5TbywgYmVmb3JlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBpcyBpbmNsdWRlZCwgdGhlcmUgc2VlbSB0byBiZSBhIGZldyB0eXBlcyBkZWZpbmVkLiBMZXQncyBsb29rIGF0IGBiaXRtYXBfaXBgIChmcm9tIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY2ApLCB3aGljaCB3aWxsIHVzZSBgYml0bWFwX2lwX2FkZGAsIHRoZW4gYGJpdG1hcF9pcG1hY2AgKGRlZmluZWQgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jYCksIHVzaW5nIHRoZSBgYml0bWFwX2lwbWFjX2FkZGAgZnVuY3Rpb24sIGFuZCBsYXN0bHkgYGJpdG1hcF9wb3J0YCAoZm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmNgKSwgd2hpY2ggdXRpbGl6ZXMgYGJpdG1hcF9wb3J0X2FkZGAuIFRoaXMgZ2l2ZXMgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LlxuXG5Ob3csIEknbGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBpdHNlbGYuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBzdHJ1Y3R1cmUgb2YgYG10eXBlX3ZhcmlhbnRgIG9yIGBtdHlwZWAuIEknbGwgemVybyBpbiBvbiBsaW5lcyAyOTAtMzMwIG9mIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uLiBXaXRoIHRob3NlIGRldGFpbHMgaW4gaGFuZCwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgYG10eXBlYCBhbmQgYG10eXBlX2FkZGAgYXJlIGludGVuZGVkIHRvIHdvcmsgdG9nZXRoZXIgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGJpdG1hcCB0eXBlcyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjI6NTkuMTM3OTc0MzY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0XFx0fVxcbiAyODY6XFx0XFx0XFx0fVxcbiAyODc6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdG1hcC1cXHUwMDNlZ2MuZXhwaXJlcyA9IGppZmZpZXMgKyBJUFNFVF9HQ19QRVJJT0Qoc2V0LVxcdTAwM2V0aW1lb3V0KSAqIEhaO1xcbiAyOTA6XFx0XFx0YWRkX3RpbWVyKFxcdTAwMjZtYXAtXFx1MDAzZWdjKTtcXG4gMjkxOlxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0c3RhdGljIHZvaWRcXG4gMjk0OlxcdG10eXBlX2NhbmNlbF9nYyhzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gMjk5OlxcdFxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZtYXAtXFx1MDAzZWdjKTtcXG4gMzAwOlxcdH1cXG4gMzAxOlxcdFxcbiAzMDI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlID0ge1xcbiAzMDM6XFx0XFx0LmthZHRcXHQ9IG10eXBlX2thZHQsXFxuIDMwNDpcXHRcXHQudWFkdFxcdD0gbXR5cGVfdWFkdCxcXG4gMzA1OlxcdFxcdC5hZHRcXHQ9IHtcXG4gMzA2OlxcdFxcdFxcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxcbiAzMDc6XFx0XFx0XFx0W0lQU0VUX0RFTF0gPSBtdHlwZV9kZWwsXFxuIDMwODpcXHRcXHRcXHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxcbiAzMDk6XFx0XFx0fSxcXG4gMzEwOlxcdFxcdC5kZXN0cm95ID0gbXR5cGVfZGVzdHJveSxcXG4gMzExOlxcdFxcdC5mbHVzaFxcdD0gbXR5cGVfZmx1c2gsXFxuIDMxMjpcXHRcXHQuaGVhZFxcdD0gbXR5cGVfaGVhZCxcXG4gMzEzOlxcdFxcdC5saXN0XFx0PSBtdHlwZV9saXN0LFxcbiAzMTQ6XFx0XFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXFxuIDMxNTpcXHRcXHQuY2FuY2VsX2djID0gbXR5cGVfY2FuY2VsX2djLFxcbiAzMTY6XFx0fTtcXG4gMzE3OlxcdFxcbiAzMTg6XFx0I2VuZGlmIC8qIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMjo1OS4xMzgwNjYxOThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMDcxOTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpcHNldGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaXBzZXRgIGNvZGUgYWdhaW4uIE15IG1haW4gY29uY2VybiByaWdodCBub3cgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtdHlwZV9rYWR0YCBhbmQgYG10eXBlX3VhZHRgIGFuZCB0aGUgYG10eXBlX2FkZGAgZnVuY3Rpb24gKG9yLCBtb3JlIGdlbmVyYWxseSwgaG93IHRoZSBrZXJuZWwncyBuZXRmaWx0ZXIgaXBzZXQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgYHZhcmlhbnQtXHUwMDNlYWR0W0lQU0VUX0FERF1gIG9yIGB2YXJpYW50LVx1MDAzZWthZHRgIC8gYHZhcmlhbnQtXHUwMDNldWFkdGAgY2FsbHMpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGFkZCBmdW5jdGlvbnMgYXJlIGludm9rZWQgYW5kIHdoYXQncyBkcml2aW5nIHRoZSBjYWxsIHNlcXVlbmNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgbXR5cGVfa2FkdGAgYW5kIGBtdHlwZV91YWR0YCBtb3JlIGNsb3NlbHkuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGlwX3NldF9iaXRtYXBfaXAuY2AsIGBpcF9zZXRfYml0bWFwX2lwbWFjLmNgLCBhbmQgYGlwX3NldF9iaXRtYXBfcG9ydC5jYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBmbG93IGFuZCB0aGUgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBlYWNoIG9mIHRob3NlIGltcGxlbWVudGF0aW9ucy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHRyYWNlIGhvdyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBpcHNldGAgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0NywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjA0LjU2ODc4OTQxMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYzODExNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYml0bWFwX2lwX2thZHR8Yml0bWFwX2lwbWFjX2thZHR8Yml0bWFwX3BvcnRfa2FkdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTEwOT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTEwOmJpdG1hcF9pcF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTEtXFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjA5OmJpdG1hcF9pcG1hY19rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTAtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTEyNj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoxMjc6Yml0bWFwX3BvcnRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xMjgtXFx0XFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MDQuNjM1MTc5NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYwNzkxNDcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSBvZiBCaXRtYXAgSVAgU2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGEgZmFtaWx5IG9mIGJpdG1hcCBmdW5jdGlvbnM6IGBiaXRtYXBfaXBfa2FkdGAsIGBiaXRtYXBfaXBtYWNfa2FkdGAsIGBiaXRtYXBfcG9ydF9rYWR0YCwgYGJpdG1hcF9pcF91YWR0YCwgYGJpdG1hcF9pcG1hY191YWR0YCwgYW5kIGBiaXRtYXBfcG9ydF91YWR0YC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGBiaXRtYXBfaXBfYWRkYCwgYGJpdG1hcF9pcG1hY19hZGRgLCBhbmQgYGJpdG1hcF9wb3J0X2FkZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhleSBhcmUgKmFjdHVhbGx5KiBkZWZpbmVkIHN0YXRpY2FsbHkuIEFyZSB0aGV5IGdvaW5nIHRvIHNob3cgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZT9cblxuQSBxdWljayBwZWVrIGF0IGBpcF9zZXRfYml0bWFwX2dlbi5oYCByZXZlYWxzIGBtdHlwZV9hZGRgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgc28gaXQgaXMgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24hIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBiZWNhdXNlIHRoaXMgbWVhbnMgaXQgY291bGQgYmUgaW5saW5lZCwgb3Igc3RvcmVkIGRpcmVjdGx5LCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hlcmUgaXQncyAqYWN0dWFsbHkqIHVzZWQuIFNwZWNpZmljYWxseSwgaXQncyBpbmNsdWRlZCBpbiBhbiBvYmplY3QgZmlsZSwgYnV0IG5vdCBhIGdsb2JhbCBzeW1ib2wuIFNpbmNlIGl0J3MgYHN0YXRpY2AsIGl0IHNob3VsZCBlaXRoZXIgYmUgaW5saW5lZCBvciBwcmVzZW50IGluIHRoZSBjYWxsaW5nIG9iamVjdCBhcyBhIGxvY2FsIGZ1bmN0aW9uLCB3aXRoaW4gYHVhZHRgIGFuZCBga2FkdGAgb3Igc3RvcmVkIGRpcmVjdGx5IGluIGB2YXJpYW50LVx1MDAzZWFkdGAuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbXR5cGVfYWRkYCwgb3IsIGV2ZW4gYmV0dGVyLCB1bmRlcnN0YW5kIGhvdyBgaXBfc2V0X2JpdG1hcF9pcC5jYCBkZWZpbmVzIGBiaXRtYXBfaXBfa2FkdGAgYW5kIGBiaXRtYXBfaXBfdWFkdGAuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiB0aGF0IHN0YXRpYyBmdW5jdGlvbiwgYW5kIHRodXMsIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1ODUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MDguMjQzMDk4ODQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDg6XFx0XFxuIDEwOTpcXHRzdGF0aWMgaW50XFxuIDExMDpcXHRiaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIDExMTpcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbiAxMTI6XFx0XFx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQpXFxuIDExMzpcXHR7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIDExNTpcXHRcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIDExNjpcXHRcXHRzdHJ1Y3QgYml0bWFwX2lwX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG4gMTE3OlxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIDExODpcXHRcXHR1MzIgaXA7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdGlwID0gbnRvaGwoaXA0YWRkcihza2IsIG9wdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUFNFVF9ESU1fT05FX1NSQykpO1xcbiAxMjE6XFx0XFx0aWYgKGlwIFxcdTAwM2MgbWFwLVxcdTAwM2VmaXJzdF9pcCB8fCBpcCBcXHUwMDNlIG1hcC1cXHUwMDNlbGFzdF9pcClcXG4gMTIyOlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX0JJVE1BUF9SQU5HRTtcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0XFx0ZS5pZCA9IGlwX3RvX2lkKG1hcCwgaXApO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRyZXR1cm4gYWR0Zm4oc2V0LCBcXHUwMDI2ZSwgXFx1MDAyNmV4dCwgXFx1MDAyNm9wdC1cXHUwMDNlZXh0LCBvcHQtXFx1MDAzZWNtZGZsYWdzKTtcXG4gMTI3OlxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0c3RhdGljIGludFxcbiAxMzA6XFx0Yml0bWFwX2lwX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiAxMzE6XFx0XFx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxcbiAxMzI6XFx0e1xcbiAxMzM6XFx0XFx0c3RydWN0IGJpdG1hcF9pcCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbiAxMzQ6XFx0XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiAxMzU6XFx0XFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwO1xcbiAxMzY6XFx0XFx0c3RydWN0IGJpdG1hcF9pcF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxuIDEzODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKHRiW0lQU0VUX0FUVFJfTElORU5PXSlcXG4gMTQxOlxcdFxcdFxcdCpsaW5lbm8gPSBubGFfZ2V0X3UzMih0YltJUFNFVF9BVFRSX0xJTkVOT10pO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfSVBdKSlcXG4gMTQ0OlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRyZXQgPSBpcF9zZXRfZ2V0X2hvc3RpcGFkZHI0KHRiW0lQU0VUX0FUVFJfSVBdLCBcXHUwMDI2aXApO1xcbiAxNDc6XFx0XFx0aWYgKHJldClcXG4gMTQ4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdHJldCA9IGlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzZXQsIHRiLCBcXHUwMDI2ZXh0KTtcXG4gMTUxOlxcdFxcdGlmIChyZXQpXFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpZiAoaXAgXFx1MDAzYyBtYXAtXFx1MDAzZWZpcnN0X2lwIHx8IGlwIFxcdTAwM2UgbWFwLVxcdTAwM2VsYXN0X2lwKVxcbiAxNTU6XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfQklUTUFQX1JBTkdFO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpIHtcXG4gMTU4OlxcdFxcdFxcdGUuaWQgPSBpcF90b19pZChtYXAsIGlwKTtcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBhZHRmbihzZXQsIFxcdTAwMjZlLCBcXHUwMDI2ZXh0LCBcXHUwMDI2ZXh0LCBmbGFncyk7XFxuIDE2MDpcXHRcXHR9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdGlmICh0YltJUFNFVF9BVFRSX0lQX1RPXSkge1xcbiAxNjM6XFx0XFx0XFx0cmV0ID0gaXBfc2V0X2dldF9ob3N0aXBhZGRyNCh0YltJUFNFVF9BVFRSX0lQX1RPXSwgXFx1MDAyNmlwX3RvKTtcXG4gMTY0OlxcdFxcdFxcdGlmIChyZXQpXFxuIDE2NTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjY6XFx0XFx0XFx0aWYgKGlwIFxcdTAwM2UgaXBfdG8pXFxuIDE2NzpcXHRcXHRcXHRcXHRzd2FwKGlwLCBpcF90byk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjA4LjI0MzMwMjgyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU0NzQzNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUCBTZXQgSW5pdGlhbGl6YXRpb24gYW5kIEFkZGl0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IElQIHNldHMgYXJlIGNyZWF0ZWQgYW5kIHBvcHVsYXRlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBiaXRtYXAtYmFzZWQgdHlwZXMgKGBiaXRtYXBfaXBfa2FkdGAgYW5kIGBiaXRtYXBfaXBfdWFkdGApLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYm90aCBvZiB0aGVzZSBjYWxsIHRoZSBgYWR0Zm5gIGZ1bmN0aW9uLCBwYXNzaW5nIGluIGEgc2V0LCBhbiBlbGVtZW50IHBvaW50ZXIgKGBcdTAwMjZlYCksIGFuIGV4dGVuc2lvbiBwb2ludGVyIChgXHUwMDI2ZXh0YCksIGFuZCBzb21lIG90aGVyIGFyZ3VtZW50cy4gVGhpcyBgYWR0Zm5gIGlzIGFjdHVhbGx5IGBiaXRtYXBfaXBfYWRkYCB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYElQU0VUX0FERGAgb3BlcmF0aW9uLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIHRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGFkZGluZyB0byB0aGUgYml0bWFwIElQIHNldHMuXG5cblRoZW4gSSBub3RpY2VkIHNvbWV0aGluZyBlbHNlOiBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgbXR5cGVfYWRkYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBkdXJpbmcgdGhlIGNyZWF0aW9uIHBoYXNlIGJ5IGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBiaXRtYXAgdHlwZXMsIG5hbWVseSwgYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGFuZCBgYml0bWFwX3BvcnRfYWRkYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBpcF9zZXRfaW5pdF9jb21tZW50YCBwbGF5cyBhIGtleSByb2xlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGVzZSBiaXRtYXAtYmFzZWQgSVAgc2V0IHZhcmlhbnRzLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGlzIG92ZXJhbGwgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyB0aW1lIHRvIHNlZSBob3cgdGhlIElQU0VUIGFuZCBiaXRtYXAgdHlwZXMgYXJlIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBUaGF0J3MgcHJvYmFibHkgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIGFuZCBwZXJoYXBzIHNvbWUgaW5zaWdodCBvbiBhdmFpbGFibGUgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MTAuOTk4MDQ5NTM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE4OTU2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfU0VUX0JJVE1BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNj1jb25maWcgSVBfU0VUX01BWFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDY6Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lQX1NFVCkgKz0gaXBfc2V0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMTEtIyBiaXRtYXAgdHlwZXNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19JUF9TRVRfQklUTUFQX0lQKSArPSBpcF9zZXRfYml0bWFwX2lwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDKSArPSBpcF9zZXRfYml0bWFwX2lwbWFjLm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQpICs9IGlwX3NldF9iaXRtYXBfcG9ydC5vXFxubmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZS0xNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDo0OiNpZm5kZWYgX19JUF9TRVRfQklUTUFQX0lQX0dFTl9IXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjU6I2RlZmluZSBfX0lQX1NFVF9CSVRNQVBfSVBfR0VOX0hcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMzA9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTUzLVxcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NDojaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTUtXFx0XFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xNzY9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTk0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxOTU6I2lmbmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5Ni1zdGF0aWMgYm9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTIwND1tdHlwZV9saXN0KGNvbnN0IHN0cnVjdCBpcF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yMjQtXFx0XFx0ICAgIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MjI1OiNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTIyNi1cXHRcXHQgICAgIG10eXBlX2lzX2ZpbGxlZCh4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzE3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozMTg6I2VuZGlmIC8qIF9fSVBfU0VUX0JJVE1BUF9JUF9HRU5fSCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwLG1hY1xcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM3OiNkZWZpbmUgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoxMS4xMDk5NTEwMzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE0MDMwMzE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgaGVyZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVAgU2V0IENvbmZpZ3VyYXRpb24gSGllcmFyY2h5KipcblxuUmlnaHQsIHNvIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgSVAgc2V0IGZlYXR1cmVzIGFyZSBvcmdhbml6ZWQgYW5kIHdoYXQgZGVwZW5kcyBvbiB3aGF0LiBNeSBnby10byBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBpbiB0aGlzIGNhc2UsIHRoZSBvbmUgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMuIEl0J2xsIGJlIGEgbWFwIG9mIHRoZSBsYW5kc2NhcGUuXG5cbkkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBgSVBfU0VUYCwgd2hpY2ggSSdtIGFzc3VtaW5nIGlzIHRoZSB0b3AtbGV2ZWwgb3B0aW9uLCBhbmQgdGhlIHZhcmlvdXMgYml0bWFwLXJlbGF0ZWQgdHlwZXM6IGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBhbmQgYElQX1NFVF9CSVRNQVBfUE9SVGAuIFRoaXMgc2hvdWxkIGNsYXJpZnkgYW55IHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBFc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6IFwiSWYgYElQX1NFVF9CSVRNQVBfSVBgIGlzIGVuYWJsZWQsIHRoZW4gYElQX1NFVGAgbXVzdCBhbHNvIGJlIGVuYWJsZWQsXCIgb3IgcGVyaGFwcyBzb21lIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcHRpb25zLlxuXG5PbmNlIEkndmUgbWFwcGVkIHRoZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgYEtjb25maWdgIGZpbGUsIEkgc2hvdWxkIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgSVAgc2V0IGJpdG1hcCBmZWF0dXJlcywgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIEZyb20gdGhlcmUgSSBjYW4gY2hlY2sgYW55IGNvZGUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MTQuMjUwMjU3OTcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSVBfU0VUXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxcbiAgIDg6XFx0XFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XFxuICAgOTpcXHRcXHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcXFwic2V0XFxcIiBtYXRjaFxcbiAgMTA6XFx0XFx0ICBhbmQgXFxcIlNFVFxcXCIgdGFyZ2V0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJUF9TRVRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElQX1NFVF9NQVhcXG4gIDE3OlxcdFxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4gIDE4OlxcdFxcdGRlZmF1bHQgMjU2XFxuICAxOTpcXHRcXHRyYW5nZSAyIDY1NTM0XFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBZb3UgY2FuIGRlZmluZSBoZXJlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1heGltdW0gbnVtYmVyIFxcbiAgMjM6XFx0XFx0ICBvZiBJUCBzZXRzIGZvciB0aGUga2VybmVsLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIFRoZSB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ21heF9zZXRzJyBtb2R1bGVcXG4gIDI2OlxcdFxcdCAgcGFyYW1ldGVyIG9mIHRoZSAnaXBfc2V0JyBtb2R1bGUuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBJUF9TRVRfQklUTUFQX0lQXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwIHNldCBzdXBwb3J0XFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYml0bWFwOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxcbiAgMzM6XFx0XFx0ICBjYW4gc3RvcmUgSVB2NCBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKSBmcm9tIGEgcmFuZ2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gSVBfU0VUXFxuICA0MDpcXHRcXHRoZWxwXFxuICA0MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGJpdG1hcDppcCxtYWMgc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2ggb25lXFxuICA0MjpcXHRcXHQgIGNhbiBzdG9yZSBJUHY0IGFkZHJlc3MgYW5kIChzb3VyY2UpIE1BQyBhZGRyZXNzIHBhaXJzIGZyb20gYSByYW5nZS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYml0bWFwOnBvcnQgc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2ggb25lXFxuICA1MTpcXHRcXHQgIGNhbiBzdG9yZSBUQ1AvVURQIHBvcnQgbnVtYmVycyBmcm9tIGEgcmFuZ2UuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1NDpcXHRcXG4gIDU1OlxcdGNvbmZpZyBJUF9TRVRfSEFTSF9JUFxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuICA1NzpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAgNTg6XFx0XFx0aGVscFxcbiAgNTk6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBoYXNoOmlwIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoIG9uZVxcbiAgNjA6XFx0XFx0ICBjYW4gc3RvcmUgYXJiaXRyYXJ5IElQdjQgb3IgSVB2NiBhZGRyZXNzZXMgKG9yIG5ldHdvcmsgYWRkcmVzc2VzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoxNC4yNTAzODIzMzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAwMDUyMjM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYG5ldGZpbHRlci9pcHNldGAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBmcmFtZXdvcmsuIEl0J3MgY2xlYXJseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBib3RoIG5ldGxpbmsgKHNwZWNpZmljYWxseSBgbmZuZXRsaW5rYCBhbmQgYGlwc2V0YCkgYW5kIHRoZSBuZXRmaWx0ZXIgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCwgdmlhIHRoZSBgeHRfU0VUYCB0YXJnZXQgZm9yIHBhY2tldC1kcml2ZW4gc2V0IHVwZGF0ZXMuIFRoZSBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gYGlwX3NldF9iaXRtYXBfZ2VuLmhgLCB3aXRoaW4gdGhlIGBtdHlwZV9hZGRgIGZ1bmN0aW9uLCBtb3JlIHByZWNpc2VseSB3aGVuIGluaXRpYWxpemluZyBjb21tZW50cyB2aWEgYGlwX3NldF9pbml0X2NvbW1lbnRgLiBUaGlzIGRpcmVjdGx5IGluZmx1ZW5jZXMgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSB3aGVuIHRoZSBgZXh0LVx1MDAzZXRhcmdldGAgaXMgY29uZmlndXJlZCwgd2hpY2ggaW5kaWNhdGVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBiaXRtYXAgc2V0cyB0aGF0IGhhdmUgY29tbWVudHMgZW5hYmxlZC5cblxuR2l2ZW4gaXRzIHJlYWNoYWJpbGl0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBwYWNrZXQgcHJvY2Vzc2luZywgbXkgaW5pdGlhbCBpbnN0aW5jdCBpczogKip5ZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLioqIEl0IHRpY2tzIGFsbCB0aGUgYm94ZXMg4oCTIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIGludGVyYWN0cyB3aXRoIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBgbXR5cGVfYWRkYCBpdHNlbGYgaXMgZ2VuZXJhdGVkIGZvciB0aGUgYml0bWFwIHNldCB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBgYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBtYWNfYWRkYCwgYW5kIGBiaXRtYXBfcG9ydF9hZGRgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYm90aCBrZXJuZWwgYW5kIHVzZXItYWNjZXNzaWJsZSBmdW5jdGlvbnMsIGFzIGRlbW9uc3RyYXRlZCBieSB0aGUgYGthZHRgIGFuZCBgdWFkdGAgdmFyaWFudHMuICBgaXBfc2V0X2luaXRfY29tbWVudGAgaXMgYWxzbyBjcnVjaWFsLCBhcyBpdCdzIGRpcmVjdGx5IGNhbGxlZCBieSBgbXR5cGVfYWRkYC4gSXQgc2VlbXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHZlcnkgcmVsZXZhbnQ6XG5gYml0bWFwX2lwX2FkZGAsIGBiaXRtYXBfaXBtYWNfYWRkYCwgYGJpdG1hcF9wb3J0X2FkZGAsIGBiaXRtYXBfaXBfa2FkdGAsIGBiaXRtYXBfaXBtYWNfa2FkdGAsIGBiaXRtYXBfcG9ydF9rYWR0YCwgYGJpdG1hcF9pcF91YWR0YCwgYGJpdG1hcF9pcG1hY191YWR0YCwgYGJpdG1hcF9wb3J0X3VhZHRgLCBgaXBfc2V0X2luaXRfY29tbWVudGAuXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gaXBzZXQgYml0bWFwIHR5cGVzIGFuZCBjb21tZW50IGV4dGVuc2lvbiBoYW5kbGluZywgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cy4gVGhleSBhcmUgbm90IHViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucywgYnV0IGFyZSBzcGVjaWZpYyB0byBpcHNldCBmdW5jdGlvbmFsaXR5LlxuXG5Gb3IgZnV6emluZywgSSdsbCBzZWxlY3QgdGhlIG1vc3QgZGlyZWN0bHkgcmVsZXZhbnQgc3ltYm9sczogYGJpdG1hcF9pcF9hZGRgLCBgYml0bWFwX2lwbWFjX2FkZGAsIGBiaXRtYXBfcG9ydF9hZGRgLCBgYml0bWFwX2lwX2thZHRgLCBgYml0bWFwX2lwbWFjX2thZHRgLCBgYml0bWFwX3BvcnRfa2FkdGAsIGBiaXRtYXBfaXBfdWFkdGAsIGBiaXRtYXBfaXBtYWNfdWFkdGAsIGBiaXRtYXBfcG9ydF91YWR0YCwgYGlwX3NldF9pbml0X2NvbW1lbnRgLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgc2V0OiBgSVBfU0VUYCwgYElQX1NFVF9CSVRNQVBfSVBgLCBgSVBfU0VUX0JJVE1BUF9JUE1BQ2AsIGBJUF9TRVRfQklUTUFQX1BPUlRgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kICBgTkVURklMVEVSX1hUX1RBUkdFVF9TRVRgIChvciBgTkVURklMVEVSX1hUX1NFVGApLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlnIG5hbWUgZm9yIGB4dF9TRVRgIHRvIGVuc3VyZSBhY2N1cmFjeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoyMS4yNTA5MDc2MThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTc3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInh0X1NFVHxORVRGSUxURVJfWFQuKlNFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03NzM9Y29uZmlnIE5FVEZJTFRFUl9YVF9DT05OTUFSS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Nzg1OmNvbmZpZyBORVRGSUxURVJfWFRfU0VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc4Ni1cXHR0cmlzdGF0ZSAnc2V0IHRhcmdldCBhbmQgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTYwPW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICs9IHh0X2Nvbm5tYXJrLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1NFVCkgKz0geHRfc2V0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2Mi1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX05BVCkgKz0geHRfbmF0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MjE9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYdGFibGVzOiBJUCBzZXQgbWF0Y2ggYW5kIHRhcmdldCBtb2R1bGVcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjIyOk1PRFVMRV9BTElBUyhcXFwieHRfU0VUXFxcIik7XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yMy1NT0RVTEVfQUxJQVMoXFxcImlwdF9zZXRcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6MjEuMzE4MDkwODg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjQwNzE4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgeHRfU0VUYCBOZXRmaWx0ZXIgTW9kdWxlKipcblxuT2theSwgc28gYE5FVEZJTFRFUl9YVF9TRVRgIGlzIHRoZSBOZXRmaWx0ZXIgdGFyZ2V0IG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBgeHRfU0VUYCBtb2R1bGUuIEdvdCBpdC4gVGhpcyBtb2R1bGUncyBqb2IgaXMgdG8gc2V0IHRoZSBgZXh0LVx1MDAzZXRhcmdldGAgZmllbGQgdG8gYDFgIHdoZW4gYSBwYWNrZXQgbWF0Y2hlcyBpdHMgY3JpdGVyaWEgYW5kIHRoZSB0YXJnZXQgaXMgZXhlY3V0ZWQuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUbyBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzcG90LW9uLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiBgeHRfc2V0LmNgLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgcGFja2V0IGZpbHRlcmluZyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzoyMy41NDIxNjU1NTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Nzc2NTA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLnRhcmdldCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjIzLjYwODk1MDUyM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc2MjM4MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgLnRhcmdldGAgRmllbGQgaW4gaXBfc2V0X2V4dCBhbmQgSVBfU0VUX0lOSVRfS0VYVCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYC50YXJnZXRgIHdpdGhpbiB0aGUgYHN0cnVjdCBpcF9zZXRfZXh0YCBhbmQgdGhlIGBJUF9TRVRfSU5JVF9LRVhUYCBtYWNyby4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwgZXh0ZW5zaW9uIGluaXRpYWxpemF0aW9uIGFuZCB0YXJnZXQgYXNzaWdubWVudCwgc28gdGhlIHN0cnVjdHVyZSBgaXBfc2V0X2V4dGAgcHJvYmFibHkgY29udGFpbnMgc29tZSBkYXRhIHJlbGV2YW50IGZvciB0aGUgaXBzZXQuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSB3aGVyZSB0aGVzZSBhcmUgZGVmaW5lZC4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgYHRhcmdldGAgZmllbGQgaXMgYSBzaW1wbGUgcG9pbnRlciBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4LiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIEkgZXhwZWN0IHRvIHNlZSBhbiBhc3NvY2lhdGVkIGluaXRpYWxpemF0aW9uIG1hY3JvLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjI3LjA4NTE5MTk3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxNzg3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfU0VUX0lOSVRfS0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjM9bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTMxLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjUzMjojZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTMzLVxcdHsgLmJ5dGVzID0gKHNrYiktXFx1MDAzZWxlbiwgLnBhY2tldHMgPSAxLCAudGFyZ2V0ID0gdHJ1ZSxcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjI3LjEzOTM3NjM5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTgyMjA4Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwtU3BhY2UgSVAgU2V0IEluaXRpYWxpemF0aW9uIGFuZCBDb21tZW50IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgSVAgc2V0cyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgY29tbWVudHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoZSBtYWNybyBgSVBfU0VUX0lOSVRfS0VYVGAsIHdoaWNoIGlzIHVzZWQgaW4gYGJpdG1hcF9pcF9rYWR0YCwgYGJpdG1hcF9pcG1hY19rYWR0YCwgYW5kIGBiaXRtYXBfcG9ydF9rYWR0YC4gIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgSVBfU0VUX0lOSVRfS0VYVGAgaXMgY2FsbGVkIHdoZW4gdGhlIGBrYWR0YCBmdW5jdGlvbiAoa2VybmVsIGFkZC9kZWwvdGVzdCkgaXMgaW52b2tlZCwgdHlwaWNhbGx5IHdoZW4gdGhlIGB4dF9zZXRgIHRhcmdldCBpcyB1c2VkLCBhbmQgaW4gdGhpcyBjYXNlLCBgZXh0LnRhcmdldGAgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBjb250cmFzdHMgd2l0aCBgSVBfU0VUX0lOSVRfVUVYVGAsIHVzZWQgZHVyaW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgKGB1YWR0YCkgd2hlcmUgYGV4dC50YXJnZXRgIGlzIGBmYWxzZWAuXG5cblRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGNydWNpYWw6IFdoZW4gYWRkaW5nIGVsZW1lbnRzIHRocm91Z2ggdGhlIGtlcm5lbCBwYXRoLCB3ZSAqZG9uJ3QqIHdhbnQgdG8gY2FsbCBgaXBfc2V0X2luaXRfY29tbWVudGAuIFRoZSBrZXJuZWwgcGFja2V0IHBhdGggaXNuJ3Qgc3VwcG9zZWQgdG8gcHJvdmlkZSBjb21tZW50cywgYW5kIHdlIGNlcnRhaW5seSBkb24ndCB3YW50IHRvIGNsZWFyIG9yIG92ZXJ3cml0ZSBleGlzdGluZyBjb21tZW50cyB3aXRoIGBOVUxMYCBpbiB0aGUgYGthZHRgIGNvbnRleHQuIFRoaXMgaXMgd2hhdCB0aGUgcGF0Y2ggaXMgYWJvdXQuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyB2ZXJpZnkgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmU6XG4qICAgYElQX1NFVGAgaXMgZW5hYmxlZFxuKiAgIGBJUF9TRVRfQklUTUFQX0lQYCBpcyBlbmFibGVkXG4qICAgYElQX1NFVF9CSVRNQVBfSVBNQUNgIGlzIGVuYWJsZWRcbiogICBgSVBfU0VUX0JJVE1BUF9QT1JUYCBpcyBlbmFibGVkXG4qICAgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZFxuKiAgIGBORVRGSUxURVJfWFRfU0VUYCBpcyBlbmFibGVkXG5cbk5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBzeW1ib2xzIGFyZSBjb3JyZWN0LCBsZXRzIHZlcmlmeSB0aGVzZTpcbiogICBgYml0bWFwX2lwX2FkZGBcbiogICBgYml0bWFwX2lwbWFjX2FkZGBcbiogICBgYml0bWFwX3BvcnRfYWRkYFxuKiAgIGBiaXRtYXBfaXBfa2FkdGBcbiogICBgYml0bWFwX2lwbWFjX2thZHRgXG4qICAgYGJpdG1hcF9wb3J0X2thZHRgXG4qICAgYGJpdG1hcF9pcF91YWR0YFxuKiAgIGBiaXRtYXBfaXBtYWNfdWFkdGBcbiogICBgYml0bWFwX3BvcnRfdWFkdGBcbiogICBgaXBfc2V0X2luaXRfY29tbWVudGBcblxuVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgYG10eXBlX2FkZCgpYCBmdW5jdGlvbiBpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gcHJlY2lzZWx5IGFkZHJlc3MgdGhpcyBrZXJuZWwtc2lkZSBjb21tZW50IGluaXRpYWxpemF0aW9uIGlzc3VlLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBwcmV2ZW50IGNvbW1lbnQgZXh0ZW5zaW9ucyBmcm9tIGJlaW5nIGluaXRpYWxpemVkIG9yIG92ZXJ3cml0dGVuIHdoZW4gdGhlIGFkZGl0aW9uIGNvbWVzIGZyb20gdGhlIGtlcm5lbCBwYXRoLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgd2l0aGluIGBiaXRtYXA6aXBgLCBgYml0bWFwOmlwLG1hY2AsIGFuZCBgYml0bWFwOnBvcnRgIGlwc2V0IHR5cGVzLlxuXG5UbyB2YWxpZGF0ZSB0aGlzIHBhdGNoIGFuZCBlbnN1cmUgdGhlIGNvcnJlY3QgYmVoYXZpb3IsIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHRoZSBlbGVtZW50IGFkZGl0aW9ucyBmcm9tIGJvdGgga2VybmVsLXNwYWNlIGFuZCB1c2Vyc3BhY2UgbmV0bGluayBjb3JyZWN0bHkgaGFuZGxlIGFuZCBtYWludGFpbiBzZXQgZXh0ZW5zaW9ucywgcHJldmVudGluZyBib3RoIGNvbW1lbnQgY29ycnVwdGlvbiBhbmQgbWVtb3J5IGxlYWtzLlxuXG5Pa2F5LCBsZXQncyBnZXQgdGhlIGZ1enppbmcgc2V0IHVwLCB0aGVuIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NjYsIk91dHB1dFRva2VucyI6Mjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjMzLjEyMTU4NzU5NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjQ5MzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpdG1hcF9pcF9hZGRcIixcbiAgICBcImJpdG1hcF9pcG1hY19hZGRcIixcbiAgICBcImJpdG1hcF9wb3J0X2FkZFwiLFxuICAgIFwiYml0bWFwX2lwX2thZHRcIixcbiAgICBcImJpdG1hcF9pcG1hY19rYWR0XCIsXG4gICAgXCJiaXRtYXBfcG9ydF9rYWR0XCIsXG4gICAgXCJiaXRtYXBfaXBfdWFkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX3VhZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X3VhZHRcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtdHlwZV9hZGQoKSBpbiBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggdG8gYXZvaWQgY2FsbGluZyBpcF9zZXRfaW5pdF9jb21tZW50KCkgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgdmlhIGtlcm5lbC1zaWRlIG5ldGZpbHRlciBwYWNrZXQgcGF0aHMgKHdoZXJlIGV4dC1cXHUwMDNldGFyZ2V0IGlzIHRydWUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciBpcHNldCBiaXRtYXAgdHlwZXMgKGJpdG1hcDppcCwgYml0bWFwOmlwLG1hYywgYml0bWFwOnBvcnQpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBleHRlbnNpb24gaGFuZGxpbmcgYW5kIGNvbW1lbnQgbGlmZWN5Y2xlIHJlbWFpbiBzb3VuZCBhY3Jvc3MgdXNlcnNwYWNlIG5ldGxpbmsgYW5kIHBhY2tldC1wcm9jZXNzaW5nIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBNQUNcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfUE9SVFwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfWFRfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYml0bWFwX2lwX2FkZFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX2FkZFwiLFxuICAgIFwiYml0bWFwX3BvcnRfYWRkXCIsXG4gICAgXCJiaXRtYXBfaXBfa2FkdFwiLFxuICAgIFwiYml0bWFwX2lwbWFjX2thZHRcIixcbiAgICBcImJpdG1hcF9wb3J0X2thZHRcIixcbiAgICBcImJpdG1hcF9pcF91YWR0XCIsXG4gICAgXCJiaXRtYXBfaXBtYWNfdWFkdFwiLFxuICAgIFwiYml0bWFwX3BvcnRfdWFkdFwiLFxuICAgIFwiaXBfc2V0X2luaXRfY29tbWVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG10eXBlX2FkZCgpIGluIG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCB0byBhdm9pZCBjYWxsaW5nIGlwX3NldF9pbml0X2NvbW1lbnQoKSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCB2aWEga2VybmVsLXNpZGUgbmV0ZmlsdGVyIHBhY2tldCBwYXRocyAod2hlcmUgZXh0LVxcdTAwM2V0YXJnZXQgaXMgdHJ1ZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIGlwc2V0IGJpdG1hcCB0eXBlcyAoYml0bWFwOmlwLCBiaXRtYXA6aXAsbWFjLCBiaXRtYXA6cG9ydCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGV4dGVuc2lvbiBoYW5kbGluZyBhbmQgY29tbWVudCBsaWZlY3ljbGUgcmVtYWluIHNvdW5kIGFjcm9zcyB1c2Vyc3BhY2UgbmV0bGluayBhbmQgcGFja2V0LXByb2Nlc3NpbmcgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzozMy4yNTgwOTE1NTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg3ODIxNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjMzLjI1ODkzOTA5M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNDg3NzM2MzAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgbXR5cGVfYWRkKClgIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhgIHRvIGNoZWNrIGAhZXh0LVxcdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cXG5cXG4tIEFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBpcF9zZXRfZXh0YCBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBJUF9TRVRfSU5JVF9LRVhUYCBvciBgSVBfU0VUX0lOSVRfVUVYVGApLCB3aGljaCBmdWxseSB6ZXJvIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMsIGVuc3VyaW5nIGBleHQtXFx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIFRoZSBidWcgZml4ZWQgaXMgYSBsb2dpYyBpc3N1ZSAodW5pbnRlbmRlZCBjb21tZW50IGRlbGV0aW9uIGR1cmluZyBrZXJuZWwtc3BhY2UgcGFja2V0IG1hdGNoaW5nL3RhcmdldCBleGVjdXRpb24pLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTcwOWViYzkyNTViOTliZDkzYWU5M2JiOTYzYjFiYjEwODkwMGE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNToyMjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggZDZhN2U2NjA0NTQyMi4uYWUzNzZmYTNlN2EzYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtMTU5LDcgKzE1OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFxuIFx0aWYgKFNFVF9XSVRIX0NPVU5URVIoc2V0KSlcbiBcdFx0aXBfc2V0X2luaXRfY291bnRlcihleHRfY291bnRlcih4LCBzZXQpLCBleHQpO1xuLVx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcbitcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoeCwgc2V0KSwgZXh0KTtcbiBcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjMzLjI1ODk0MTAyMloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Mzc0NzgwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBSZXF1ZXN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyBhIExpbnV4IGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCwgYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgaXQuIEl0J3MgYSBsb3ctc2V2ZXJpdHksIGRlZmVuc2l2ZSBjb2RlIHJldmlldywgYmFzaWNhbGx5IGEgc2FuaXRpemVyIHNlbGVjdGlvbiBpc3N1ZS5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGNoYW5nZSB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gcHJvYmFibHkgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGBpcF9zZXRfYml0bWFwX2dlbi5oYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgdGhlIHBhdGNoICphY3R1YWxseSogZG9lcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgdGhlIGtleSBoZXJlIOKAkyBhcmUgd2UgY3JlYXRpbmcgYW55IG5ldywgb3IgbWFraW5nIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0YXRlcyBhY2Nlc3NpYmxlPyBJZiBJIGZpbmQgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgaXQsIEknbGwgZmxhZyBpdCBmb3IgS01TQU4uIEknbGwgbmVlZCB0byB0aGVuIGRvY3VtZW50IHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBhdHRlbnRpb24gdG8gZGV0YWlsIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo0MS42MzM3MjQ3MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTE2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10eXBlX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNy0jZGVmaW5lIG10eXBlX2FkdF9lbGVtXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZHRfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg6I2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE5LSNkZWZpbmUgbXR5cGVfZ2NfaW5pdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yOC0jZGVmaW5lIG10eXBlX3Rlc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3QpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI5OiNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzEtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE1NC0jaWZkZWYgSVBfU0VUX0JJVE1BUF9TVE9SRURfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XFx0XFx0bXR5cGVfYWRkX3RpbWVvdXQoZXh0X3RpbWVvdXQoeCwgc2V0KSwgZSwgZXh0LCBzZXQsIG1hcCwgcmV0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMDUtXFx0LmFkdFxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozMDY6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNy1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTg4PXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE5LSN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIwOiN1bmRlZiBtdHlwZV9hZGRfY2lkclxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIxLSN1bmRlZiBtdHlwZV9kZWxfY2lkclxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMzI6I3VuZGVmIG10eXBlX2FkZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjMzLSN1bmRlZiBtdHlwZV9kZWxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY3LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY4OiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY5LSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzktXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyODA6I2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI4MS0jZGVmaW5lIG10eXBlX2RlbFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMzU9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0NS0vKipcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0NjogKiBtdHlwZV9hZGRfY2lkciAtIEFkZCBhIENJRFIgZW50cnkgdG8gaGFzaCB0YWJsZSBib29ra2VlcGluZ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzQ3LSAqIEBzZXQ6IFBvaW50ZXIgdG8gdGhlIGlwX3NldFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NzQwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc0MTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc0Mi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NTI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MDQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTA1OlxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05ODktXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNC1cXHQuYWR0XFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNjM1OlxcdFxcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTYzNi1cXHRcXHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjM6NDEuNzA0NjQ3Mzc1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODc4NTA3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBCaXRtYXAgR2VuZXJhdGlvbiBpbiBgaXBzZXRgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGlwc2V0YCBiaXRtYXAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBob3cgaXQncyBnZW5lcmF0aW5nIHRoZSBiaXRtYXBzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oYCBhbmQgZm9jdXMgb24gbGluZXMgMTMwIHRocm91Z2ggMTgwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGJpdG1hcCBnZW5lcmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBgaXBzZXRgIGZyYW1ld29yay4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGFkZHJlc3MgbWFwcGluZyB3aXRoaW4gdGhhdCBzZWN0aW9uLiBJdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCB0byBhY2hpZXZlIGVmZmljaWVudCBsb29rdXBzIGFuZCBzdG9yYWdlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLi4uIEkgbmVlZCB0byBzZWUgaWYgaXQgbWFrZXMgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo0My42OTI1MDA1NDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjY6XFx0XFx0cmV0dXJuIGlwX3NldF9tYXRjaF9leHRlbnNpb25zKHNldCwgZXh0LCBtZXh0LCBmbGFncywgeCk7XFxuIDEyNzpcXHR9XFxuIDEyODpcXHRcXG4gMTI5OlxcdHN0YXRpYyBpbnRcXG4gMTMwOlxcdG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiAxMzE6XFx0XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbiAxMzI6XFx0e1xcbiAxMzM6XFx0XFx0c3RydWN0IG10eXBlICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIDEzNDpcXHRcXHRjb25zdCBzdHJ1Y3QgbXR5cGVfYWR0X2VsZW0gKmUgPSB2YWx1ZTtcXG4gMTM1OlxcdFxcdHZvaWQgKnggPSBnZXRfZXh0KHNldCwgbWFwLCBlLVxcdTAwM2VpZCk7XFxuIDEzNjpcXHRcXHRpbnQgcmV0ID0gbXR5cGVfZG9fYWRkKGUsIG1hcCwgZmxhZ3MsIHNldC1cXHUwMDNlZHNpemUpO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRpZiAocmV0ID09IElQU0VUX0FERF9GQUlMRUQpIHtcXG4gMTM5OlxcdFxcdFxcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXFx1MDAyNlxcdTAwMjZcXG4gMTQwOlxcdFxcdFxcdCAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KHgsIHNldCkpKSB7XFxuIDE0MTpcXHRcXHRcXHRcXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDM6XFx0XFx0XFx0fSBlbHNlIGlmICghKGZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19FWElTVCkpIHtcXG4gMTQ0OlxcdFxcdFxcdFxcdHNldF9iaXQoZS1cXHUwMDNlaWQsIG1hcC1cXHUwMDNlbWVtYmVycyk7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9FWElTVDtcXG4gMTQ2OlxcdFxcdFxcdH1cXG4gMTQ3OlxcdFxcdFxcdC8qIEVsZW1lbnQgaXMgcmUtYWRkZWQsIGNsZWFudXAgZXh0ZW5zaW9ucyAqL1xcbiAxNDg6XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gMTUxOlxcdFxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMtLTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gMTU0OlxcdCNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxuIDE1NTpcXHRcXHRcXHRtdHlwZV9hZGRfdGltZW91dChleHRfdGltZW91dCh4LCBzZXQpLCBlLCBleHQsIHNldCwgbWFwLCByZXQpO1xcbiAxNTY6XFx0I2Vsc2VcXG4gMTU3OlxcdFxcdFxcdGlwX3NldF90aW1lb3V0X3NldChleHRfdGltZW91dCh4LCBzZXQpLCBleHQtXFx1MDAzZXRpbWVvdXQpO1xcbiAxNTg6XFx0I2VuZGlmXFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIDE2MTpcXHRcXHRcXHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKHgsIHNldCksIGV4dCk7XFxuIDE2MjpcXHRcXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG4gMTYzOlxcdFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudCh4LCBzZXQpLCBleHQpO1xcbiAxNjQ6XFx0XFx0aWYgKFNFVF9XSVRIX1NLQklORk8oc2V0KSlcXG4gMTY1OlxcdFxcdFxcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oeCwgc2V0KSwgZXh0KTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogQWN0aXZhdGUgZWxlbWVudCAqL1xcbiAxNjg6XFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIDE2OTpcXHRcXHRzZXRfYml0KGUtXFx1MDAzZWlkLCBtYXAtXFx1MDAzZW1lbWJlcnMpO1xcbiAxNzA6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cysrO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRyZXR1cm4gMDtcXG4gMTczOlxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0c3RhdGljIGludFxcbiAxNzY6XFx0bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIDE3NzpcXHRcXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHRzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gMTgwOlxcdFxcdGNvbnN0IHN0cnVjdCBtdHlwZV9hZHRfZWxlbSAqZSA9IHZhbHVlO1xcbiAxODE6XFx0XFx0dm9pZCAqeCA9IGdldF9leHQoc2V0LCBtYXAsIGUtXFx1MDAzZWlkKTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKG10eXBlX2RvX2RlbChlLCBtYXApKVxcbiAxODQ6XFx0XFx0XFx0cmV0dXJuIC1JUFNFVF9FUlJfRVhJU1Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjQzLjY5MjU3NjczNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY5NjEwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBpcF9zZXQgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhpcyBgaXBfc2V0YCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGV4dC1cdTAwM2V0YXJnZXRgIGFuZCBgaXBfc2V0X2luaXRfY29tbWVudGAuIEFuZCwgb2YgY291cnNlLCB0aGUgbWFjcm8gYFNFVF9XSVRIX0NPTU1FTlRgIG1heSBhbHNvIGJlIHJlbGV2YW50LiBNeSBndXQgZmVlbGluZyBpcyB0aGVzZSBhcmUgYWxsIGNvbm5lY3RlZCBzb21laG93LCBhbmQgdHJhY2luZyB1c2FnZSBpcyBteSBiZXN0IGJldC4gU28sIGxldCdzIGZpcmUgdXAgYGdyZXBgLiBJJ2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIG9jY3VycmVuY2VzIG9mIGBpcF9zZXRfaW5pdF9jb21tZW50YCwgdGhlIG1hY3JvIGBTRVRfV0lUSF9DT01NRU5UYCwgYW5kIGFsc28sIGNyaXRpY2FsbHksIGBleHQtXHUwMDNldGFyZ2V0YC4gU2VlaW5nIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucywgbWFjcm8sIGFuZCBzdHJ1Y3R1cmUgbWVtYmVyIGFyZSB1c2VkIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBjbHVlcyBJIG5lZWQuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjQ3Ljk2MjE5MDg2OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwMzA2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X2luaXRfY29tbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMzA9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTYyLVxcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXFx1MDAyNlxcdTAwMjYgIWV4dC1cXHUwMDNldGFyZ2V0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNjM6XFx0XFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE2NC1cXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM0Nj12b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM0NzppcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNDgtXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzY4LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyMy1cXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFxcdTAwMjZcXHUwMDI2ICFleHQtXFx1MDAzZXRhcmdldClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMjQ6XFx0XFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI1LVxcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIyMT1saXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMjYtXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjIyNzpcXHRcXHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZSwgc2V0KSwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTIyOC1cXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo0OC4wNTYyMjY5MzlaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwNjk4MzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIFNldCBDb3JlIGFuZCBIYXNoIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIG9mIHRoZSBJUCBzZXQgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGhhc2ggZ2VuZXJhdGlvbiBtZWNoYW5pc20uIExldCdzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZXhhbWluZSBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jYCBhcm91bmQgbGluZSAzNDYuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGJhc2ljIElQIHNldCBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgYXJlIG1hbmFnZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBmdW5jdGlvbiBjYWxscyBvciBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGVyZSB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB3aG9sZSB0aGluZy5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGhhc2ggaW1wbGVtZW50YXRpb24sIEkgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGBpcF9zZXRfaGFzaF9nZW4uaGAgYXJvdW5kIGxpbmUgMTEyMC4gVGhlIGhlYWRlciBmaWxlcyBhcmUgZ2VuZXJhbGx5IHdoZXJlIHlvdSdsbCBmaW5kIHRoZSBtYWNyb3MsIGFuZCBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIGNyaXRpY2FsIGFsZ29yaXRobXMsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGhvbGRzIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBoYXNoIHRhYmxlIGdlbmVyYXRpb24gaW4gdGhhdCBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGRldGFpbHMgYXJlIGNvcnJlY3QuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdpbmcgY29sbGlzaW9ucywgaG93IHRoZXkgYXJlIGJ1aWxkaW5nIHRoZSBoYXNoIHRhYmxlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGF0J2xsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBBbHJpZ2h0LCBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo1MC41NjMyMTM0MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0cmV0dXJuIG5sYV9kYXRhKHRiKTtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0LyogQ2FsbGVkIGZyb20gdWFkZCBvbmx5LCBwcm90ZWN0ZWQgYnkgdGhlIHNldCBzcGlubG9jay5cXG4gMzQ0OlxcdCAqIFRoZSBrYWR0IGZ1bmN0aW9ucyBkb24ndCB1c2UgdGhlIGNvbW1lbnQgZXh0ZW5zaW9ucyBpbiBhbnkgd2F5LlxcbiAzNDU6XFx0ICovXFxuIDM0NjpcXHR2b2lkXFxuIDM0NzpcXHRpcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbiAzNDg6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxuIDM0OTpcXHR7XFxuIDM1MDpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVxcdTAwM2VjLCAxKTtcXG4gMzUxOlxcdFxcdHNpemVfdCBsZW4gPSBleHQtXFx1MDAzZWNvbW1lbnQgPyBzdHJsZW4oZXh0LVxcdTAwM2Vjb21tZW50KSA6IDA7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGlmICh1bmxpa2VseShjKSkge1xcbiAzNTQ6XFx0XFx0XFx0YXRvbWljNjRfc3ViKHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDEsIFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gMzU1OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVxcdTAwM2VjLCBOVUxMKTtcXG4gMzU2OlxcdFxcdFxcdGtmcmVlX3JjdShjLCByY3UpO1xcbiAzNTc6XFx0XFx0fVxcbiAzNTg6XFx0XFx0aWYgKCFsZW4pXFxuIDM1OTpcXHRcXHRcXHRyZXR1cm47XFxuIDM2MDpcXHRcXHRpZiAodW5saWtlbHkobGVuIFxcdTAwM2UgSVBTRVRfTUFYX0NPTU1FTlRfU0laRSkpXFxuIDM2MTpcXHRcXHRcXHRsZW4gPSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFO1xcbiAzNjI6XFx0XFx0YyA9IGttYWxsb2Moc2l6ZW9mKCpjKSArIGxlbiArIDEsIEdGUF9BVE9NSUMpO1xcbiAzNjM6XFx0XFx0aWYgKHVubGlrZWx5KCFjKSlcXG4gMzY0OlxcdFxcdFxcdHJldHVybjtcXG4gMzY1OlxcdFxcdHN0cnNjcHkoYy1cXHUwMDNlc3RyLCBleHQtXFx1MDAzZWNvbW1lbnQsIGxlbiArIDEpO1xcbiAzNjY6XFx0XFx0YXRvbWljNjRfYWRkKHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDEsIFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gMzY3OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVxcdTAwM2VjLCBjKTtcXG4gMzY4OlxcdH1cXG4gMzY5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHQvKiBVc2VkIG9ubHkgd2hlbiBkdW1waW5nIGEgc2V0LCBwcm90ZWN0ZWQgYnkgcmN1X3JlYWRfbG9jaygpICovXFxuIDM3MjpcXHRzdGF0aWMgaW50XFxuIDM3MzpcXHRpcF9zZXRfcHV0X2NvbW1lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50KVxcbiAzNzQ6XFx0e1xcbiAzNzU6XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50X3JjdSAqYyA9IHJjdV9kZXJlZmVyZW5jZShjb21tZW50LVxcdTAwM2VjKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0aWYgKCFjKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM3OTpcXHRcXHRyZXR1cm4gbmxhX3B1dF9zdHJpbmcoc2tiLCBJUFNFVF9BVFRSX0NPTU1FTlQsIGMtXFx1MDAzZXN0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjUwLjU2MzQ2OTQwMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg4NzA5OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgYCFleHQtXHUwMDNldGFyZ2V0YCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoaXMgY2hlY2ssIHNwZWNpZmljYWxseSB3aHkgYCFleHQtXHUwMDNldGFyZ2V0YCB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCB0aGUgZmllbGQgYGV4dC1cdTAwM2V0YXJnZXRgIGFjdHVhbGx5IHJlcHJlc2VudHMuIFRpbWUgdG8gZ28gaHVudGluZy4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSBgc3RydWN0IGlwX3NldF9leHRgIGRlZmluaXRpb24gYW5kIGFueSBzdXJyb3VuZGluZyBjb2RlIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgZXh0LVx1MDAzZXRhcmdldGAgYW5kIGp1c3QgcGxhaW4gYHRhcmdldGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2YgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IHRvIGxvb2sgYXQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo1Mi41NTIxODMxNjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTQ5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xMTY9c3RydWN0IGlwX3NldF9leHQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMTIzLVxcdHU4IGJ5dGVzX29wO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjEyNDpcXHRib29sIHRhcmdldDtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xMjUtfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTE0MT1zdHJ1Y3QgaXBfc2V0X2FkdF9vcHQge1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0Mi1cXHR1OCBmYW1pbHk7XFx0XFx0LyogQWN0dWFsIHByb3RvY29sIGZhbWlseSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjE0MzpcXHR1OCBkaW07XFx0XFx0XFx0LyogRGltZW5zaW9uIG9mIG1hdGNoL3RhcmdldCAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE0NC1cXHR1OCBmbGFncztcXHRcXHQvKiBEaXJlY3Rpb24gYW5kIG5lZ2F0aW9uIGZsYWdzICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0zMTY9ZXh0ZXJuIHZvaWQgaXBfc2V0X25mbmxfcHV0KHN0cnVjdCBuZXQgKm5ldCwgaXBfc2V0X2lkX3QgaW5kZXgpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMxNy1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDozMTg6LyogQVBJIGZvciBpcHRhYmxlcyBzZXQgbWF0Y2gsIGFuZCBTRVQgdGFyZ2V0ICovXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMzE5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9NTIzPW5mX2luZXRfYWRkcl9tYXNrX2lucGxhY2UodW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzMi0jZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTMzOlxcdHsgLmJ5dGVzID0gKHNrYiktXFx1MDAzZWxlbiwgLnBhY2tldHMgPSAxLCAudGFyZ2V0ID0gdHJ1ZSxcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTM0LVxcdCAgLnRpbWVvdXQgPSBpcF9zZXRfYWR0X29wdF90aW1lb3V0KG9wdCwgc2V0KSB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjUyLjYxODczNjM5MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY1OTM0OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVAgU2V0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSVBfU0VUX0lOSVRfS0VYVGAgbWFjcm8uIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgdXNlZCB0byBpbml0aWFsaXplIHNvbWUgc29ydCBvZiBgaXBfc2V0YCBzdHJ1Y3R1cmUgZm9yIGtlcm5lbCBleHRlbnNpb25zIChrZXh0cykuICBJdCdzIHNldHRpbmcgdXAgdGhlIGJhc2ljczogdGhlIG51bWJlciBvZiBieXRlcyBhbmQgcGFja2V0cywgYSBib29sZWFuIGluZGljYXRpbmcgYSAndGFyZ2V0JywgYW5kIGEgdGltZW91dCB2YWx1ZS4gIFRoZSBgKHNrYiktXHUwMDNlbGVuYCBwYXJ0IGlzIGludGVyZXN0aW5nOyB0aGF0IGxpa2VseSByZWZlcnMgdG8gdGhlIHNpemUgb2YgYSBzb2NrZXQgYnVmZmVyLiBUaGUgYGlwX3NldF9hZHRfb3B0X3RpbWVvdXRgIHN1Z2dlc3RzIHNvbWUgZHluYW1pYyB0aW1lb3V0IGNhbGN1bGF0aW9uLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlLCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaXBfc2V0LmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNi0xMzA7IHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgd2l0aCB0aGUgYElQX1NFVGAgYW5kIHN1cnJvdW5kaW5nIGxvZ2ljLiBBbHNvIEknbGwgY2hlY2sgYGlwX3NldF9oYXNoX2dlbi5oYCBhcm91bmQgbGluZSAxMTIzLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBpbiBjb250ZXh0LiBNaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnksIGlmIEkgY2FuIGFjY2VzcyBpdCwgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhpcyBpbml0aWFsaXphdGlvbi4gSWYgbm90LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGlwX3NldF9oYXNoX2dlbi5oYCBpbiBkZXB0aC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBtYWNybyBmaXRzIGludG8gdGhlIGxhcmdlciBgaXBfc2V0YCBmcmFtZXdvcmsgYW5kIGhvdyBoYXNoIGdlbmVyYXRpb24gcGxheXMgYSByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTI4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjIzOjU1LjM4NDY3NTA2MloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcbiAxMTY6XFx0c3RydWN0IGlwX3NldF9leHQge1xcbiAxMTc6XFx0XFx0c3RydWN0IGlwX3NldF9za2JpbmZvIHNrYmluZm87XFxuIDExODpcXHRcXHR1NjQgcGFja2V0cztcXG4gMTE5OlxcdFxcdHU2NCBieXRlcztcXG4gMTIwOlxcdFxcdGNoYXIgKmNvbW1lbnQ7XFxuIDEyMTpcXHRcXHR1MzIgdGltZW91dDtcXG4gMTIyOlxcdFxcdHU4IHBhY2tldHNfb3A7XFxuIDEyMzpcXHRcXHR1OCBieXRlc19vcDtcXG4gMTI0OlxcdFxcdGJvb2wgdGFyZ2V0O1xcbiAxMjU6XFx0fTtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0I2RlZmluZSBleHRfdGltZW91dChlLCBzKVxcdFxcXFxcXG4gMTI4OlxcdCgodW5zaWduZWQgbG9uZyAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX1RJTUVPVVRdKSlcXG4gMTI5OlxcdCNkZWZpbmUgZXh0X2NvdW50ZXIoZSwgcylcXHRcXFxcXFxuIDEzMDpcXHQoKHN0cnVjdCBpcF9zZXRfY291bnRlciAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX0NPVU5URVJdKSlcXG4gMTMxOlxcdCNkZWZpbmUgZXh0X2NvbW1lbnQoZSwgcylcXHRcXFxcXFxuIDEzMjpcXHQoKHN0cnVjdCBpcF9zZXRfY29tbWVudCAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX0NPTU1FTlRdKSlcXG4gMTMzOlxcdCNkZWZpbmUgZXh0X3NrYmluZm8oZSwgcylcXHRcXFxcXFxuIDEzNDpcXHQoKHN0cnVjdCBpcF9zZXRfc2tiaW5mbyAqKSgoKHZvaWQgKikoZSkpICsgKHMpLVxcdTAwM2VvZmZzZXRbSVBTRVRfRVhUX0lEX1NLQklORk9dKSlcXG4gMTM1OlxcdFxcbiAxMzY6XFx0dHlwZWRlZiBpbnQgKCppcHNldF9hZHRmbikoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSxcXG4gMTM3OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIDEzODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGNtZGZsYWdzKTtcXG4gMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyMzo1NS4zODQ4MDUyMTJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcxNTE4MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGlwX3NldGAgQ29tbWVudCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAxMTIzIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAgaGFzIG1lIHNjcmF0Y2hpbmcgbXkgaGVhZC4gVGhlIGNvbmRpdGlvbmFsOiBgaWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpYC4uLiB3aHkgdGhlIGAhZXh0LVx1MDAzZXRhcmdldGAgY2hlY2s/IEl0J3MgYSBrZXkgZGV0YWlsLCBzbyBsZXQncyBkaWcgaW50byBpdC5cblxuUmVhZGluZyBhcm91bmQgYGlwX3NldF9pbml0X2NvbW1lbnRgIGluIGBpcF9zZXRfY29yZS5jYCwgSSBzZWUgdGhlIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSBtYXJrZWQgYXMgYmVpbmcgY2FsbGVkIGZyb20gYHVhZGRgICpvbmx5KiwgYW5kIHByb3RlY3RlZCBieSB0aGUgc2V0J3Mgc3BpbmxvY2suIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdGhlIGthZHQgZnVuY3Rpb25zLCB3aGljaCBpcyBob3cgd2UgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGZyb20gdGhlIHVzZXIgc3BhY2Ugd2hlbiB1c2luZyB0aGUgU0VUIHRhcmdldCwgZG9uJ3QgdXNlIHRoZSBjb21tZW50IGV4dGVuc2lvbnMgaW4gYW55IHdheS5cblxuQWhhISBUaGF0J3MgaXQuIFdoZW4gYSBwYWNrZXQgbWF0Y2hpbmcgcnVsZSBvciB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCBjYWxscyB0aGUgYWRkIGZ1bmN0aW9uYWxpdHkgKHdoaWNoIG1lYW5zIHRocm91Z2ggdGhlIGthZHQgLyBrZXJuZWwgYWRkKSBgZXh0LVx1MDAzZXRhcmdldGAgZ2V0cyBzZXQgdG8gYHRydWVgLiBUaGlzIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlIGBleHQtXHUwMDNlY29tbWVudGAgc3RydWN0dXJlIGlzIG5vdCBwcm92aWRlZC4gSWYgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdlcmUgY2FsbGVkIGZyb20gdGhlIHBhY2tldCBjb250ZXh0LCBpdCdzIGVpdGhlciBub3QgZXhwZWN0aW5nIHRoZSBjb21tZW50IG9yLCB0aGUgY29kZSBzaG91bGRuJ3QgYmUgb3ZlcndyaXRpbmcgYW55IGNvbW1lbnRzIG9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgbWVtb3J5IHdpdGggYGtmcmVlX3JjdWAgd2l0aG91dCBhcHByb3ByaWF0ZSBsb2NraW5nIG9yIHVzZXIgY29udGV4dC4gVGhhdCdzIGEgaHVnZSBwb3RlbnRpYWwgaXNzdWUuXG5cbldhaXQgYSBzZWNvbmQuLi4gaW4gYGlwX3NldF9pbml0X2NvbW1lbnRgLCB0aGVyZSdzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNvbW1lbnQtXHUwMDNlYywgMSlgIGFuZCB0aGVuIGBhdG9taWM2NF9zdWJgIG9yIGBhdG9taWM2NF9hZGRgIG1vZGlmaWVzIGBzZXQtXHUwMDNlZXh0X3NpemVgIG9yIGZyZWVzIGBjYC4gSWYgd2Ugd2VyZSB0byBjYWxsIGBpcF9zZXRfaW5pdF9jb21tZW50YCBmcm9tIHRoZSBrZXJuZWwgcGFja2V0IHBhdGgsIHBvdGVudGlhbGx5IGFzIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0LCB0aGlzIGNvdWxkIG9ibGl0ZXJhdGUgYW4gZXhpc3RpbmcgY29tbWVudCwgaW50cm9kdWNlIGNvbmN1cnJlbmN5IHByb2JsZW1zLCBvciB3b3JzZS4gVGhlIGBpcF9zZXRfaGFzaF9nZW4uaGAgY29kZSBhbHJlYWR5IGhhcyB0aGlzIHNhZmVndWFyZCBpbiBwbGFjZTogYGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KWAuIEl0IGlzIGEgZ29vZCB0aGluZyB0aGF0IGl0J3MgdGhlcmUuXG5cbkJ1dCBub3cgSSBzZWUgaXQuLi5gaXBfc2V0X2JpdG1hcF9nZW4uaGAgaXMgbWlzc2luZyB0aGF0IHZpdGFsIGBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXRgIGNoZWNrISBUaGF0J3MgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5IHRoYXQgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gYSBmdWxsIGF1ZGl0IGFjcm9zcyB0aGUgY29kZWJhc2UgYW5kIGxvb2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWxhdGVkIHRvIGBleHQtXHUwMDNldGFyZ2V0YCwgYGlwX3NldF9leHRgIG9yIGBleHQtXHUwMDNlY29tbWVudGAuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyB3aGVyZSBgaXBfc2V0X2V4dGAgaXMgaW5pdGlhbGl6ZWQgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvci4gVGhpcyBuZWVkcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24gdG8gcHJldmVudCBhbnkgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgZGV2YXN0YXRpbmcsIGZsYXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjQ6MDQuMDk5OTg3MzkyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxNjYyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwX3NldF9leHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTE1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTE2Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTE3OlxcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTExOC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTMwOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzE6XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xMzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTE3NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE3NjptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTc3OlxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTc4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTExMD1iaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTYtXFx0c3RydWN0IGJpdG1hcF9pcF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTE3OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTE4LVxcdHUzMiBpcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTEzMD1iaXRtYXBfaXBfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMzYtXFx0c3RydWN0IGJpdG1hcF9pcF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTM3OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMzgtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0xMTc9Yml0bWFwX2lwbWFjX2FkZF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgKnRpbWVvdXQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMTE4LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtICplLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjExOTpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwgc3RydWN0IGlwX3NldCAqc2V0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTEyMC1cXHRcXHRcXHQgc3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwLCBpbnQgbW9kZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOT1iaXRtYXBfaXBtYWNfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTUtXFx0c3RydWN0IGJpdG1hcF9pcG1hY19hZHRfZWxlbSBlID0geyAuaWQgPSAwLCAuYWRkX21hYyA9IDEgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyMTY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTctXFx0dTMyIGlwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MjQyPWJpdG1hcF9pcG1hY191YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0Ny1cXHRzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyNDg6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0OS1cXHR1MzIgaXAgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0xMjc9Yml0bWFwX3BvcnRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzMy1cXHRzdHJ1Y3QgYml0bWFwX3BvcnRfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6MTM0OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xMzUtXFx0X19iZTE2IF9fcG9ydDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MTUzPWJpdG1hcF9wb3J0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNTgtXFx0c3RydWN0IGJpdG1hcF9wb3J0X2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjE1OTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNjAtXFx0dTMyIHBvcnQ7XFx0Lyogd3JhcGFyb3VuZCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM0Nz1pcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDg6XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDAxPXR5cGVkZWYgdm9pZCAoKmRlc3Ryb3llcikoc3RydWN0IGlwX3NldCAqLCB2b2lkICopO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQwMy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDA0OmNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0X3R5cGUgaXBfc2V0X2V4dGVuc2lvbnNbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDA1LVxcdFtJUFNFVF9FWFRfSURfQ09VTlRFUl0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDY4PWlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQ2OTpcXHRcXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00NzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYyMD1pcF9zZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MjE6XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYzMT1pcF9zZXRfZ2V0X3NrYmluZm8oc3RydWN0IGlwX3NldF9za2JpbmZvICpza2JpbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MzI6XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjMzOlxcdFxcdCAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYzNC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjM4PWJvb2xcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjM5OmlwX3NldF9tYXRjaF9leHRlbnNpb25zKHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjQwOlxcdFxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MsIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTY0MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMzNT1zdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzM4LVxcdHN0cnVjdCBtdHlwZV9lbGVtIGQ7XFx0LyogRWxlbWVudCB2YWx1ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzM5OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dDtcXHQvKiBFeHRlbnNpb25zIGZvciBBREQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM0MDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBtZXh0O1xcdC8qIFRhcmdldCBleHRlbnNpb25zIGZvciBBREQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM0MS1cXHR1MzIgZmxhZ3M7XFx0XFx0LyogRmxhZ3MgZm9yIEFERCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD03NDA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQxOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQyOlxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NDMtc3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQ0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzQ1OlxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTk4Nz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODg6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5ODk6XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTkwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE1MS1cXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZWQsIHZhbHVlLCBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNTI6XFx0XFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VleHQsIGV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTUzOlxcdFxcdG1lbWNweShcXHUwMDI2eC1cXHUwMDNlbWV4dCwgbWV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTU0LVxcdFxcdHgtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE3OTptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExODA6XFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE4MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEyODY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI4NzptdHlwZV9kYXRhX21hdGNoKHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI4ODpcXHRcXHQgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHN0cnVjdCBpcF9zZXQgKnNldCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTI4OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzMDE9bXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMwMjpcXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzMDM6XFx0XFx0IHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzA0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTM4Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzg3Om10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzODg6XFx0ICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzODkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTgwPWhhc2hfaXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6ODc6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtODgtXFx0X19iZTMyIGlwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTEwMD1oYXNoX2lwNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDUtXFx0c3RydWN0IGhhc2hfaXA0X2VsZW0gZSA9IHsgMCB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoxMDY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDctXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBob3N0cywgaSA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjE2PWhhc2hfaXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyMi1cXHRzdHJ1Y3QgaGFzaF9pcDZfZWxlbSBlID0geyB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIyMzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMjQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjM0PWhhc2hfaXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIzOS1cXHRzdHJ1Y3QgaGFzaF9pcDZfZWxlbSBlID0geyB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjI0MDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTI0MS1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTg1PWhhc2hfaXBtYWM0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTkwLVxcdHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtIGUgPSB7IC5pcCA9IDAsIHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6OTE6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MTExPWhhc2hfaXBtYWM0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTExNS1cXHRzdHJ1Y3QgaGFzaF9pcG1hYzRfZWxlbSBlID0geyAuaXAgPSAwLCB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjExNjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTExNy1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE5OD1oYXNoX2lwbWFjNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDYtXFx0fTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MjA3OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTIwOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0yMjc9aGFzaF9pcG1hYzZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjM0LVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjIzNTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTIzNi1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz04MD1oYXNoX2lwbWFyazRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6ODc6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMi1cXHRzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjEwMzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDQtXFx0dTMyIGlwLCBpcF90byA9IDAsIGkgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMTk9aGFzaF9pcG1hcms2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMjUtXFx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMjY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIyNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjM2PWhhc2hfaXBtYXJrNl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjQxLVxcdHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjQyOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTI0My1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz05MT1oYXNoX2lwcG9ydDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTk2LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo5NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTgtXFx0Y29uc3Qgc3RydWN0IE1UWVBFICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0xMTI9aGFzaF9pcHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTctXFx0c3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjExODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTktXFx0dTMyIGlwLCBpcF90byA9IDAsIHAgPSAwLCBwb3J0LCBwb3J0X3RvLCBpID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjY0PWhhc2hfaXBwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjY5LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNzA6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI3MS1cXHRjb25zdCBzdHJ1Y3QgTVRZUEUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI4Nj1oYXNoX2lwcG9ydDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5MS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjkyOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5My1cXHR1MzIgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz05MD1oYXNoX2lwcG9ydGlwNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjk2OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTk3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTEwOD1oYXNoX2lwcG9ydGlwNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTMtXFx0c3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoxMTQ6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTUtXFx0dTMyIGlwLCBpcF90byA9IDAsIHAgPSAwLCBwb3J0LCBwb3J0X3RvLCBpID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNjM9aGFzaF9pcHBvcnRpcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjY4LVxcdHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtIGUgPSB7IC5pcCA9IHsgLmFsbCA9IHsgMCB9IH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjY5OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI3MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yODE9aGFzaF9pcHBvcnRpcDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjg2LVxcdHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtIGUgPSB7ICAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4OC1cXHR1MzIgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTM0PWhhc2hfaXBwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTQyLVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxNDM6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE0NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTYwPWhhc2hfaXBwb3J0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTY1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjE2NjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNjctXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBwID0gMCwgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzk0PWhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDAyLVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0MDM6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwNC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9NDIwPWhhc2hfaXBwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDI1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQyNjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00MjctXFx0dTMyIHBvcnQsIHBvcnRfdG87XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTczPWhhc2hfbWFjNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNzgtXFx0c3RydWN0IGhhc2hfbWFjNF9lbGVtIGUgPSB7IHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjc5OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy04MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9OTY9aGFzaF9tYWM0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0xMDAtXFx0c3RydWN0IGhhc2hfbWFjNF9lbGVtIGUgPSB7IHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjEwMTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0xMDItXFx0aW50IHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTEzPWhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIxLVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMjI6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEyMy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTM2PWhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQxLVxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQyOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0My1cXHR1MzIgaXAgPSAwLCBpcF90byA9IDAsIGkgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yODc9aGFzaF9uZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yOTUtXFx0fTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI5NjpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjk3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zMTQtXFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzozMTU6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE2LVxcdGludCByZXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE2NS1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNjY6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTY3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTE5Nz1oYXNoX25ldGlmYWNlNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0yMDItXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoyMDM6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0yMDQtXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwLCBpID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNzc9aGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzg2LVxcdH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zODgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9NDE2PWhhc2hfbmV0aWZhY2U2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQyMC1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSywgLmVsZW0gPSAxIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjQyMTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTQyMi1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xNDM9aGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDktXFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxNTA6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE1MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTY4PWhhc2hfbmV0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTczLVxcdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTc0OlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3NS1cXHR1MzIgaXAgPSAwLCBpcF90byA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM4ND1oYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM5MC1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM5MTpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzkyLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz00MTQ9aGFzaF9uZXRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy00MTgtXFx0c3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzo0MTk6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtNDIwLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMjk9aGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzNy1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEzODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzOS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTE1ND1oYXNoX25ldHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU5LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTYwOlxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xNjEtXFx0dTMyIHBvcnQsIHBvcnRfdG8sIHAgPSAwLCBpcCA9IDAsIGlwX3RvID0gMCwgaSA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNDk9aGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1Ny1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM1ODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTM3ND1oYXNoX25ldHBvcnQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzc5LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgIC0gMSB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM4MDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9VRVhUKHNldCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzgxLVxcdHUzMiBwb3J0LCBwb3J0X3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MTUwPWhhc2hfbmV0cG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNTYtXFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE1NzpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE1OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE4OT1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTk0LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxOTU6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5Ni1cXHR1MzIgaXAgPSAwLCBpcF90byA9IDAsIHAgPSAwLCBwb3J0LCBwb3J0X3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDQ3PWhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00NTMtXFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQ1NDpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ3Nj1oYXNoX25ldHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgxLVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0ODI6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ4My1cXHR1MzIgcG9ydCwgcG9ydF90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NDk9bGlzdF9zZXRfa3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTAtXFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjUxOlxcdCAgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTUyLXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTUzLVxcdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTQ6XFx0c3RydWN0IGlwX3NldF9leHQgKm1leHQgPSBcXHUwMDI2b3B0LVxcdTAwM2VleHQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NS1cXHRzdHJ1Y3Qgc2V0X2VsZW0gKmU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTc0PWxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNzUtXFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NzY6XFx0ICAgICAgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy03Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTk0PWxpc3Rfc2V0X2tkZWwoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtOTUtXFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6OTY6XFx0ICAgICAgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy05Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTExND1saXN0X3NldF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE3LXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjExODpcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE5LVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xODQ9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTg1Omxpc3Rfc2V0X3V0ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxODY6XFx0ICAgICAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xODcte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMjA9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjIyMTpsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjIyLVxcdFxcdFxcdCBzdHJ1Y3Qgc2V0X2VsZW0gKmUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIzNT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzY6bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjM3OlxcdCAgICAgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0zMjA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzIxOmxpc3Rfc2V0X3VkZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjMyMjpcXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzIzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUzPWxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zNTgtXFx0c3RydWN0IHNldF9hZHRfZWxlbSBlID0geyAucmVmaWQgPSBJUFNFVF9JTlZBTElEX0lEIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTk6XFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzYwLVxcdHN0cnVjdCBpcF9zZXQgKnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI0OjA0LjIzNzE1OTAxWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjMyMzg0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXplcnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgSVBfU0VUX0lOSVRfS0VYVGAgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBSaWdodCwgdGhhdCdzIHRoZSBDOTkgc3ludGF4LiBXZSdyZSBkaXJlY3RseSBzZXR0aW5nIGAuYnl0ZXNgLCBgLnBhY2tldHNgLCBgLnRhcmdldGAsIGFuZCBgLnRpbWVvdXRgIHdpdGhpbiB0aGUgc3RydWN0LiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGJ5IGV4cGxpY2l0bHkgc2V0dGluZyB0aG9zZSBmaWVsZHMsIEM5OSBndWFyYW50ZWVzIHRoYXQgYW55IHVubWVudGlvbmVkIGZpZWxkcyB3aWxsIGJlIGltcGxpY2l0bHkgemVyb2VkIG91dC4gU28sIHdoaWxlIHdlIGFyZW4ndCBzZWVpbmcgaXQgZGlyZWN0bHksIHRoZSBgZXh0LmNvbW1lbnQgPSBOVUxMYCBwYXJ0IGlzIGVmZmVjdGl2ZWx5IGltcGxpZWQuIFRoaXMgZGVzaWduYXRlZCBpbml0aWFsaXphdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseSBsZWF2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyb3VuZC5cblxuTm93LCBsZXQncyBwaXZvdCB0byBgSVBfU0VUX0lOSVRfVUVYVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBtYWNybyBhY3R1YWxseSBleHBhbmRzIHRvLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBpbml0aWFsaXplciBpcyBjb25zdHJ1Y3RlZC4gSSB3aWxsIGV4YW1pbmUgaXQsIHRvIHVuZGVyc3RhbmQgaWYgaXQgdG9vIHVzZXMgZGVzaWduYXRlZCBpbml0aWFsaXphdGlvbiBhbmQgemVyby1maWxscyB0aGUgcmVtYWluaW5nIG1lbW9yeSwgb3IgaWYgaXQgZXhwbGljaXRseSBzcGVjaWZpZXMgZXZlcnkgZmllbGQgaW4gdGhlIHN0cnVjdCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBhcmUgaGFuZGxpbmcgbWVtb3J5IHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNToyNDowNy4wMDAzOTk3OTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjMwMDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9TRVRfSU5JVF9VRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTUyMz1uZl9pbmV0X2FkZHJfbWFza19pbnBsYWNlKHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC01MzUtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTM2OiNkZWZpbmUgSVBfU0VUX0lOSVRfVUVYVChzZXQpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTUzNy1cXHR7IC5ieXRlcyA9IFVMTE9OR19NQVgsIC5wYWNrZXRzID0gVUxMT05HX01BWCxcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI0OjA3LjEwNjcxNzQ5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMjE0NjcyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpcF9zZXQuaGAgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGlwX3NldC5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDUzNi4gSSBrbm93IHRoaXMgZmlsZSBwcmV0dHkgd2VsbCwgc28gaG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHdoYXRldmVyIHNlY3Rpb24gaXMgcmVsZXZhbnQuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIHNvbWV0aGluZyByZWxhdGl2ZWx5IGltcG9ydGFudCwgb3IgZWxzZSBJIHdvdWxkbid0IGhhdmUgc2luZ2xlZCBvdXQgYSBzcGVjaWZpYyBsaW5lIG51bWJlciBsaWtlIHRoYXQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTYwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MjQ6MTAuMjI4MTg3OTA4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzA6XFx0fVxcbiA1MzE6XFx0XFxuIDUzMjpcXHQjZGVmaW5lIElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldClcXHRcXHRcXHRcXFxcXFxuIDUzMzpcXHRcXHR7IC5ieXRlcyA9IChza2IpLVxcdTAwM2VsZW4sIC5wYWNrZXRzID0gMSwgLnRhcmdldCA9IHRydWUsXFxcXFxcbiA1MzQ6XFx0XFx0ICAudGltZW91dCA9IGlwX3NldF9hZHRfb3B0X3RpbWVvdXQob3B0LCBzZXQpIH1cXG4gNTM1OlxcdFxcbiA1MzY6XFx0I2RlZmluZSBJUF9TRVRfSU5JVF9VRVhUKHNldClcXHRcXHRcXHRcXHRcXFxcXFxuIDUzNzpcXHRcXHR7IC5ieXRlcyA9IFVMTE9OR19NQVgsIC5wYWNrZXRzID0gVUxMT05HX01BWCxcXHRcXFxcXFxuIDUzODpcXHRcXHQgIC50aW1lb3V0ID0gKHNldCktXFx1MDAzZXRpbWVvdXQgfVxcbiA1Mzk6XFx0XFxuIDU0MDpcXHQjZGVmaW5lIElQU0VUX0NPTkNBVChhLCBiKVxcdFxcdGEjI2JcXG4gNTQxOlxcdCNkZWZpbmUgSVBTRVRfVE9LRU4oYSwgYilcXHRcXHRJUFNFVF9DT05DQVQoYSwgYilcXG4gNTQyOlxcdFxcbiA1NDM6XFx0I2VuZGlmIC8qX0lQX1NFVF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI0OjEwLjIyODMyNDU4OFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzkwNzk0NjcxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogUHJldmVudGluZyBDb21tZW50IENvcnJ1cHRpb24gaW4gQml0bWFwIFNldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYElQX1NFVF9JTklUX1VFWFRgIGluaXRpYWxpemVyIHVzZXMgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIG1lYW5pbmcgYW55IHVuc3BlY2lmaWVkIGZpZWxkcywgbGlrZSBgdGFyZ2V0YCwgd2lsbCBiZSB6ZXJvZWQuIFNvLCBieSBkZWZhdWx0LCBgZXh0LVx1MDAzZXRhcmdldGAgaXMgYGZhbHNlYCB3aGVuIGluaXRpYWxpemVkIHRoaXMgd2F5LlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgdGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0YCB0byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBtdHlwZV9hZGRgIHdpdGhpbiBgaXBfc2V0X2JpdG1hcF9nZW4uaGA6XG5cbmBgYGRpZmZcblx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcdTAwMjZcdTAwMjYgIWV4dC1cdTAwM2V0YXJnZXQpXG5cdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KHgsIHNldCksIGV4dCk7XG5gYGBcblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHdoZW4gYSBwYWNrZXQgdHJpZ2dlcmVkIGFuIGBJUFNFVF9BRERgIHZpYSB0aGUgbmV0ZmlsdGVyIGtlcm5lbCB0YXJnZXQgKGBleHQtXHUwMDNldGFyZ2V0ID09IHRydWVgKSwgdGhlIGNvZGUgd291bGQgZXhlY3V0ZSBgaXBfc2V0X2luaXRfY29tbWVudGAgcmVnYXJkbGVzcywgZXZlbiB3aGVuIGBleHQtXHUwMDNlY29tbWVudGAgd2FzIGBOVUxMYCBmb3Iga2VybmVsLWFkZGVkIHRhcmdldHMgKGthZHQpLiBUaGlzIG1lYW50IHRoYXQgYGlwX3NldF9pbml0X2NvbW1lbnRgIHdvdWxkIGluYWR2ZXJ0ZW50bHkgZnJlZSBhbnkgKmV4aXN0aW5nKiBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCwgYmVjYXVzZSBgbGVuYCB3aWxsIGJlIHplcm8uIFRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgYGlwX3NldF9pbml0X2NvbW1lbnRgIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gdXNlci1zcGFjZSBhZGRzICh1YWRkKSB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24sIGFuZCBrYWR0IHRhcmdldHMgc2hvdWxkbid0IGJlIHRvdWNoaW5nIGNvbW1lbnRzIGF0IGFsbC4gVGhlIGVxdWl2YWxlbnQgbG9naWMgaGFkIGFscmVhZHkgYmVlbiBpbXBsZW1lbnRlZCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHBhdGNoIGlzIHNpbXBseSBicmluZ2luZyBgaXBfc2V0X2JpdG1hcF9nZW4uaGAgaW50byBhbGlnbm1lbnQgd2l0aCB0aGF0IGV4aXN0aW5nLCBjb3JyZWN0IGJlaGF2aW9yLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgcGF0Y2ggZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2U6KiogTm8uIFRoaXMgcGF0Y2ggKm9ubHkqIGFkZHMgYSBjb25kaXRpb24uIEl0IGRvZXNuJ3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGUgYGV4dC1cdTAwM2V0YXJnZXRgIGZpZWxkIGlzIGEgYGJvb2xgIGluIGBzdHJ1Y3QgaXBfc2V0X2V4dGAuIEl0J3MgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBieSBgSVBfU0VUX0lOSVRfS0VYVGAgKHNldHRpbmcgaXQgdG8gYHRydWVgKSBvciBgSVBfU0VUX0lOSVRfVUVYVGAgKHdoZXJlIGl0IGRlZmF1bHRzIHRvIGBmYWxzZWApLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogTm8uIFRoZSBwYXRjaCBza2lwcyBhbiBpbml0aWFsaXphdGlvbiBjYWxsOyBpdCBkb2Vzbid0IGNyZWF0ZSBvbmUuXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBOby5cblxuU28sIGluIHN1bW1hcnk6XG5cbiogICBUaGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgSXQgKmRvZXMqIGZpeCBhIGxvZ2ljIGJ1Zy9tZW1vcnkgbGVhay91bmludGVuZGVkIGRlbGV0aW9uIHRoYXQgd2FzIHByZXNlbnQgd2hlcmUga2VybmVsIHRhcmdldCBpbnZvY2F0aW9ucyBjb3VsZCBkZWxldGUgZXhpc3RpbmcgZWxlbWVudCBjb21tZW50cy5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIHVuaXQgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGNyZWF0ZWQgb3IgZXhwb3NlZC5cbiogICBgTmVlZHNLTVNBTmA6IGBmYWxzZWBcbiogICBSZWFzb246IENsZWFyIGNvbnRyYXN0IGJldHdlZW4gS0FTQU4vZ2VuZXJpYyB0ZXN0aW5nIGFuZCBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDksIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjI1OjM4LjEzNjI3NTA4M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgbXR5cGVfYWRkKClgIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhgIHRvIGNoZWNrIGAhZXh0LVxcdTAwM2V0YXJnZXRgIGJlZm9yZSBjYWxsaW5nIGBpcF9zZXRfaW5pdF9jb21tZW50KClgLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgcGF0dGVybiBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGlzIHByZXZlbnRzIGtlcm5lbCBpcHRhYmxlcyBTRVQgdGFyZ2V0IGFjdGlvbnMgZnJvbSBjbGVhcmluZy9tb2RpZnlpbmcgZWxlbWVudCBjb21tZW50cy5cXG5cXG4tIEFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBpcF9zZXRfZXh0YCBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBJUF9TRVRfSU5JVF9LRVhUYCBvciBgSVBfU0VUX0lOSVRfVUVYVGApLCB3aGljaCBmdWxseSB6ZXJvIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMsIGVuc3VyaW5nIGBleHQtXFx1MDAzZXRhcmdldGAgYW5kIGFsbCBvdGhlciBmaWVsZHMgYXJlIHdlbGwtZGVmaW5lZCBhbmQgbmV2ZXIgdW5pbml0aWFsaXplZC5cXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZSBlbWlzc2lvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIFRoZSBidWcgZml4ZWQgaXMgYSBsb2dpYyBpc3N1ZSAodW5pbnRlbmRlZCBjb21tZW50IGRlbGV0aW9uIGR1cmluZyBrZXJuZWwtc3BhY2UgcGFja2V0IG1hdGNoaW5nL3RhcmdldCBleGVjdXRpb24pLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBtdHlwZV9hZGQoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaGAgdG8gY2hlY2sgYCFleHQtXFx1MDAzZXRhcmdldGAgYmVmb3JlIGNhbGxpbmcgYGlwX3NldF9pbml0X2NvbW1lbnQoKWAsIG1hdGNoaW5nIHRoZSBleGlzdGluZyBwYXR0ZXJuIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoaXMgcHJldmVudHMga2VybmVsIGlwdGFibGVzIFNFVCB0YXJnZXQgYWN0aW9ucyBmcm9tIGNsZWFyaW5nL21vZGlmeWluZyBlbGVtZW50IGNvbW1lbnRzLlxcblxcbi0gQWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGlwX3NldF9leHRgIGFyZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYElQX1NFVF9JTklUX0tFWFRgIG9yIGBJUF9TRVRfSU5JVF9VRVhUYCksIHdoaWNoIGZ1bGx5IHplcm8gYWxsIHVubWVudGlvbmVkIGZpZWxkcywgZW5zdXJpbmcgYGV4dC1cXHUwMDNldGFyZ2V0YCBhbmQgYWxsIG90aGVyIGZpZWxkcyBhcmUgd2VsbC1kZWZpbmVkIGFuZCBuZXZlciB1bmluaXRpYWxpemVkLlxcbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlIGVtaXNzaW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcbi0gVGhlIGJ1ZyBmaXhlZCBpcyBhIGxvZ2ljIGlzc3VlICh1bmludGVuZGVkIGNvbW1lbnQgZGVsZXRpb24gZHVyaW5nIGtlcm5lbC1zcGFjZSBwYWNrZXQgbWF0Y2hpbmcvdGFyZ2V0IGV4ZWN1dGlvbikuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwr9nn[1] Phase: Succeeded StartedAt: 2026-09-06 05:25:49 +0000 UTC FinishedAt: 2026-09-06 05:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 05:25:49 +0000 UTC FinishedAt: 2026-09-06 05:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2] Phase: Succeeded StartedAt: 2026-09-06 05:25:49 +0000 UTC FinishedAt: 2026-09-06 06:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-06 05:25:49 +0000 UTC FinishedAt: 2026-09-06 06:35:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:25:49 +0000 UTC FinishedAt: 2026-09-06 05:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:25:49 +0000 UTC FinishedAt: 2026-09-06 05:25:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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-workflowwr9nn/series-workflowwr9nn-convert-artifact-1353820552/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:25:59 +0000 UTC FinishedAt: 2026-09-06 05:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:25:59 +0000 UTC FinishedAt: 2026-09-06 05:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5eeb1f03-a67d-4318-9297-4b6f513e1060,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-workflowwr9nn/series-workflowwr9nn-convert-artifact-1353820552/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": "dac15b41-698d-4c5a-b692-db85026c4fb4", "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-workflowwr9nn/series-workflowwr9nn-build-action-4112221182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:25:59 +0000 UTC FinishedAt: 2026-09-06 05:51:22 +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:*5eeb1f03-a67d-4318-9297-4b6f513e1060,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-workflowwr9nn/series-workflowwr9nn-convert-artifact-1353820552/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": "dac15b41-698d-4c5a-b692-db85026c4fb4", "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-workflowwr9nn/series-workflowwr9nn-build-action-4112221182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:51:32 +0000 UTC FinishedAt: 2026-09-06 05:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:51:32 +0000 UTC FinishedAt: 2026-09-06 05:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:51:32 +0000 UTC FinishedAt: 2026-09-06 05:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:51:32 +0000 UTC FinishedAt: 2026-09-06 05:51:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-workflowwr9nn/series-workflowwr9nn-convert-artifact-33840495/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:51:42 +0000 UTC FinishedAt: 2026-09-06 05:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:51:42 +0000 UTC FinishedAt: 2026-09-06 05:53:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dac15b41-698d-4c5a-b692-db85026c4fb4,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-workflowwr9nn/series-workflowwr9nn-build-action-4112221182/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-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:53:23 +0000 UTC FinishedAt: 2026-09-06 05:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:53:23 +0000 UTC FinishedAt: 2026-09-06 05:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:53:23 +0000 UTC FinishedAt: 2026-09-06 06:20:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:53:23 +0000 UTC FinishedAt: 2026-09-06 06:20:02 +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:*5eeb1f03-a67d-4318-9297-4b6f513e1060,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-workflowwr9nn/series-workflowwr9nn-convert-artifact-33840495/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": "03175e94-b398-44e1-8ce3-f603979d7f9c", "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-workflowwr9nn/series-workflowwr9nn-build-action-1327747331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 05:53:23 +0000 UTC FinishedAt: 2026-09-06 06:19:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5eeb1f03-a67d-4318-9297-4b6f513e1060,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-workflowwr9nn/series-workflowwr9nn-convert-artifact-33840495/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": "03175e94-b398-44e1-8ce3-f603979d7f9c", "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-workflowwr9nn/series-workflowwr9nn-build-action-1327747331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:20:02 +0000 UTC FinishedAt: 2026-09-06 06:20:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:20:02 +0000 UTC FinishedAt: 2026-09-06 06:20:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:20:02 +0000 UTC FinishedAt: 2026-09-06 06:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:20:02 +0000 UTC FinishedAt: 2026-09-06 06:21:40 +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:*03175e94-b398-44e1-8ce3-f603979d7f9c,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-workflowwr9nn/series-workflowwr9nn-build-action-1327747331/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-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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: Failed StartedAt: 2026-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:35:47 +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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"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:*dac15b41-698d-4c5a-b692-db85026c4fb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03175e94-b398-44e1-8ce3-f603979d7f9c,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-workflowwr9nn/series-workflowwr9nn-build-action-4112221182/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-workflowwr9nn/series-workflowwr9nn-build-action-1327747331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:22:10 +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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"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-workflowwr9nn/series-workflowwr9nn-convert-artifact-498242600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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-09-06 06:22:04 +0000 UTC FinishedAt: 2026-09-06 06:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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: Failed StartedAt: 2026-09-06 06:22:14 +0000 UTC FinishedAt: 2026-09-06 06:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr9nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"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":["bitmap_ip_add","bitmap_ipmac_add","bitmap_port_add","bitmap_ip_kadt","bitmap_ipmac_kadt","bitmap_port_kadt","bitmap_ip_uadt","bitmap_ipmac_uadt","bitmap_port_uadt","ip_set_init_comment"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT","NETFILTER","NETFILTER_XT_SET"],"series_id":"a38ada7e-71dd-4b01-ac04-41235b1744df","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: Error StartedAt: 2026-09-06 06:22:14 +0000 UTC FinishedAt: 2026-09-06 06:35:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dac15b41-698d-4c5a-b692-db85026c4fb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03175e94-b398-44e1-8ce3-f603979d7f9c,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-workflowwr9nn/series-workflowwr9nn-build-action-4112221182/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-workflowwr9nn/series-workflowwr9nn-build-action-1327747331/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-workflowwr9nn/series-workflowwr9nn-convert-artifact-498242600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil