Name: series-workflowsrmwx Phase: Succeeded StartedAt: 2026-09-09 15:43:36 +0000 UTC FinishedAt: 2026-09-09 20:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[0] Phase: Succeeded StartedAt: 2026-09-09 15:43:36 +0000 UTC FinishedAt: 2026-09-09 16:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 15:43:36 +0000 UTC FinishedAt: 2026-09-09 16:41:01 +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": "7a099b347fef536a84068076e2d384f044e5cfc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "IP_NF_IPTABLES_LEGACY", "IP6_NF_IPTABLES_LEGACY", "IP_NF_ARPTABLES", "NETFILTER_XTABLES_COMPAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7a099b347fef536a84068076e2d384f044e5cfc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "IP_NF_IPTABLES_LEGACY", "IP6_NF_IPTABLES_LEGACY", "IP_NF_ARPTABLES", "NETFILTER_XTABLES_COMPAT" ], "series_id": "c82e66ad-a1f8-40b9-add9-717f129c8f63" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "copy_entries_to_user", "get_entries", "get_info", "compat_copy_entries_to_user", "compat_get_entries", "do_ipt_get_ctl", "do_ip6t_get_ctl", "do_arpt_get_ctl" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9JUFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9BUlBUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfQ09NUEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9lbnRyaWVzX3RvX3VzZXImIzM0OywKICAgICYjMzQ7Z2V0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7Z2V0X2luZm8mIzM0OywKICAgICYjMzQ7Y29tcGF0X2NvcHlfZW50cmllc190b191c2VyJiMzNDssCiAgICAmIzM0O2NvbXBhdF9nZXRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtkb19pcHRfZ2V0X2N0bCYjMzQ7LAogICAgJiMzNDtkb19pcDZ0X2dldF9jdGwmIzM0OywKICAgICYjMzQ7ZG9fYXJwdF9nZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXG5cbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJiMzOTtmYXVsdGVkJiMzOTsgYW5kICYjMzk7cmV0JiMzOTsgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tvcHQgcmV0cmlldmFsIHBhdGhzIGluIGxlZ2FjeSBhcnBfdGFibGVzLCBpcF90YWJsZXMsIGFuZCBpcDZfdGFibGVzLiBJdCBhZGRzIHBhZ2VmYXVsdF9kaXNhYmxlKCkvcGFnZWZhdWx0X2VuYWJsZSgpIGFyb3VuZCB1c2VyIGNvcGllcyB3aGlsZSBob2xkaW5nIHh0X3RhYmxlIGxvY2tzLCBhZGRzIGZhdWx0X2luX3dyaXRlYWJsZSgpIHJldHJ5IGhhbmRsaW5nIGluIGdldF9lbnRyaWVzL2NvbXBhdF9nZXRfZW50cmllcywgYW5kIG1vdmVzIGNvcHlfdG9fdXNlciBvdXRzaWRlIGNyaXRpY2FsIGxvY2sgc2VjdGlvbnMgaW4gZ2V0X2luZm8uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZywgcGFnZSBmYXVsdCwgYW5kIGVycm9yIGhhbmRsaW5nIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiMzQxMzEyMmFlNDNiZjVmNWZmYmRlNWJmMGZlYWMxYWM0ZmRkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE2OjM5OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG5pbmRleCBkYjMwN2ZhNDlmM2Y2Li43YjQzMjY5YWE2YjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiBcbkBAIC02OTUsNiAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuJiM0MztcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbkBAIC03MTksMTIgJiM0Mzs3MjEsMTQgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbiYjNDM7XHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XG4gXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4gXHRpbnQgcmV0O1xuQEAgLTczOCw3ICYjNDM7NzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICYjMzk7XFwwJiMzOTs7XG4gXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgbmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuLVx0XHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuIFxuIFx0XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbkBAIC03NTEsMTUgJiM0Mzs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdHJldCA9IDA7XG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC03NjksNiAmIzQzOzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGFycHRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC03NzksNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuIFxuJiM0MzsgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTc5NCw2ICYjNDM7Nzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiYjNDM7XHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4mIzQzO1x0XHRmYXVsdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG5pbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1bWFzay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmhcdTAwM2VcbkBAIC04MjQsNiAmIzQzOzgyNSw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFxuIFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiBcbiYjNDM7XHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xuIFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xuIFx0Zm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgXHUwMDNjIHRvdGFsX3NpemU7IG9mZiAmIzQzOz0gZS1cdTAwM2VuZXh0X29mZnNldCwgbnVtJiM0MzsmIzQzOyl7XG5AQCAtODYxLDYgJiM0Mzs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbiYjNDM7XHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC05NDMsNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sXG4gXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiB7XG4mIzQzO1x0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4gXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4gXHRpbnQgcmV0O1xuQEAgLTk2MCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbi1cdFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcbkBAIC05ODEsMTAgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0XHRpbmZvLnNpemUgPSBwcml2YXRlLVx1MDAzZXNpemU7XG4gXHRcdHN0cnNjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0cmV0ID0gMDtcbiBcbiBcdFx0eHRfdGFibGVfdW5sb2NrKHQpO1xuIFx0XHRtb2R1bGVfcHV0KHQtXHUwMDNlbWUpO1xuQEAgLTk5NCw2ICYjNDM7OTk0LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIFx0XHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xuICNlbmRpZlxuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMDA0LDYgJiM0MzsxMDA2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiYjNDM7XHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTAxMyw2ICYjNDM7MTAxNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiBcbiYjNDM7IHJldHJ5OlxuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTEwMjcsNiAmIzQzOzEwMzEsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuJiM0MztcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbiYjNDM7XHRcdGZhdWx0ZWQgPSB0cnVlO1xuJiM0MztcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xNTYxLDEyICYjNDM7MTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsXG4gXG4gXHRwb3MgPSB1c2VycHRyO1xuIFx0c2l6ZSA9IHRvdGFsX3NpemU7XG4mIzQzO1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XG4gXHRcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXHUwMDI2cG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpJiM0MzsmIzQzOyk7XG4gXHRcdGlmIChyZXQgIT0gMClcbiBcdFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1NzksNiAmIzQzOzE1OTMsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNTkxLDYgJiM0MzsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiBcbiYjNDM7IHJldHJ5OlxuIFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVCk7XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjEwLDYgJiM0MzsxNjI2LDEzIEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiBcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7XG4mIzQzO1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuJiM0MztcdFx0ZmF1bHRlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXHUwMDNlZW50cnl0YWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcbmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFx1MDAzZVxuQEAgLTg0NSw2ICYjNDM7ODQ2LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuJiM0MztcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbkBAIC04ODIsNiAmIzQzOzg4NCw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFx0fVxuIFxuICBmcmVlX2NvdW50ZXJzOlxuJiM0MztcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk2NCw2ICYjNDM7OTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87XG4gXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4gXHRpbnQgcmV0O1xuQEAgLTk4MSw3ICYjNDM7OTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiBcdFx0c3RydWN0IHh0X3RhYmxlX2luZm8gdG1wO1xuQEAgLTEwMDIsMTAgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0cmV0ID0gMDtcbiBcbiBcdFx0eHRfdGFibGVfdW5sb2NrKHQpO1xuIFx0XHRtb2R1bGVfcHV0KHQtXHUwMDNlbWUpO1xuQEAgLTEwMTUsNiAmIzQzOzEwMTUsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4gXHRcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpO1xuICNlbmRpZlxuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMDI1LDYgJiM0MzsxMDI3LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMDM1LDYgJiM0MzsxMDM4LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuIFxuJiM0MzsgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTEwNDksNiAmIzQzOzEwNTMsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiYjNDM7XHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4mIzQzO1x0XHRmYXVsdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTU3NSwxMiAmIzQzOzE1ODcsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxuIFxuIFx0cG9zID0gdXNlcnB0cjtcbiBcdHNpemUgPSB0b3RhbF9zaXplO1xuJiM0MztcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHR4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHByaXZhdGUtXHUwMDNlZW50cmllcywgdG90YWxfc2l6ZSkge1xuIFx0XHRyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsIFx1MDAyNnBvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspO1xuIFx0XHRpZiAocmV0ICE9IDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFxuIFx0dmZyZWUoY291bnRlcnMpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xNTkzLDYgJiM0MzsxNjA3LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNjA1LDYgJiM0MzsxNjIwLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4gXG4mIzQzOyByZXRyeTpcbiBcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjI0LDYgJiM0MzsxNjQwLDEzIEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4gXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcbiYjNDM7XHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4mIzQzO1x0XHRmYXVsdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVBfTkZfSVBUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0lQNl9ORl9JUFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVBfTkZfQVJQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfZW50cmllc190b191c2VyJiMzNDssCiAgICAmIzM0O2dldF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2dldF9pbmZvJiMzNDssCiAgICAmIzM0O2NvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlciYjMzQ7LAogICAgJiMzNDtjb21wYXRfZ2V0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7ZG9faXB0X2dldF9jdGwmIzM0OywKICAgICYjMzQ7ZG9faXA2dF9nZXRfY3RsJiMzNDssCiAgICAmIzM0O2RvX2FycHRfZ2V0X2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzb2Nrb3B0IHJldHJpZXZhbCBwYXRocyBpbiBsZWdhY3kgYXJwX3RhYmxlcywgaXBfdGFibGVzLCBhbmQgaXA2X3RhYmxlcy4gSXQgYWRkcyBwYWdlZmF1bHRfZGlzYWJsZSgpL3BhZ2VmYXVsdF9lbmFibGUoKSBhcm91bmQgdXNlciBjb3BpZXMgd2hpbGUgaG9sZGluZyB4dF90YWJsZSBsb2NrcywgYWRkcyBmYXVsdF9pbl93cml0ZWFibGUoKSByZXRyeSBoYW5kbGluZyBpbiBnZXRfZW50cmllcy9jb21wYXRfZ2V0X2VudHJpZXMsIGFuZCBtb3ZlcyBjb3B5X3RvX3VzZXIgb3V0c2lkZSBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGluIGdldF9pbmZvLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcsIHBhZ2UgZmF1bHQsIGFuZCBlcnJvciBoYW5kbGluZyBpbiByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNjozOTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IGRiMzA3ZmE0OWYzZjYuLjdiNDMyNjlhYTZiMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCkBAIC02OTUsNiAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCiAKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0mZ3Q7ZW50cmllczsKIAomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCS8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi8KIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgJmx0OyB0b3RhbF9zaXplOyBvZmYgJiM0Mzs9IGUtJmd0O25leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXsKQEAgLTcxOSwxMiAmIzQzOzcyMSwxNCBAQCBzdGF0aWMgaW50IGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTczOCw3ICYjNDM7NzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAluYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAmIzM5O1wwJiMzOTs7CiAJdCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBhcnB0X2dldGluZm8gaW5mbzsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwogCiAJCW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC03NTEsMTUgJiM0Mzs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gMDsKJiM0MzsJCXJldCA9IDA7CiAJCXh0X3RhYmxlX3VubG9jayh0KTsKIAkJbW9kdWxlX3B1dCh0LSZndDttZSk7CiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQomIzQzOwkJcmV0ID0gLUVGQVVMVDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjksNiAmIzQzOzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBnZXQ7CiAJc3RydWN0IHh0X3RhYmxlICp0OwomIzQzOwlib29sIGZhdWx0ZWQgPSBmYWxzZTsKIAogCWlmICgqbGVuICZsdDsgc2l6ZW9mKGdldCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc5LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgZ2V0Lm5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKQEAgLTc5NCw2ICYjNDM7Nzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb2NfZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVtYXNrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oJmd0OwpAQCAtODI0LDYgJiM0Mzs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLSZndDtlbnRyaWVzOwogCiYjNDM7CXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJLyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqLwogCS8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi8KIAlmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiAmbHQ7IHRvdGFsX3NpemU7IG9mZiAmIzQzOz0gZS0mZ3Q7bmV4dF9vZmZzZXQsIG51bSYjNDM7JiM0MzspewpAQCAtODYxLDYgJiM0Mzs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAl9CiAKICBmcmVlX2NvdW50ZXJzOgomIzQzOwlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CiB9CkBAIC05NDMsNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sCiAKIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiB7CiYjNDM7CXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk2MCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVAogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CkBAIC05ODEsMTAgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCQlpbmZvLnNpemUgPSBwcml2YXRlLSZndDtzaXplOwogCQlzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtOTk0LDYgJiM0Mzs5OTQsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKQogCQl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNCw2ICYjNDM7MTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDEzLDYgJiM0MzsxMDE2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwpAQCAtMTAyNyw2ICYjNDM7MTAzMSwxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTYxLDEyICYjNDM7MTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU3OSw2ICYjNDM7MTU5Myw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAlpbnQgcmV0OwogCXN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTkxLDYgJiM0MzsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQpOwogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKQEAgLTE2MTAsNiAmIzQzOzE2MjYsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTsKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1bWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgmZ3Q7CkBAIC04NDUsNiAmIzQzOzg0Niw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtJmd0O2VudHJpZXM7CiAKJiM0MzsJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAkvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovCiAJLyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqLwogCWZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmICZsdDsgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLSZndDtuZXh0X29mZnNldCwgbnVtJiM0MzsmIzQzOyl7CkBAIC04ODIsNiAmIzQzOzg4NCw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2NCw2ICYjNDM7OTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk4MSw3ICYjNDM7OTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewotCQlzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUCiAJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKQEAgLTEwMDIsMTAgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtMTAxNSw2ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiAJaWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpCiAJCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAyNSw2ICYjNDM7MTAyNyw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCWludCByZXQ7CiAJc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMzUsNiAmIzQzOzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAogCWdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICYjMzk7XDAmIzM5OzsKIAomIzQzOyByZXRyeToKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CkBAIC0xMDQ5LDYgJiM0MzsxMDUzLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTc1LDEyICYjNDM7MTU4NywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU5Myw2ICYjNDM7MTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2MDUsNiAmIzQzOzE2MjAsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTsKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewpAQCAtMTYyNCw2ICYjNDM7MTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7CiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCB0b3VjaGVzIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AsIGFsbCB3aXRoaW4gdGhlIG5ldGZpbHRlciByZWFsbS4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgdGhpcyBpcyBwcm9iYWJseSBhYm91dCBhIGNvbnNpc3RlbnQgY2hhbmdlIGFjcm9zcyBJUHY0LCBJUHY2IGFuZCBBUlAgdGFibGUgaGFuZGxpbmcgd2hpY2ggaXMgYW4gZXhwZWN0ZWQgcmVmYWN0b3IuCgpQZWVsaW5nIGJhY2sgdGhlIGxheWVycywgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc29tZSBjb21tb24gcGF0dGVybnMgZW1lcmdpbmcuIEluIGFsbCB0aHJlZSBmaWxlcywgYGNvcHlfZW50cmllc190b191c2VyYCBub3cgaW5jbHVkZXMgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGFuZCBgcGFnZWZhdWx0X2VuYWJsZSgpYCBjYWxscy4gQWxzbywgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24gaGFzIGhhZCB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBgeHRfdGFibGVfdW5sb2NrYCBzZWN0aW9uLiBBbmQgYSByZXRyeSBsb29wIHdpdGggYGZhdWx0X2luX3dyaXRlYWJsZSgpYCBoYXMgYmVlbiBhZGRlZCB0byBgZ2V0X2VudHJpZXNgLiBUaGVyZSBhcmUgc2ltaWxhciBjaGFuZ2VzIGZvciB0aGUgY29tcGF0IGZ1bmN0aW9ucyBpbiBpcF90YWJsZXMgYW5kIGlwNl90YWJsZXMuIFRoaXMgc3Ryb25nbHkgaW5kaWNhdGVzIHNvbWUgY29uY2VybiBhcm91bmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzIGR1cmluZyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gcmVhZGluZyBuZXRmaWx0ZXIgdGFibGUgZW50cmllcy4KClNvLCB3aHkgYXJlIHRoZXNlIGNoYW5nZXMgaGVyZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBsb2NraW5nIGlzc3VlcyBkdXJpbmcgZGF0YSB0cmFuc2Zlciwgc28gbGV0JiMzOTtzIGNoZWNrIHdoYXQgbG9ja3MgYXJlIGJlaW5nIGhlbGQgd2hpbGUgYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9lbnRyaWVzYCwgYW5kIHRoZWlyIGNvbXBhdHJpb3RzIGFyZSBhY3RpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBHcmVwcGluZyBvciByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBpcF90YWJsZXMuY2AgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgd2l0aCB0aGVpciBhc3NvY2lhdGVkIGxvY2tzLiBMb29rcyBsaWtlIHdlJiMzOTtyZSB0cnlpbmcgdG8gbWFrZSBkYXRhIHRyYW5zZmVycyBtb3JlIHJvYnVzdCB0byBoYW5kbGUgcGFnZSBmYXVsdHMsIGFuZCBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGJ5IGNhcmVmdWxseSBtYW5hZ2luZyBsb2NraW5nLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBpbXByb3ZlbWVudCBpbiB0ZXJtcyBvZiByb2J1c3RuZXNzLCBidXQgdGhlIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGFjcm9zcyB0aGUgZmlsZXMgbWVhbnMgY2FyZWZ1bCByZXZpZXdpbmcgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRcdHVuc2lnbmVkIGludCBvZmYsIG51bTtcbiA4MTY6XHRcdGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmU7XG4gODE3Olx0XHRzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzO1xuIDgxODpcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS1cdTAwM2Vwcml2YXRlO1xuIDgxOTpcdFx0aW50IHJldCA9IDA7XG4gODIwOlx0XHRjb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5O1xuIDgyMTpcdFxuIDgyMjpcdFx0Y291bnRlcnMgPSBhbGxvY19jb3VudGVycyh0YWJsZSk7XG4gODIzOlx0XHRpZiAoSVNfRVJSKGNvdW50ZXJzKSlcbiA4MjQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xuIDgyNTpcdFxuIDgyNjpcdFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiA4Mjc6XHRcbiA4Mjg6XHRcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gODI5Olx0XHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gODMwOlx0XHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gODMxOlx0XHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbiA4MzI6XHRcdFx0dW5zaWduZWQgaW50IGk7XG4gODMzOlx0XHRcdGNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbTtcbiA4MzQ6XHRcdFx0Y29uc3Qgc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdDtcbiA4MzU6XHRcbiA4MzY6XHRcdFx0ZSA9IGxvY19jcHVfZW50cnkgJiM0Mzsgb2ZmO1xuIDgzNzpcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJwdHIgJiM0Mzsgb2ZmLCBlLFxuIDgzODpcdFx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSkgfHxcbiA4Mzk6XHRcdFx0ICAgIGNvcHlfdG9fdXNlcih1c2VycHRyICYjNDM7IG9mZlxuIDg0MDpcdFx0XHRcdFx0ICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSxcbiA4NDE6XHRcdFx0XHRcdCBcdTAwMjZjb3VudGVyc1tudW1dLFxuIDg0MjpcdFx0XHRcdFx0IHNpemVvZihjb3VudGVyc1tudW1dKSkpIHtcbiA4NDM6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDg0NDpcdFx0XHRcdGdvdG8gZnJlZV9jb3VudGVycztcbiA4NDU6XHRcdFx0fVxuIDg0NjpcdFxuIDg0NzpcdFx0XHRmb3IgKGkgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSk7XG4gODQ4Olx0XHRcdCAgICAgaSBcdTAwM2MgZS1cdTAwM2V0YXJnZXRfb2Zmc2V0O1xuIDg0OTpcdFx0XHQgICAgIGkgJiM0Mzs9IG0tXHUwMDNldS5tYXRjaF9zaXplKSB7XG4gODUwOlx0XHRcdFx0bSA9ICh2b2lkICopZSAmIzQzOyBpO1xuIDg1MTpcdFxuIDg1MjpcdFx0XHRcdGlmICh4dF9tYXRjaF90b191c2VyKG0sIHVzZXJwdHIgJiM0Mzsgb2ZmICYjNDM7IGkpKSB7XG4gODUzOlx0XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDg1NDpcdFx0XHRcdFx0Z290byBmcmVlX2NvdW50ZXJzO1xuIDg1NTpcdFx0XHRcdH1cbiA4NTY6XHRcdFx0fVxuIDg1NzpcdFxuIDg1ODpcdFx0XHR0ID0gaXB0X2dldF90YXJnZXRfYyhlKTtcbiA4NTk6XHRcdFx0aWYgKHh0X3RhcmdldF90b191c2VyKHQsIHVzZXJwdHIgJiM0Mzsgb2ZmICYjNDM7IGUtXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcbiA4NjA6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDg2MTpcdFx0XHRcdGdvdG8gZnJlZV9jb3VudGVycztcbiA4NjI6XHRcdFx0fVxuIDg2MzpcdFx0fVxuIDg2NDpcdFxuIDg2NTpcdCBmcmVlX2NvdW50ZXJzOlxuIDg2NjpcdFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIDg2NzpcdFx0dmZyZWUoY291bnRlcnMpO1xuIDg2ODpcdFx0cmV0dXJuIHJldDtcbiA4Njk6XHR9XG4gODcwOlx0XG4gODcxOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiA4NzI6XHRzdGF0aWMgdm9pZCBjb21wYXRfc3RhbmRhcmRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIDg3MzpcdHtcbiA4NzQ6XHRcdGludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAzOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBgZ2V0X2VudHJpZXNgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBub3cgb24gdGhlIGBnZXRfZW50cmllc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgY29udGV4dD8gV2hhdCBkYXRhIHN0cnVjdHVyZSBpcyBpdCBvcGVyYXRpbmcgb24/IElzIHRoaXMgYSBzdGFuZGFyZCByZXRyaWV2YWwgbWV0aG9kLCBhIHNwZWNpYWxpemVkIHF1ZXJ5LCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBhcmFtZXRlcnMgaXQgYWNjZXB0cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGFnaW5hdGlvbiwgZmlsdGVyaW5nIGJ5IHNwZWNpZmljIGNyaXRlcmlhIChkYXRlLCBhdXRob3IsIGtleXdvcmQsIGV0Yy4pLCBzb3J0aW5nIG9wdGlvbnM/IFdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIOKAkyBhIGxpc3QsIGEgZGljdGlvbmFyeSwgcGVyaGFwcyBhbiBpdGVyYXRvciBmb3IgaGFuZGxpbmcgbGFyZ2UgZGF0YXNldHMgZWZmaWNpZW50bHk/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IGl0cyB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBEb2VzIGl0IGhpdCBhIGRhdGFiYXNlPyBJcyBpdCBjYWNoZWQ/IFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBmb3IgYm90dGxlbmVja3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGFzc2VzcyBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0fVxuMTAwMTpcdFxuMTAwMjpcdHN0YXRpYyBpbnRcbjEwMDM6XHRnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuMTAwNDpcdFx0ICAgIGNvbnN0IGludCAqbGVuKVxuMTAwNTpcdHtcbjEwMDY6XHRcdGludCByZXQ7XG4xMDA3Olx0XHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcbjEwMDg6XHRcdHN0cnVjdCB4dF90YWJsZSAqdDtcbjEwMDk6XHRcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuMTAxMDpcdFxuMTAxMTpcdFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuMTAxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMTM6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZnZXQsIHVwdHIsIHNpemVvZihnZXQpKSAhPSAwKVxuMTAxNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjEwMTU6XHRcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzKSAmIzQzOyBnZXQuc2l6ZSlcbjEwMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDE3Olx0XHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuMTAxODpcdFxuMTAxOTpcdCByZXRyeTpcbjEwMjA6XHRcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG4xMDIxOlx0XHRpZiAoIUlTX0VSUih0KSkge1xuMTAyMjpcdFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbjEwMjM6XHRcdFx0aWYgKGdldC5zaXplID09IHByaXZhdGUtXHUwMDNlc2l6ZSlcbjEwMjQ6XHRcdFx0XHRyZXQgPSBjb3B5X2VudHJpZXNfdG9fdXNlcihwcml2YXRlLVx1MDAzZXNpemUsXG4xMDI1Olx0XHRcdFx0XHRcdFx0ICAgdCwgdXB0ci1cdTAwM2VlbnRyeXRhYmxlKTtcbjEwMjY6XHRcdFx0ZWxzZVxuMTAyNzpcdFx0XHRcdHJldCA9IC1FQUdBSU47XG4xMDI4Olx0XG4xMDI5Olx0XHRcdG1vZHVsZV9wdXQodC1cdTAwM2VtZSk7XG4xMDMwOlx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbjEwMzE6XHRcdH0gZWxzZVxuMTAzMjpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuMTAzMzpcdFxuMTAzNDpcdFx0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuMTAzNTpcdFx0XHRmYXVsdGVkID0gdHJ1ZTtcbjEwMzY6XHRcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4xMDM3Olx0XHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuMTAzODpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTAzOTpcdFx0XHRnb3RvIHJldHJ5O1xuMTA0MDpcdFx0fVxuMTA0MTpcdFxuMTA0MjpcdFx0cmV0dXJuIHJldDtcbjEwNDM6XHR9XG4xMDQ0Olx0XG4xMDQ1Olx0c3RhdGljIGludFxuMTA0NjpcdF9fZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcyxcbjEwNDc6XHRcdCAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMsXG4xMDQ4Olx0XHQgICAgIHZvaWQgX191c2VyICpjb3VudGVyc19wdHIpXG4xMDQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRlYnVnZ2luZyB0aGUgYHh0X3RhYmxlX2xvY2tgIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHh0X3RhYmxlX2xvY2tgLCBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSBzdXNwaWNpb3VzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGRpc2FibGluZyBwYWdlIGZhdWx0cyBpcyBhIHJlZCBmbGFnLCBtZWFuaW5nIHRoYXQgdGhlIGNvZGUgKnByb2JhYmx5KiBob2xkcyBzb21lIGtpbmQgb2YgY3JpdGljYWwgc2VjdGlvbi4gTGlrZWx5IGEgc3BpbmxvY2sgb3IgbXV0ZXgsIG1heWJlIGV2ZW4gZGlzYWJsaW5nIHByZWVtcHRpb24gb3IgYm90dG9tLWhhbGYgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQgbmVlZHMgdG8gcHJldmVudCBwYWdlIGZhdWx0cyBpbiB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLCBhbmQgdGhlIHR5cGUgb2YgbG9jayBnaXZlcyBhIGNsdWUgYXMgdG8gd2hlcmUgdG8gbG9vay4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KClRvIHZlcmlmeSBteSBodW5jaCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGB4dF9maW5kX3RhYmxlX2xvY2tgIGlzIHVzZWQgYW5kIGRlZmluZWQuIEkmIzM5O2xsIGVpdGhlciBncmVwIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lIG9yIGxvb2sgYXQgaXRzIGFjdHVhbCBkZWZpbml0aW9uIHRvIGNvbmZpcm0gd2hhdCBraW5kIG9mIGxvY2tpbmcgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB4dF90YWJsZV9sb2NrYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4dF9maW5kX3RhYmxlX2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD0zMzg9c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaDozMzk6c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgtMzQwLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmM9NzY4PXN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy03ODUtIHJldHJ5OlxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYzo3ODY6XHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtNzg3LVx0aWYgKCFJU19FUlIodCkpIHtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jPTkzNT1zdGF0aWMgaW50IGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NDktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jOjk1MDpcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgdG1wLm5hbWUpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NTEtXHRpZiAoSVNfRVJSKHQpKSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTEwMDM9Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTAxOS0gcmV0cnk6XG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTAyMDpcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTAyMS1cdGlmICghSVNfRVJSKHQpKSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTExNjY9ZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTE4MC1cbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYzoxMTgxOlx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIHRtcC5uYW1lKTtcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xMTgyLVx0aWYgKElTX0VSUih0KSkge1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYz0xNTkwPWNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTYxMC1cdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE2MTE6XHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE2MTItXHRpZiAoIUlTX0VSUih0KSkge1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTAyND1nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDEtIHJldHJ5OlxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxMDQyOlx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDMtXHRpZiAoIUlTX0VSUih0KSkge1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTE4OD1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTIwMS1cdFx0cmV0dXJuIFBUUl9FUlIocGFkZGMpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxMjAyOlx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCB0bXAubmFtZSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEyMDMtXHRpZiAoSVNfRVJSKHQpKSB7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xNjA0PWNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjI0LVx0eHRfY29tcGF0X2xvY2soQUZfSU5FVDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxNjI1Olx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE2MjYtXHRpZiAoIUlTX0VSUih0KSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xMzI1PUVYUE9SVF9TWU1CT0woeHRfZmluZF90YWJsZSk7XG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzMjctLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCBcdTAwMjYgcmVmLiAgUmV0dXJucyBFUlJfUFRSIG9uIGVycm9yLiAqL1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjEzMjg6c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZixcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzI5LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzItfVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjEzNzM6RVhQT1JUX1NZTUJPTF9HUEwoeHRfZmluZF90YWJsZV9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzc0LVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTEzNzU9c3RydWN0IHh0X3RhYmxlICp4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLFxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzc3LXtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzc4Olx0c3RydWN0IHh0X3RhYmxlICp0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgYWYsIG5hbWUpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzktXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzODQtXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzg1Olx0XHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgYWYsIG5hbWUpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzODYtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmV0ZmlsdGVyIFRhYmxlcyBhcmUgUHJpbWUgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBhcnBfdGFibGVzYCwgYGlwX3RhYmxlc2AsIGFuZCBgaXA2X3RhYmxlc2Ag4oCTIHRob3NlIGFyZSB0aGUgc3RhbmRhcmQgbmV0ZmlsdGVyIHRhYmxlcyBpbiB0aGUgTGludXgga2VybmVsLiBBcmUgdGhleSBhY2Nlc3NpYmxlPyBBYnNvbHV0ZWx5ISBUaGV5JiMzOTtyZSBpbnZva2VkIHRocm91Z2ggYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgb24gc3RhbmRhcmQgc29ja2V0cyBsaWtlIGBBRl9JTkVUYCwgYEFGX0lORVQ2YCwgb3IgYEFGX0FSUGAsIG9yIGV2ZW4gYEFGX05FVExJTktgLiBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBjYWxscyBsaWtlIGBJUF9HRVRfRU5UUklFU2AsIGBJUFRfU09fR0VUX0VOVFJJRVNgLCBgSVBUX1NPX0dFVF9JTkZPYCwgdGhpbmdzIGxpa2UgdGhhdCwgYWNjZXNzZWQgdGhyb3VnaCBgZ2V0c29ja29wdChmZCwgU09MX0lQLCAuLi4pYCBvciBgZ2V0c29ja29wdChmZCwgU09MX0lQVjYsIC4uLilgIOKAkyBiYXNpYyBuZXRmaWx0ZXIgc29ja2V0IGludGVyZmFjZXMsIGNvbXBsZXRlbHkgc3RhbmRhcmQgYW5kIHRvdGFsbHkgcmVhY2hhYmxlIGJ5IHN5emthbGxlci4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGZ1enppbmcgY3JpdGVyaWEuIEZpcnN0LCBpcyB0aGVyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZT8gWWVzLCBmb3Igc3VyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY2AsIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jYCwgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jYC4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIG1vZGlmeWluZyBsb2NrIGFuZCBwYWdlZmF1bHQgaGFuZGxpbmcsIHJpZ2h0PyBJdCYjMzk7cyBhYm91dCBob3cgdGhlIGNvZGUgaGFuZGxlcyBgcGFnZWZhdWx0X2Rpc2FibGVgL2BwYWdlZmF1bHRfZW5hYmxlYCBpbiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCB0aGUgcmV0cnkgbG9vcCB3aXRoIGBmYXVsdF9pbl93cml0ZWFibGVgIGluIGBnZXRfZW50cmllc2AsIGFuZCBtb3ZpbmcgYGNvcHlfdG9fdXNlcmAgb3V0c2lkZSBgeHRfdGFibGVfdW5sb2NrYCBpbiBgZ2V0X2luZm9gLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyB1c2VyIG1lbW9yeSBjb3B5aW5nIGlzIGhhbmRsZWQgdW5kZXIgbmV0ZmlsdGVyIGxvY2tzIOKAkyB0cnlpbmcgdG8gYXZvaWQgc2xlZXBzIG9yIGZhdWx0cyB3aGlsZSBob2xkaW5nIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCBhbmQgYWxzbyBhdm9pZCBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4KClRoaXMgc2NyZWFtcyAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0Oy4KCk5vdywgdGltZSB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgbmV0L2lwdjQvbmV0ZmlsdGVyL2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvYCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCB0aGUgcmlnaHQgc2V0dGluZ3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfTkZfSVBUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTk9Y29uZmlnIE5GX0RFRlJBR19JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTMtIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTQ6Y29uZmlnIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xMjg9ZW5kaWYgIyBORl9OQVRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyOS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjEzMDpjb25maWcgSVBfTkZfSVBUQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O0lQIHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nL21hc3EvTkFUKVwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE0MS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE0MjppZiBJUF9ORl9JUFRBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTQzLVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTE4ND1jb25maWcgSVBfTkZfRklMVEVSXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xODUtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgZmlsdGVyaW5nXCYjMzQ7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxODY6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxODc6XHRkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTg4LVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTIyMT1jb25maWcgSVBfTkZfTkFUXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjIzLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjIyNDpcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0yNjU9Y29uZmlnIElQX05GX01BTkdMRVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjY2LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IG1hbmdsaW5nXCYjMzQ7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoyNjc6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoyNjg6XHRkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjY5LVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMwMT1jb25maWcgSVBfTkZfUkFXXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDItXHR0cmlzdGF0ZSAgJiMzOTtyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIE5PVFJBQ0svVFJBQ0UpJiMzOTtcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMwMzpcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDQtXHRoZWxwXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzEzPWNvbmZpZyBJUF9ORl9TRUNVUklUWVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMxNi1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMTc6XHRkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzE4LVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyMy1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMyNDplbmRpZiAjIElQX05GX0lQVEFCTEVTXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjUtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19ORlRfRFVQX0lQVjQpICYjNDM7PSBuZnRfZHVwX2lwdjQub1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0yNy0jIGdlbmVyaWMgSVAgdGFibGVzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX05GX0lQVEFCTEVTX0xFR0FDWSkgJiM0Mzs9IGlwX3RhYmxlcy5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODU5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTWFrZWZpbGUgRXhwbG9yYXRpb24gZm9yIElQdjQgYW5kIElQdjYgTmV0ZmlsdGVyIE1vZHVsZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlc2UgTmV0ZmlsdGVyIG1vZHVsZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgTWFrZWZpbGVgcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIG9uZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9gIGRpcmVjdG9yaWVzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbW9kdWxlcyBmb3IgSVB2NCBhbmQgSVB2NiBmaWx0ZXJpbmcgYXJlIGRlZmluZWQuIEJ5IGV4YW1pbmluZyB0aGUgTWFrZWZpbGVzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYnVpbGQgZmxhZ3MsIG1vZHVsZSB0YXJnZXRzLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgbGlua2VkIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhlc2UgY3J1Y2lhbCBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIGJ1aWx0LiBLbm93aW5nIHRoZSBNYWtlZmlsZSB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgSSBjYW4gc3RhcnQgbWFraW5nIGNoYW5nZXMgdG8gbXkgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcyBvbiB0b3Agb2YgSVB2NC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0IyBkZWZyYWdcbiAgIDc6XHRvYmotJChDT05GSUdfTkZfREVGUkFHX0lQVjQpICYjNDM7PSBuZl9kZWZyYWdfaXB2NC5vXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX05GX1NPQ0tFVF9JUFY0KSAmIzQzOz0gbmZfc29ja2V0X2lwdjQub1xuICAxMDpcdG9iai0kKENPTkZJR19ORl9UUFJPWFlfSVBWNCkgJiM0Mzs9IG5mX3Rwcm94eV9pcHY0Lm9cbiAgMTE6XHRcbiAgMTI6XHQjIHJlamVjdFxuICAxMzpcdG9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNCkgJiM0Mzs9IG5mX3JlamVjdF9pcHY0Lm9cbiAgMTQ6XHRcbiAgMTU6XHQjIE5BVCBoZWxwZXJzIChuZl9jb25udHJhY2spXG4gIDE2Olx0b2JqLSQoQ09ORklHX05GX05BVF9IMzIzKSAmIzQzOz0gbmZfbmF0X2gzMjMub1xuICAxNzpcdG9iai0kKENPTkZJR19ORl9OQVRfUFBUUCkgJiM0Mzs9IG5mX25hdF9wcHRwLm9cbiAgMTg6XHRcbiAgMTk6XHRuZl9uYXRfc25tcF9iYXNpYy15IDo9IG5mX25hdF9zbm1wX2Jhc2ljLmFzbjEubyBuZl9uYXRfc25tcF9iYXNpY19tYWluLm9cbiAgMjA6XHQkKG9iaikvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vOiAkKG9iaikvbmZfbmF0X3NubXBfYmFzaWMuYXNuMS5oXG4gIDIxOlx0b2JqLSQoQ09ORklHX05GX05BVF9TTk1QX0JBU0lDKSAmIzQzOz0gbmZfbmF0X3NubXBfYmFzaWMub1xuICAyMjpcdFxuICAyMzpcdG9iai0kKENPTkZJR19ORlRfUkVKRUNUX0lQVjQpICYjNDM7PSBuZnRfcmVqZWN0X2lwdjQub1xuICAyNDpcdG9iai0kKENPTkZJR19ORlRfRklCX0lQVjQpICYjNDM7PSBuZnRfZmliX2lwdjQub1xuICAyNTpcdG9iai0kKENPTkZJR19ORlRfRFVQX0lQVjQpICYjNDM7PSBuZnRfZHVwX2lwdjQub1xuICAyNjpcdFxuICAyNzpcdCMgZ2VuZXJpYyBJUCB0YWJsZXNcbiAgMjg6XHRvYmotJChDT05GSUdfSVBfTkZfSVBUQUJMRVNfTEVHQUNZKSAmIzQzOz0gaXBfdGFibGVzLm9cbiAgMjk6XHRcbiAgMzA6XHQjIHRoZSB0aHJlZSBpbnN0YW5jZXMgb2YgaXBfdGFibGVzXG4gIDMxOlx0b2JqLSQoQ09ORklHX0lQX05GX0ZJTFRFUikgJiM0Mzs9IGlwdGFibGVfZmlsdGVyLm9cbiAgMzI6XHRvYmotJChDT05GSUdfSVBfTkZfTUFOR0xFKSAmIzQzOz0gaXB0YWJsZV9tYW5nbGUub1xuICAzMzpcdG9iai0kKENPTkZJR19JUF9ORl9OQVQpICYjNDM7PSBpcHRhYmxlX25hdC5vXG4gIDM0Olx0b2JqLSQoQ09ORklHX0lQX05GX1JBVykgJiM0Mzs9IGlwdGFibGVfcmF3Lm9cbiAgMzU6XHRvYmotJChDT05GSUdfSVBfTkZfU0VDVVJJVFkpICYjNDM7PSBpcHRhYmxlX3NlY3VyaXR5Lm9cbiAgMzY6XHRcbiAgMzc6XHQjIG1hdGNoZXNcbiAgMzg6XHRvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUgpICYjNDM7PSBpcHRfYWgub1xuICAzOTpcdG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUikgJiM0Mzs9IGlwdF9ycGZpbHRlci5vXG4gIDQwOlx0XG4gIDQxOlx0IyB0YXJnZXRzXG4gIDQyOlx0b2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9FQ04pICYjNDM7PSBpcHRfRUNOLm9cbiAgNDM6XHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCkgJiM0Mzs9IGlwdF9SRUpFQ1Qub1xuICA0NDpcdG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFkpICYjNDM7PSBpcHRfU1lOUFJPWFkub1xuICA0NTpcdFxuICA0NjpcdCMgZ2VuZXJpYyBBUlAgdGFibGVzXG4gIDQ3Olx0b2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgJiM0Mzs9IGFycF90YWJsZXMub1xuICA0ODpcdG9iai0kKENPTkZJR19JUF9ORl9BUlBfTUFOR0xFKSAmIzQzOz0gYXJwdF9tYW5nbGUub1xuICA0OTpcdFxuICA1MDpcdCMganVzdCBmaWx0ZXJpbmcgaW5zdGFuY2Ugb2YgQVJQIHRhYmxlcyBmb3Igbm93XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgdGhlIE5ldGZpbHRlciBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYnVpbGQgcHJvY2VzcywgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7dmUgYWxyZWFkeSBsb29rZWQgYXQgWCwgWSwgYW5kIFosIGJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIElQdjYgYW5kIG5ldGZpbHRlciwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGVgIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIHRoZSB0YXJnZXQgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcuIEJldHRlciB0byBiZSBjb21wbGV0ZSBhbmQgZWxpbWluYXRlIHRoaXMgc2VjdGlvbiBhcyBhbiBpc3N1ZSwgdGhhbiB0byBtaXNzIGEgcG9zc2libGUgcHJvYmxlbS4gSXQmIzM5O3MgdGhlIGRldmlsIGluIHRoZSBkZXRhaWxzLCBhbmQgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG1pc3MgYW55dGhpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgbXkgYmFja2dyb3VuZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcyBvbiB0b3Agb2YgSVB2Ni5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0IyBMaW5rIG9yZGVyIG1hdHRlcnMgaGVyZS5cbiAgIDc6XHRvYmotJChDT05GSUdfSVA2X05GX0lQVEFCTEVTX0xFR0FDWSkgJiM0Mzs9IGlwNl90YWJsZXMub1xuICAgODpcdG9iai0kKENPTkZJR19JUDZfTkZfRklMVEVSKSAmIzQzOz0gaXA2dGFibGVfZmlsdGVyLm9cbiAgIDk6XHRvYmotJChDT05GSUdfSVA2X05GX01BTkdMRSkgJiM0Mzs9IGlwNnRhYmxlX21hbmdsZS5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0lQNl9ORl9SQVcpICYjNDM7PSBpcDZ0YWJsZV9yYXcub1xuICAxMTpcdG9iai0kKENPTkZJR19JUDZfTkZfU0VDVVJJVFkpICYjNDM7PSBpcDZ0YWJsZV9zZWN1cml0eS5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0lQNl9ORl9OQVQpICYjNDM7PSBpcDZ0YWJsZV9uYXQub1xuICAxMzpcdFxuICAxNDpcdCMgZGVmcmFnXG4gIDE1Olx0bmZfZGVmcmFnX2lwdjYteSA6PSBuZl9kZWZyYWdfaXB2Nl9ob29rcy5vIG5mX2Nvbm50cmFja19yZWFzbS5vXG4gIDE2Olx0b2JqLSQoQ09ORklHX05GX0RFRlJBR19JUFY2KSAmIzQzOz0gbmZfZGVmcmFnX2lwdjYub1xuICAxNzpcdFxuICAxODpcdG9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNikgJiM0Mzs9IG5mX3NvY2tldF9pcHY2Lm9cbiAgMTk6XHRvYmotJChDT05GSUdfTkZfVFBST1hZX0lQVjYpICYjNDM7PSBuZl90cHJveHlfaXB2Ni5vXG4gIDIwOlx0XG4gIDIxOlx0IyByZWplY3RcbiAgMjI6XHRvYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICYjNDM7PSBuZl9yZWplY3RfaXB2Ni5vXG4gIDIzOlx0XG4gIDI0Olx0b2JqLSQoQ09ORklHX05GX0RVUF9JUFY2KSAmIzQzOz0gbmZfZHVwX2lwdjYub1xuICAyNTpcdFxuICAyNjpcdCMgbmZfdGFibGVzXG4gIDI3Olx0b2JqLSQoQ09ORklHX05GVF9SRUpFQ1RfSVBWNikgJiM0Mzs9IG5mdF9yZWplY3RfaXB2Ni5vXG4gIDI4Olx0b2JqLSQoQ09ORklHX05GVF9EVVBfSVBWNikgJiM0Mzs9IG5mdF9kdXBfaXB2Ni5vXG4gIDI5Olx0b2JqLSQoQ09ORklHX05GVF9GSUJfSVBWNikgJiM0Mzs9IG5mdF9maWJfaXB2Ni5vXG4gIDMwOlx0XG4gIDMxOlx0IyBtYXRjaGVzXG4gIDMyOlx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSCkgJiM0Mzs9IGlwNnRfYWgub1xuICAzMzpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQpICYjNDM7PSBpcDZ0X2V1aTY0Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX0ZSQUcpICYjNDM7PSBpcDZ0X2ZyYWcub1xuICAzNTpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUikgJiM0Mzs9IGlwNnRfaXB2NmhlYWRlci5vXG4gIDM2Olx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgJiM0Mzs9IGlwNnRfbWgub1xuICAzNzpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgJiM0Mzs9IGlwNnRfaGJoLm9cbiAgMzg6XHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX1JQRklMVEVSKSAmIzQzOz0gaXA2dF9ycGZpbHRlci5vXG4gIDM5Olx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgJiM0Mzs9IGlwNnRfcnQub1xuICA0MDpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSAmIzQzOz0gaXA2dF9zcmgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIHRoZSBJUHY2IEZpcmV3YWxsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxlZ2FjeSBJUHY2IGlwdGFibGVzIHN1cHBvcnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElQdjYgbmV0ZmlsdGVyIGZyYW1ld29yayByZXNpZGUsIGFuZCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAgc2hvdWxkIGJlIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCBvcHRpb24gaXMgc3RpbGwgcHJlc2VudCBhbmQsIGlmIHNvLCB3aGF0IGl0cyBjdXJyZW50IHN0YXRlIGlzLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgYW55IGFzc29jaWF0ZWQgY29kZSBjaGFuZ2VzIG9yIHBvdGVudGlhbCBkZXByZWNhdGlvbiBwYXRocy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNpbmNlIGl0JiMzOTtzIGEgbGVnYWN5IGNvbXBvbmVudCwgdGhlcmUgbWlnaHQgYmUgc29tZSBjaHVybiBhcm91bmQgaXRzIHVzZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQNl9ORl9JUFRBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9Nj1tZW51IFwmIzM0O0lQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctOS0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMDpjb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NzI9Y29uZmlnIE5GX0xPR19JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNzktXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpjb25maWcgSVA2X05GX0lQVEFCTEVTXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cdHRyaXN0YXRlIFwmIzM0O0lQNiB0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05Mi1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjkzOmlmIElQNl9ORl9JUFRBQkxFU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctOTQtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MTk3PWNvbmZpZyBJUDZfTkZfRklMVEVSXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xOTgtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgZmlsdGVyaW5nXCYjMzQ7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxOTk6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MjAwOlx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yMDEtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTIzND1jb25maWcgSVA2X05GX01BTkdMRVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IG1hbmdsaW5nXCYjMzQ7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMzY6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MjM3Olx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXHRoZWxwXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjQ1PWNvbmZpZyBJUDZfTkZfUkFXXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDYtXHR0cmlzdGF0ZSAgJiMzOTtyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIFRSQUNFKSYjMzk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNDc6XHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0OC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yNTc9Y29uZmlnIElQNl9ORl9TRUNVUklUWVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI2MC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNjE6XHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI2Mi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yNjg9Y29uZmlnIElQNl9ORl9OQVRcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNzEtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MjcyOlx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXHRzZWxlY3QgTkZfTkFUXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjkwPWNvbmZpZyBJUDZfTkZfVEFSR0VUX05QVFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI5OC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjI5OTplbmRpZiAjIElQNl9ORl9JUFRBQkxFU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzAwLWVuZG1lbnVcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtNi0jIExpbmsgb3JkZXIgbWF0dGVycyBoZXJlLlxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19MRUdBQ1kpICYjNDM7PSBpcDZfdGFibGVzLm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS04LW9iai0kKENPTkZJR19JUDZfTkZfRklMVEVSKSAmIzQzOz0gaXA2dGFibGVfZmlsdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYElQX05GX0FSUFRBQkxFU2AqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW50byB0aGlzIGFuYWx5c2lzLCBidXQgSSBjYW4mIzM5O3QgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLiBUaGUgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGhhcyBsZWQgbWUgdG8gYSBmZXcgaW50ZXJlc3RpbmcgcG9pbnRzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcml0aWNhbC4gQSB0aG91Z2h0IGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZDogSSAqaGF2ZSogdG8gY29uc2lkZXIgdGhlIGBJUF9ORl9BUlBUQUJMRVNgIG1vZHVsZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLCBlc3BlY2lhbGx5IHJlbGV2YW50IGluIHNjZW5hcmlvcyBpbnZvbHZpbmcgQVJQIGFuZCBJUCBhZGRyZXNzIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0ZmlsdGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHdoZXRoZXIgaXQgaXMgYSBwb2ludCBvZiBhdHRhY2sgaW4gdGhlIHN5c3RlbS4gR2l2ZW4gaXRzIHBvdGVudGlhbCBmb3IgYWx0ZXJpbmcgQVJQIGJlaGF2aW9yLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgd2hhdGV2ZXIgaXMgb2NjdXJyaW5nIHdpdGhpbiB0aGUgc3lzdGVtIGlzbiYjMzk7dCByZWxhdGVkIHRvIGltcHJvcGVyIGltcGxlbWVudGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIG5ldGZpbHRlciBtb2R1bGUuIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGl0cyB1c2UgYW5kIHF1aWNrbHkgYXNzZXNzIGlmIHRoYXQgbWF5IGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGlzc3VlIEkmIzM5O20gY2hhc2luZy4gSXQmIzM5O3MgYSB2aXRhbCBwaWVjZSB0byBjb25maXJtIEkgaGF2ZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9ORl9BUlBUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMyND1lbmRpZiAjIElQX05GX0lQVEFCTEVTXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzI2LSMgQVJQIHRhYmxlc1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzI3OmNvbmZpZyBJUF9ORl9BUlBUQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBBUlBUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM0Mz1jb25maWcgSVBfTkZfQVJQRklMVEVSXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDthcnB0YWJsZXMtbGVnYWN5IHBhY2tldCBmaWx0ZXJpbmcgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzQ1Olx0c2VsZWN0IElQX05GX0FSUFRBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQ2LVx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzU3PWNvbmZpZyBJUF9ORl9BUlBfTUFOR0xFXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTgtXHR0cmlzdGF0ZSBcJiMzNDtBUlAgcGF5bG9hZCBtYW5nbGluZ1wmIzM0O1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU5Olx0ZGVwZW5kcyBvbiBJUF9ORl9BUlBUQUJMRVMgfHwgTkZUX0NPTVBBVF9BUlBcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM2MC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9TWU5QUk9YWSkgJiM0Mzs9IGlwdF9TWU5QUk9YWS5vXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ2LSMgZ2VuZXJpYyBBUlAgdGFibGVzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgJiM0Mzs9IGFycF90YWJsZXMub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ4LW9iai0kKENPTkZJR19JUF9ORl9BUlBfTUFOR0xFKSAmIzQzOz0gYXJwdF9tYW5nbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldGZpbHRlciBDb21wYXRpYmlsaXR5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgaW4gcGxhY2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIG9yIHNvbWUgb3RoZXIgY3J1Y2lhbCBjb25maWcgb3B0aW9uIG1pZ2h0IGJlIG1pc3NpbmcuIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6IGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgIChvciBgSVBfTkZfSVBUQUJMRVNgKSwgYElQNl9ORl9JUFRBQkxFU19MRUdBQ1lgIChvciBgSVA2X05GX0lQVEFCTEVTYCksIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQsIG9mIGNvdXJzZSwgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAgKG9yIGp1c3QgYE5FVEZJTFRFUl9YVEFCTEVTYCkuIEl0JiMzOTtzIGVzc2VudGlhbCB3ZSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBJUF9ORl9JUFRBQkxFU2AgYW5kIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgIHdpdGhpbiB0aGUgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGRldGFpbCB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFx0dHJpc3RhdGVcbiAgMTE6XHRcdGRlZmF1bHQgblxuICAxMjpcdFxuICAxMzpcdCMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcbiAgMTQ6XHRjb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDE3Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXG4gIDE4Olx0XHRkZWZhdWx0XHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxuICAxOTpcdFx0aGVscFxuICAyMDpcdFx0ICBpcHRhYmxlcyBpcyBhIGxlZ2FjeSBwYWNrZXQgY2xhc3NpZmllci5cbiAgMjE6XHRcdCAgVGhpcyBpcyBub3QgbmVlZGVkIGlmIHlvdSBhcmUgdXNpbmcgaXB0YWJsZXMgb3ZlciBuZnRhYmxlc1xuICAyMjpcdFx0ICAoaXB0YWJsZXMtbmZ0KS5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkZfU09DS0VUX0lQVjRcbiAgMjU6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgc29ja2V0IGxvb2t1cCBzdXBwb3J0XCYjMzQ7XG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc29ja2V0IGxvb2t1cCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc1xuICAyODpcdFx0ICBpcyByZXF1aXJlZCBieSB0aGUge2lwLG5mfXRhYmxlcyBzb2NrZXQgbWF0Y2guXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIE5GX1RQUk9YWV9JUFY0XG4gIDMxOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY0IHRwcm94eSBzdXBwb3J0XCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0aWYgTkZfVEFCTEVTXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIE5GX1RBQkxFU19JUFY0XG4gIDM2Olx0XHRib29sIFwmIzM0O0lQdjQgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGhlbHBcbiAgMzg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgSVB2NCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDM5Olx0XG4gIDQwOlx0aWYgTkZfVEFCTEVTX0lQVjRcbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XG4gIDQzOlx0XHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcbiAgNDQ6XHRcdGRlZmF1bHQgTkZUX1JFSkVDVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGluaXRpYWwgdGhvdWdodCwgYXMgSSBzZWUgaXQsIGlzIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAuICBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gIE15IGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBsZWdhY3kgY29tcG9uZW50IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyBkaXJlY3RseSB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdGhlIEtjb25maWcgZmlsZSB0byByZXZlYWwgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCBhcyBhIG1vZHVsZSwgYWxvbmcgd2l0aCBhbnkgZGVwZW5kZW5jaWVzIG9yIGhlbHAgdGV4dC4gIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXR1cyBvZiBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCBpcyBjcnVjaWFsLCBiZWNhdXNlIGl0IGFsbW9zdCBjZXJ0YWlubHkgaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiBvbGRlciBpcHRhYmxlcyBmdW5jdGlvbmFsaXRpZXMsIGFuZCBtYXkgYmUgYSBmYWN0b3Igd2hlbiBkZWFsaW5nIHdpdGggY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHN5c3RlbXMgb3IgYXBwbGljYXRpb25zIHRoYXQgcmVseSBvbiBsZWdhY3kgZXh0ZW5zaW9ucy4gVWx0aW1hdGVseSwgdGhpcyBpcyB0aGUgZm91bmRhdGlvbmFsIHN0ZXAgYmVmb3JlIGZ1cnRoZXIgYW5hbHlzaXM7IEkgbmVlZCB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgdG8gZHJpdmUgdGhlIHN1YnNlcXVlbnQgcXVlc3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NDM9Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0NTpcdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDYtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MTQ9Y29uZmlnIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE3LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTg6XHRkZWZhdWx0XHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTktXHRoZWxwXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzI3PWNvbmZpZyBJUF9ORl9BUlBUQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBBUlBUQUJMRVMgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzI5Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMzMC1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zNDM9Y29uZmlnIElQX05GX0FSUEZJTFRFUlxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0Ni1cdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0FSUFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0OC1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0xMD1jb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSVBWNiBcdTAwMjZcdTAwMjYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE0Olx0ZGVmYXVsdFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE1LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03Mzg9Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ3OmNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDgtXHRib29sIFwmIzM0O05ldGZpbHRlciBsZWdhY3kgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTQxND1FWFBPUlRfU1lNQk9MX0dQTCh4dF90ZWVfZW5hYmxlZCk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQxNS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNDE2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQxNy1ERUZJTkVfUEVSX0NQVShzZXFjb3VudF90LCB4dF9yZWNzZXEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0yMDk1PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3Byb3RvX2ZpbmkpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIwOTYtXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjA5NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIwOTgtLyoqXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTIxODQ9c3RhdGljIGludCBfX2luaXQgeHRfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMTg4LVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjIxODk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZKSkge1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIxOTAtXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjUwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgVGFibGUgRW50cnkgUmV0cmlldmFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGZpbHRlciB0YWJsZSBlbnRyaWVzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIEFSUCwgSVB2NCwgYW5kIElQdjYgdGFibGVzOiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLgoKRmlyc3QsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgaW4gZWFjaCBmaWxlIHRoYXQgc2VlbSByZWxldmFudC4gSW4gYGFycF90YWJsZXMuY2AsIEkgc2VlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGFuZCBgZ2V0X2VudHJpZXNgLiBUaGVzZSBhcmUgYWxsIHN0YXRpYywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZWlyIGNhbGxlcnMgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkLiBMb29rcyBsaWtlIHRoZSBjYWxsZXIgZm9yIGBnZXRfaW5mb2AgYW5kIGBnZXRfZW50cmllc2AgaXMgYGRvX2FycHRfZ2V0X2N0bGAuIEdvb2QsIHRoYXQgbmFycm93cyBpdCBkb3duLgoKTm93LCBsb29raW5nIGF0IGBpcF90YWJsZXMuY2AsIEkmIzM5O3ZlIGdvdCBhIHNpbWlsYXIgc2V0OiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLiBBZGRpdGlvbmFsbHksIEkgc2VlIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2dldF9lbnRyaWVzYCwgbGlrZWx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdXNlcnNwYWNlIGludGVyZmFjZXMuIFRoZSBjYWxsZXJzIGhlcmUgYXJlIGBkb19pcHRfZ2V0X2N0bGAgYW5kIGBjb21wYXRfZG9faXB0X2dldF9jdGxgLgoKRmluYWxseSwgYGlwNl90YWJsZXMuY2AgbWlycm9ycyB0aGUgSVB2NCBzdHJ1Y3R1cmUgd2l0aCBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYCwgYW5kIGBjb21wYXRfZ2V0X2VudHJpZXNgLiBUaGVpciBjYWxsZXJzIGFyZSBgZG9faXA2dF9nZXRfY3RsYCBhbmQgYGNvbXBhdF9kb19pcDZ0X2dldF9jdGxgLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gYW5hbHl6ZSB0aGVzZSBgZG9fKl9nZXRfY3RsYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSByZXRyaWV2YWwgYW5kIGNvcHlpbmcgcHJvY2VzcyBpcyBsaWtlbHkgaW5pdGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlaXIgaW1wbGVtZW50YXRpb25zIGluIGVhY2ggcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9faXB0X2dldF9jdGx8ZG9fYXJwdF9nZXRfY3RsfGRvX2lwNnRfZ2V0X2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz05ODQ9c3RhdGljIGludCBkb19hcnB0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtMTAwOS1cbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmM6MTAxMDpzdGF0aWMgaW50IGRvX2FycHRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtMTAxMS17XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz0xMTMxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgYXJwdF9zb2Nrb3B0cyA9IHtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTExMzctXHQuZ2V0X29wdG1heFx0PSBBUlBUX1NPX0dFVF9NQVgmIzQzOzEsXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jOjExMzg6XHQuZ2V0XHRcdD0gZG9fYXJwdF9nZXRfY3RsLFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy0xMTM5LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE2NzE9c3RhdGljIGludFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE2NzI6ZG9faXB0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTY3My17XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE4MDk9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBpcHRfc29ja29wdHMgPSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE4MTUtXHQuZ2V0X29wdG1heFx0PSBJUFRfU09fR0VUX01BWCYjNDM7MSxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYzoxODE2Olx0LmdldFx0XHQ9IGRvX2lwdF9nZXRfY3RsLFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE4MTctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTE2ODU9c3RhdGljIGludFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxNjg2OmRvX2lwNnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTY4Ny17XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xODI0PXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXA2dF9zb2Nrb3B0cyA9IHtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE4MzAtXHQuZ2V0X29wdG1heFx0PSBJUDZUX1NPX0dFVF9NQVgmIzQzOzEsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE4MzE6XHQuZ2V0XHRcdD0gZG9faXA2dF9nZXRfY3RsLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xODMyLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODY2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBnZXRfY3RsYCBpbiBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBjb21wYXJlIHRoZSBgZ2V0X2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCBzb3VyY2UgZmlsZXMuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY3Jvc3MtZXhhbWluYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGlmZmVyZW5jZXMgb3Igc2ltaWxhcml0aWVzIGluIGhvdyBJUHY0IGFuZCBJUHY2IGNvbnRyb2wgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgTmV0ZmlsdGVyIGxldmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB0YWJsZXMgdGhlbXNlbHZlcy4gSXMgdGhlcmUgc29tZSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jeSBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW0gSSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGJ1Zywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCBvciB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIGRlc2lnbiBkZWNpc2lvbj8gSXTigJlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZWlyIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZXRyaWV2ZSBjb250cm9sIHN0cnVjdHVyZXMsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcnVsZSBtYW5pcHVsYXRpb24gb3IgdGFibGUgbWFuYWdlbWVudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYW55IGRpZmZlcmVuY2VzIGluIHRoZSBrZXJuZWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcGF0LipnZXRfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIzOTQ9c3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MTMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MTQ6c3RhdGljIGludCBjb21wYXRfZG9fZWJ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNDE1LVx0XHR2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNDg3PXN0YXRpYyBpbnQgZG9fZWJ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTAzLVx0ICAgICAqbGVuICE9IHNpemVvZih0bXApKSlcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjUwNDpcdFx0cmV0dXJuIGNvbXBhdF9kb19lYnRfZ2V0X2N0bChzaywgY21kLCB1c2VyLCBsZW4pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTA1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM5OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIGBjb21wYXRfZ2V0X2VudHJpZXNgIENhbGxzIGluIGlwdGFibGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY29tcGF0X2dldF9lbnRyaWVzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlwX3RhYmxlcy5jYCBhbmQgYGlwNl90YWJsZXMuY2AgY29kZWJhc2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZD8gV2hhdCBpcyB0aGUgY29udGV4dD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29tcGF0aWJpbGl0eS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGlwdGFibGVzIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgcHVycG9zZSB0aGV5IHNlcnZlIGFuZCB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgdGhleSBhZGRyZXNzLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24gb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyBhIGNvZGUgZGl2ZSB0byBpZGVudGlmeSBldmVyeSBpbnN0YW5jZSBvZiBhIGBjb21wYXRfZ2V0X2VudHJpZXNgIGludm9jYXRpb24uIFRoaXMgd2lsbCBzZXJ2ZSBhcyB0aGUgZm91bmRhdGlvbiBvZiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcGF0X2dldF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTU4OT1zdGF0aWMgaW50XG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTU5MDpjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTU5MS1cdFx0ICAgaW50ICpsZW4pXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE2NzI9ZG9faXB0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE2ODgtXHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE2ODk6XHRcdFx0cmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTtcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNjkwLVx0XHRlbHNlXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xNjAzPXN0YXRpYyBpbnRcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTYwNDpjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjA1LVx0XHQgICBpbnQgKmxlbilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTE2ODY9ZG9faXA2dF9nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTcwMi1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE3MDM6XHRcdFx0cmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTcwNC1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIFRhYmxlIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlc2UgbmV0ZmlsdGVyIHRhYmxlIGltcGxlbWVudGF0aW9ucy4gRmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZGVhbCB3aXRoIGluIHRoZSB0aHJlZSBDIGZpbGVzOiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLiAgSSYjMzk7bSBzZWVpbmcgYSBjb25zaXN0ZW50IHBhdHRlcm4gb2YgYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9pbmZvYCwgYW5kIGBnZXRfZW50cmllc2AgYWNyb3NzIGFsbCBvZiB0aGVtLiBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCBhbHNvIGhhdmUgdGhvc2UgJiMzNDtjb21wYXQmIzM0OyB2ZXJzaW9ucyBhbmQgdGhlIGBkb18qX2dldF9jdGxgIHZhcmlhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLCBvciBwZXJoYXBzIHRoZSBjYWxsZXJzIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuCgpUaGVyZWZvcmUsIHRoZSBzeW1ib2xzIG9mIGltbWVkaWF0ZSBpbnRlcmVzdCBhcmU6IGBkb19pcHRfZ2V0X2N0bGAsIGBjb21wYXRfZ2V0X2VudHJpZXNgLCBgZ2V0X2VudHJpZXNgLCBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZG9fYXJwdF9nZXRfY3RsYCwgYW5kIGBkb19pcDZ0X2dldF9jdGxgLiAgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGF0IHRob3NlICYjMzk7Y29tcGF0JiMzOTsgc3ltYm9scywgYW5kIHRoZSAmIzM5O2dldCYjMzk7IGFuZCAmIzM5O2NvcHkmIzM5OyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRpc3RpbmN0LgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlc2UgZnVuY3Rpb25zOiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYCwgYGNvbXBhdF9nZXRfZW50cmllc2AsIGBkb19hcnB0X2dldF9jdGxgLCBgZG9faXB0X2dldF9jdGxgLCBhbmQgYGRvX2lwNnRfZ2V0X2N0bGAuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgbGlrZSBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCwgYElQX05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZYCwgYElQX05GX0FSUFRBQkxFU2AsIGFuZCBgTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUYC4gVGltZSB0byBjb25maXJtIHRoYXQmIzM5O3MgYWN0dWFsbHkgdGhlIGNhc2UuCgpPa2F5LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhvc2UgaW4gdGhlIEtjb25maWcgZmlsZXMuCgpSaWdodCwgbm93IHRoZSBjcnVjaWFsIHN0ZXA6IGNoZWNraW5nIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciB0aGVzZS4gSW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGBORVRGSUxURVJfWFRBQkxFU2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgYW5kIGBORVRGSUxURVJfWFRBQkxFU2AgYW5kIGBJUF9ORl9JUFRBQkxFU2AuICBIbW0sIGlzIGBJUF9ORl9JUFRBQkxFU2AgYSBtZW51IG9yIGEgY29uZmlnPyBMZXQgbWUgY2hlY2sgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBhZ2Fpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE5GX0RFRlJBR19JUFY0XG4gIDEwOlx0XHR0cmlzdGF0ZVxuICAxMTpcdFx0ZGVmYXVsdCBuXG4gIDEyOlx0XG4gIDEzOlx0IyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxuICAxNDpcdGNvbmZpZyBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBJUCB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbiAgMTc6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbiAgMTg6XHRcdGRlZmF1bHRcdG0gaWYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIGlwdGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxuICAyMTpcdFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXG4gIDIyOlx0XHQgIChpcHRhYmxlcy1uZnQpLlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORl9TT0NLRVRfSVBWNFxuICAyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MTMKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogNDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIvWHRhYmxlcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaGVyZSBkZWFsaW5nIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdXNlci1zcGFjZSBhbmQga2VybmVsLXNwYWNlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyL1h0YWJsZXMgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzb2Nrb3B0IHJldHJpZXZhbCBoYW5kbGVycyBpbiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLiBUaGUgY29yZSBpc3N1ZSBhcHBlYXJzIHRvIGJlIGFyb3VuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBwYWdlIGZhdWx0cyBkdXJpbmcgdGhlIGNvcHlpbmcgb2YgZW50cmllcyB0byB1c2VyIHNwYWNlLCBhbGwgd2hpbGUgZGVhbGluZyB3aXRoIHRhYmxlIGxvY2tzLgoKSSYjMzk7dmUgbm90ZWQgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGFyZSBpbXBvcnRhbnQgaGVyZTogYE5FVEZJTFRFUl9YVEFCTEVTYCwgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgLCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQgcG90ZW50aWFsbHkgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAg4oCTIHRoZXNlIGFyZSBjbGVhcmx5IHJlbGV2YW50IHRvIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgcXVpY2tseSBjaGVja2VkIGZvciB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLCBidXQgYWxsIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGFyZSBzcGVjaWZpYyB0byBuZXRmaWx0ZXIgYW5kIHh0YWJsZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGludHJvZHVjaW5nIGNoYW5nZXMgdG8gaG93IHRoZSBjb2RlIGNvcGllcyBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IGRpc2FibGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgY29weSBvcGVyYXRpb24sIHdoaWNoIGlzIHNtYXJ0LCBidXQgSSYjMzk7bSBndWVzc2luZyBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtLiBgZmF1bHRfaW5fd3JpdGVhYmxlKClgIHNvdW5kcyBsaWtlIGEgY2xldmVyIHdheSB0byBoYW5kbGUgd3JpdGUgZmF1bHRzLiBBbHNvIHRoZSBtb3ZlbWVudCBvZiB1c2VyIGNvcHlpbmcgb3V0c2lkZSBvZiBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGxvb2tzIGxpa2UgYSBnb29kIHN0ZXAuCgpUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgdGhlIG5ldGZpbHRlciBjb3JlIGxvZ2ljIHdvcmtzLiBUaGlzIHNvcnQgb2YgY2hhbmdlIHdhcnJhbnRzIHRob3JvdWdoIHRlc3RpbmcuIEkgdGhpbmsgZnV6emluZyBpcyBlc3NlbnRpYWwgaGVyZS4gV2UgbmVlZCB0byBleHBvc2UgYW55IHBvdGVudGlhbCBlcnJvciBwYXRocyBvciBpc3N1ZXMgd2l0aCBob3cgcGFnZSBmYXVsdHMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIG1hbmlwdWxhdGluZyBkYXRhIHVuZGVyIHRoZXNlIHRhYmxlIGxvY2tzLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQsIEkgd2lsbCB1c2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9JUFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9BUlBUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfQ09NUEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9lbnRyaWVzX3RvX3VzZXImIzM0OywKICAgICYjMzQ7Z2V0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7Z2V0X2luZm8mIzM0OywKICAgICYjMzQ7Y29tcGF0X2NvcHlfZW50cmllc190b191c2VyJiMzNDssCiAgICAmIzM0O2NvbXBhdF9nZXRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtkb19pcHRfZ2V0X2N0bCYjMzQ7LAogICAgJiMzNDtkb19pcDZ0X2dldF9jdGwmIzM0OywKICAgICYjMzQ7ZG9fYXJwdF9nZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tvcHQgcmV0cmlldmFsIHBhdGhzIGluIGxlZ2FjeSBhcnBfdGFibGVzLCBpcF90YWJsZXMsIGFuZCBpcDZfdGFibGVzLiBJdCBhZGRzIHBhZ2VmYXVsdF9kaXNhYmxlKCkvcGFnZWZhdWx0X2VuYWJsZSgpIGFyb3VuZCB1c2VyIGNvcGllcyB3aGlsZSBob2xkaW5nIHh0X3RhYmxlIGxvY2tzLCBhZGRzIGZhdWx0X2luX3dyaXRlYWJsZSgpIHJldHJ5IGhhbmRsaW5nIGluIGdldF9lbnRyaWVzL2NvbXBhdF9nZXRfZW50cmllcywgYW5kIG1vdmVzIGNvcHlfdG9fdXNlciBvdXRzaWRlIGNyaXRpY2FsIGxvY2sgc2VjdGlvbnMgaW4gZ2V0X2luZm8uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZywgcGFnZSBmYXVsdCwgYW5kIGVycm9yIGhhbmRsaW5nIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0lQX05GX0lQVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUDZfTkZfSVBUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0lQX05GX0FSUFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19DT01QQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X2VudHJpZXNfdG9fdXNlciYjMzQ7LAogICAgJiMzNDtnZXRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtnZXRfaW5mbyYjMzQ7LAogICAgJiMzNDtjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXImIzM0OywKICAgICYjMzQ7Y29tcGF0X2dldF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2RvX2lwdF9nZXRfY3RsJiMzNDssCiAgICAmIzM0O2RvX2lwNnRfZ2V0X2N0bCYjMzQ7LAogICAgJiMzNDtkb19hcnB0X2dldF9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja29wdCByZXRyaWV2YWwgcGF0aHMgaW4gbGVnYWN5IGFycF90YWJsZXMsIGlwX3RhYmxlcywgYW5kIGlwNl90YWJsZXMuIEl0IGFkZHMgcGFnZWZhdWx0X2Rpc2FibGUoKS9wYWdlZmF1bHRfZW5hYmxlKCkgYXJvdW5kIHVzZXIgY29waWVzIHdoaWxlIGhvbGRpbmcgeHRfdGFibGUgbG9ja3MsIGFkZHMgZmF1bHRfaW5fd3JpdGVhYmxlKCkgcmV0cnkgaGFuZGxpbmcgaW4gZ2V0X2VudHJpZXMvY29tcGF0X2dldF9lbnRyaWVzLCBhbmQgbW92ZXMgY29weV90b191c2VyIG91dHNpZGUgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBpbiBnZXRfaW5mby4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nLCBwYWdlIGZhdWx0LCBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXG5cbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJiMzOTtmYXVsdGVkJiMzOTsgYW5kICYjMzk7cmV0JiMzOTsgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNjozOTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IGRiMzA3ZmE0OWYzZjYuLjdiNDMyNjlhYTZiMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCkBAIC02OTUsNiAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCiAKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0mZ3Q7ZW50cmllczsKIAomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCS8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi8KIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgJmx0OyB0b3RhbF9zaXplOyBvZmYgJiM0Mzs9IGUtJmd0O25leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXsKQEAgLTcxOSwxMiAmIzQzOzcyMSwxNCBAQCBzdGF0aWMgaW50IGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTczOCw3ICYjNDM7NzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAluYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAmIzM5O1wwJiMzOTs7CiAJdCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBhcnB0X2dldGluZm8gaW5mbzsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwogCiAJCW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC03NTEsMTUgJiM0Mzs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gMDsKJiM0MzsJCXJldCA9IDA7CiAJCXh0X3RhYmxlX3VubG9jayh0KTsKIAkJbW9kdWxlX3B1dCh0LSZndDttZSk7CiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQomIzQzOwkJcmV0ID0gLUVGQVVMVDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjksNiAmIzQzOzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBnZXQ7CiAJc3RydWN0IHh0X3RhYmxlICp0OwomIzQzOwlib29sIGZhdWx0ZWQgPSBmYWxzZTsKIAogCWlmICgqbGVuICZsdDsgc2l6ZW9mKGdldCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc5LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgZ2V0Lm5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKQEAgLTc5NCw2ICYjNDM7Nzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb2NfZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVtYXNrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oJmd0OwpAQCAtODI0LDYgJiM0Mzs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLSZndDtlbnRyaWVzOwogCiYjNDM7CXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJLyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqLwogCS8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi8KIAlmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiAmbHQ7IHRvdGFsX3NpemU7IG9mZiAmIzQzOz0gZS0mZ3Q7bmV4dF9vZmZzZXQsIG51bSYjNDM7JiM0MzspewpAQCAtODYxLDYgJiM0Mzs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAl9CiAKICBmcmVlX2NvdW50ZXJzOgomIzQzOwlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CiB9CkBAIC05NDMsNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sCiAKIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiB7CiYjNDM7CXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk2MCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVAogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CkBAIC05ODEsMTAgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCQlpbmZvLnNpemUgPSBwcml2YXRlLSZndDtzaXplOwogCQlzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtOTk0LDYgJiM0Mzs5OTQsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKQogCQl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNCw2ICYjNDM7MTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDEzLDYgJiM0MzsxMDE2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwpAQCAtMTAyNyw2ICYjNDM7MTAzMSwxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTYxLDEyICYjNDM7MTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU3OSw2ICYjNDM7MTU5Myw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAlpbnQgcmV0OwogCXN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTkxLDYgJiM0MzsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQpOwogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKQEAgLTE2MTAsNiAmIzQzOzE2MjYsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTsKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1bWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgmZ3Q7CkBAIC04NDUsNiAmIzQzOzg0Niw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtJmd0O2VudHJpZXM7CiAKJiM0MzsJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAkvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovCiAJLyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqLwogCWZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmICZsdDsgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLSZndDtuZXh0X29mZnNldCwgbnVtJiM0MzsmIzQzOyl7CkBAIC04ODIsNiAmIzQzOzg4NCw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2NCw2ICYjNDM7OTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk4MSw3ICYjNDM7OTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewotCQlzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUCiAJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKQEAgLTEwMDIsMTAgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtMTAxNSw2ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiAJaWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpCiAJCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAyNSw2ICYjNDM7MTAyNyw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCWludCByZXQ7CiAJc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMzUsNiAmIzQzOzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAogCWdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICYjMzk7XDAmIzM5OzsKIAomIzQzOyByZXRyeToKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CkBAIC0xMDQ5LDYgJiM0MzsxMDUzLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTc1LDEyICYjNDM7MTU4NywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU5Myw2ICYjNDM7MTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2MDUsNiAmIzQzOzE2MjAsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTsKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewpAQCAtMTYyNCw2ICYjNDM7MTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7CiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDk1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEFkZHJlc3NpbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBhbmQgRmF1bHRzIGluIE5ldGZpbHRlciBUYWJsZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBjb3JlIE5ldGZpbHRlciB0YWJsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHksIEkgYmVsaWV2ZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBjaGFuZ2VzIGFyb3VuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gcHJvYmxlbXMuIExldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKRmlyc3QsIGluIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIHRoZSBjb2RlIG5vdyB3cmFwcyB0aGUgZW50cnkgY29weSBsb29wIHdpdGggYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGFuZCBgcGFnZWZhdWx0X2VuYWJsZSgpYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byBwcmV2ZW50IHBhZ2UgZmF1bHRzIGR1cmluZyB0aGlzIGNyaXRpY2FsIG9wZXJhdGlvbiwgbGlrZWx5IHdoZW4gYWNjZXNzaW5nIHVzZXItc3BhY2UgbWVtb3J5LCBlbnN1cmluZyBhdG9taWNpdHkgYW5kIHByZXZlbnRpbmcgdW5leHBlY3RlZCBpbnRlcnJ1cHRpb25zLiBJIHVuZGVyc3RhbmQgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGludGVycnVwdGlvbnMgYW5kIHN1YnNlcXVlbnQgcmFjZSBjb25kaXRpb25zLgoKTm93LCB0aGUgYGdldF9pbmZvYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgbWFpbiBjaGFuZ2UgaGVyZSBpcyB0aGUgbW92ZW1lbnQgb2YgdGhlIGBpbmZvYCBzdHJ1Y3QgYW5kIGBjb3B5X3RvX3VzZXIoKWAgY2FsbC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgY29kZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGBpbmZvYCBzdHJ1Y3QgKndpdGhpbiogYW4gYGlmICghSVNfRVJSKHQpKWAgYmxvY2ssIHdoZXJlIGB0YCBpcyBhIHRhYmxlIHBvaW50ZXIuIEhvd2V2ZXIsIHRoZSBzdWJzZXF1ZW50IGBjb3B5X3RvX3VzZXIoKWAgY2FsbCwgd2hpY2ggc2VuZHMgdGhhdCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHN0cnVjdCB0byB1c2VyIHNwYWNlLCAqd2FzKiBvdXRzaWRlIG9mIHRoYXQgYGlmYCBibG9jaywgYnV0IG5vdyBpdCBoYXMgYmVlbiBtb3ZlZCBhbmQgaXMgZ3VhcmRlZCBieSBgaWYgKCFyZXQgJmFtcDsmYW1wOyAuLi4pYAoKVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZy4gVGhlIGBpbmZvYCBzdHJ1Y3QgaXMgb25seSBwb3B1bGF0ZWQgaWYgdGhlIHRhYmxlIGxvb2t1cCBzdWNjZWVkcyAoYCFJU19FUlIodClgKS4gTm93LCB3aGlsZSB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCBpcyBnYXRlZCBieSBgIXJldGAsIGVuc3VyaW5nIHRoYXQgY29weSB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gYHJldCA9PSAwYCAoaS5lLiBzdWNjZXNzKSwgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIGlmIGByZXRgIGlzIG1vZGlmaWVkIHNvbWV3aGVyZSBlbHNlIHdpdGhpbiB0aGUgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGNhdXNlIGEgYGNvcHlfdG9fdXNlcigpYCB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGlzIGlzIG5vdCBpZGVhbCwgYW5kIEkgYmV0IHRoYXQgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGRhdGEgY29ycnVwdGlvbi4KClRvIGJlIHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gaW4gYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYCwgdG8gZW5zdXJlIHRoYXQgYHJldGAgaXMgKm9ubHkqIG1vZGlmaWVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIHRhYmxlIGxvb2t1cC4KCkZpbmFsbHksIHRoZSBgZ2V0X2VudHJpZXNgIGZ1bmN0aW9uIGFkZHMgYHJldHJ5YCBsb2dpYyB1c2luZyBgZmF1bHRfaW5fd3JpdGVhYmxlYC4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHBvdGVudGlhbCB3cml0ZSBmYXVsdHMgZHVyaW5nIHRoZSBjb3B5aW5nIG9mIGVudHJpZXMsIGxpa2VseSB0byB1c2VyLXNwYWNlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBmYXVsdF9pbl93cml0ZWFibGVgIGlzIHRoZXJlIHRvIGhhbmRsZSB0aGUgc2NlbmFyaW9zIHdoZXJlIHdyaXRlcyB0byB1c2VyIHNwYWNlIGNvdWxkIGZhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzI1Olx0XHR2ZnJlZShjb3VudGVycyk7XG4gNzI2Olx0XHRyZXR1cm4gcmV0O1xuIDcyNzpcdH1cbiA3Mjg6XHRcbiA3Mjk6XHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIDczMDpcdHtcbiA3MzE6XHRcdHN0cnVjdCBhcnB0X2dldGluZm8gaW5mbztcbiA3MzI6XHRcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiA3MzM6XHRcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiA3MzQ6XHRcdGludCByZXQ7XG4gNzM1Olx0XG4gNzM2Olx0XHRpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGFycHRfZ2V0aW5mbykpXG4gNzM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDczODpcdFxuIDczOTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIHVzZXIsIHNpemVvZihuYW1lKSkgIT0gMClcbiA3NDA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzQxOlx0XG4gNzQyOlx0XHRuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAmIzM5O1xcMCYjMzk7O1xuIDc0MzpcdFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xuIDc0NDpcdFx0aWYgKCFJU19FUlIodCkpIHtcbiA3NDU6XHRcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gNzQ2Olx0XG4gNzQ3Olx0XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuIDc0ODpcdFx0XHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cdTAwM2V2YWxpZF9ob29rcztcbiA3NDk6XHRcdFx0bWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS1cdTAwM2Vob29rX2VudHJ5LFxuIDc1MDpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8uaG9va19lbnRyeSkpO1xuIDc1MTpcdFx0XHRtZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtXHUwMDNldW5kZXJmbG93LFxuIDc1MjpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8udW5kZXJmbG93KSk7XG4gNzUzOlx0XHRcdGluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLVx1MDAzZW51bWJlcjtcbiA3NTQ6XHRcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIDc1NTpcdFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gNzU2Olx0XG4gNzU3Olx0XHRcdHJldCA9IDA7XG4gNzU4Olx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiA3NTk6XHRcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiA3NjA6XHRcdH0gZWxzZVxuIDc2MTpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIDc2MjpcdFxuIDc2MzpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuIDc2NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDc2NTpcdFx0cmV0dXJuIHJldDtcbiA3NjY6XHR9XG4gNzY3Olx0XG4gNzY4Olx0c3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiA3Njk6XHRcdFx0ICAgICAgIGNvbnN0IGludCAqbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGlwX3RhYmxlcy5jYCoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBpbmZvcm1hdGlvbiBpcyBiZWluZyByZXRyaWV2ZWQuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBgaXBfdGFibGVzLmNgIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uIG9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWFsaW5nIHdpdGggcmV0dXJuaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGtlcm5lbCBzcGFjZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUgaGFwcGVuaW5nIC0gdGhlIGFjdHVhbCByZXRyaWV2YWwgb2YgdGhlIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBpdCwgc3RhcnRpbmcgd2l0aCB0aGF0IGBnZXRfaW5mb2AgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIHJlcXVlc3RzIGFuZCBob3cgaXQgcGFja2FnZXMgYW5kIHJldHVybnMgdGhlIHJlbGV2YW50IGRldGFpbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGF0dGVudGlvbiBmb3Igb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHQjZW5kaWZcbiA5NDY6XHRcbiA5NDc6XHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIDk0ODpcdHtcbiA5NDk6XHRcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xuIDk1MDpcdFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIDk1MTpcdFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIDk1MjpcdFx0aW50IHJldDtcbiA5NTM6XHRcbiA5NTQ6XHRcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldGluZm8pKVxuIDk1NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5NTY6XHRcbiA5NTc6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApXG4gOTU4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDk1OTpcdFxuIDk2MDpcdFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJiMzOTtcXDAmIzM5OztcbiA5NjE6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIDk2MjpcdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4gOTYzOlx0XHRcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQpO1xuIDk2NDpcdCNlbmRpZlxuIDk2NTpcdFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgbmFtZSk7XG4gOTY2Olx0XHRpZiAoIUlTX0VSUih0KSkge1xuIDk2NzpcdFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiA5Njg6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIDk2OTpcdFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XG4gOTcwOlx0XG4gOTcxOlx0XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4gOTcyOlx0XHRcdFx0cmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgXHUwMDI2dG1wKTtcbiA5NzM6XHRcdFx0XHR4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTtcbiA5NzQ6XHRcdFx0XHRwcml2YXRlID0gXHUwMDI2dG1wO1xuIDk3NTpcdFx0XHR9XG4gOTc2Olx0I2VuZGlmXG4gOTc3Olx0XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuIDk3ODpcdFx0XHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cdTAwM2V2YWxpZF9ob29rcztcbiA5Nzk6XHRcdFx0bWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS1cdTAwM2Vob29rX2VudHJ5LFxuIDk4MDpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8uaG9va19lbnRyeSkpO1xuIDk4MTpcdFx0XHRtZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtXHUwMDNldW5kZXJmbG93LFxuIDk4MjpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8udW5kZXJmbG93KSk7XG4gOTgzOlx0XHRcdGluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLVx1MDAzZW51bWJlcjtcbiA5ODQ6XHRcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIDk4NTpcdFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gOTg2Olx0XG4gOTg3Olx0XHRcdHJldCA9IDA7XG4gOTg4Olx0XG4gOTg5Olx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiA5OTA6XHRcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiA5OTE6XHRcdH0gZWxzZVxuIDk5MjpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIDk5MzpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gOTk0Olx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbiA5OTU6XHRcdFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcbiA5OTY6XHQjZW5kaWZcbiA5OTc6XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiA5OTg6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiA5OTk6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUHY0IENvbXBhdCBUYWJsZSBJbmZvcm1hdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgaXBfdGFibGVzLmNgIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb21wYXRpYmlsaXR5IGhhbmRsaW5nIHdvcmtzLiBPa2F5LCBJIHNlZSB0aGUgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBjaGVja3MgZm9yIGBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUYCBhbmQsIHdpdGhpbiBpdCwgYGluX2NvbXBhdF9zeXNjYWxsKClgLiBOb3cgSSBzZWUgdGhlIGNydWNpYWwgcGFydDogdGhlIGBjb21wYXRfdGFibGVfaW5mb2AgZnVuY3Rpb24hCgpCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgaWYgYGNvbXBhdF90YWJsZV9pbmZvYCAqZmFpbHMqPyBUaGUgY29kZSBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGhhbmRsZSBhIHBvdGVudGlhbCBlcnJvciByZXR1cm4uIEl0IGNoZWNrcyBmb3IgYElTX0VSUih0KWAsIGJ1dCB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGFuIGVxdWl2YWxlbnQgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbXBhdF90YWJsZV9pbmZvYCBpdHNlbGYgYmVmb3JlIHRoYXQgYHByaXZhdGUgPSAmYW1wO3RtcDtgIGFzc2lnbm1lbnQuIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGNvbXBhdF90YWJsZV9pbmZvYCB0byB1bmRlcnN0YW5kIGl0cyBlcnJvciBiZWhhdmlvciBhbmQgc2VlIGlmIHRoaXMgcmVxdWlyZXMgYSBmaXguIEEgcmV0dXJuIG9mIGFuIGVycm9yIHdvdWxkIGhhdmUgYmVlbiBhIHNpZ25pZmljYW50IHByb2JsZW0uIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyNTpcdFx0Y29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeTtcbiA5MjY6XHRcdGludCByZXQ7XG4gOTI3Olx0XG4gOTI4Olx0XHRpZiAoIW5ld2luZm8gfHwgIWluZm8pXG4gOTI5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDkzMDpcdFxuIDkzMTpcdFx0Lyogd2UgZG9udCBjYXJlIGFib3V0IG5ld2luZm8tXHUwMDNlZW50cmllcyAqL1xuIDkzMjpcdFx0bWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7XG4gOTMzOlx0XHRuZXdpbmZvLVx1MDAzZWluaXRpYWxfZW50cmllcyA9IDA7XG4gOTM0Olx0XHRsb2NfY3B1X2VudHJ5ID0gaW5mby1cdTAwM2VlbnRyaWVzO1xuIDkzNTpcdFx0cmV0ID0geHRfY29tcGF0X2luaXRfb2Zmc2V0cyhBRl9JTkVULCBpbmZvLVx1MDAzZW51bWJlcik7XG4gOTM2Olx0XHRpZiAocmV0KVxuIDkzNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDkzODpcdFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBpbmZvLVx1MDAzZXNpemUpIHtcbiA5Mzk6XHRcdFx0cmV0ID0gY29tcGF0X2NhbGNfZW50cnkoaXRlciwgaW5mbywgbG9jX2NwdV9lbnRyeSwgbmV3aW5mbyk7XG4gOTQwOlx0XHRcdGlmIChyZXQgIT0gMClcbiA5NDE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDk0MjpcdFx0fVxuIDk0MzpcdFx0cmV0dXJuIDA7XG4gOTQ0Olx0fVxuIDk0NTpcdCNlbmRpZlxuIDk0NjpcdFxuIDk0NzpcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gOTQ4Olx0e1xuIDk0OTpcdFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdldF9pbmZvYCBQYXRjaDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgU2FmZXR5IGFuZCBMb2NraW5nKioKCk9rYXksIHNvIGJlZm9yZSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmJlZm9yZSogc3RhdGUgb2YgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24uIFJpZ2h0LCBoZXJlJiMzOTtzIHdoYXQgSSBzZWU6IHRoZSBvbGQgY29kZSB3YXMgcmVxdWVzdGluZyBhIHRhYmxlIGxvY2ssIHJldHJpZXZpbmcgdGFibGUgaW5mb3JtYXRpb24sIGFuZCB0aGVuIGRvaW5nIGEgYGNvcHlfdG9fdXNlcmAuIEkmIzM5O20gc2VlaW5nIHRoYXQgZXZlbiBpZiBgY29tcGF0X3RhYmxlX2luZm9gIGZhaWxlZCwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCBhbnl3YXksIHdoaWNoIHNlZW1z4oCmIHBlY3VsaWFyLiBBbmQgaW4gdGhlIG5ldyBjb2RlLCBJIG5vdGljZWQgdGhlIGxpbmUgYHJldCA9IDA7YCBzZXQgZXhwbGljaXRseSBhbmQgdGhlbiBvdmVyd3JpdHRlbiBvbmx5IG9uIGEgZmF1bHQuIENydWNpYWxseSwgYGluZm9gIGlzIGJlaW5nIGBtZW1zZXRgLWVkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgKndoeSogb2YgdGhpcyBwYXRjaC4gVGhlIGtleSBpcyBpbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gQWhhLCB0aGUgdXNlIG9mIGBwYWdlZmF1bHRfZGlzYWJsZSgpYCBhcm91bmQgdGhlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgYW5kIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGZ1bmN0aW9ucyBpcyB0aGUgZ2l2ZWF3YXkuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBnZXRfZW50cmllc2AgZnVuY3Rpb24gYXMgd2VsbC4KClRoZSBtb3RpdmF0aW9uIGhlcmUgaXMgY2xlYXI6IHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtYWtpbmcgYGNvcHlfdG9fdXNlcmAgY2FsbHMgKndoaWxlIGhvbGRpbmcgYSBsb2NrKiAobGlrZSBgeHRfdGFibGVfbG9ja2ApLiBUaGlzIGlzIGEgcG90ZW50aWFsIGRpc2FzdGVyISBXZSBjYW4gZW5kIHVwIHdpdGggZGVhZGxvY2tzLCBvciBhdCBsZWFzdCB1bmRlc2lyYWJsZSBiZWhhdmlvciBpZiBhIHBhZ2UgZmF1bHQgaGFwcGVucyB3aGlsZSB3ZSYjMzk7cmUgaW4gYW4gYXRvbWljIGNvbnRleHQgb3Igd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLiBBIHBhZ2UgZmF1bHQgZHVyaW5nIGEgYGNvcHlfdG9fdXNlcmAgY2FsbCBpbiBzdWNoIGEgc2l0dWF0aW9uIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcywgaW5jbHVkaW5nIGxvY2sgaW52ZXJzaW9uIGFuZCBpc3N1ZXMgd2l0aCBgbW1hcF9sb2NrYC4KClRoZXJlZm9yZSwgdGhlIHBhdGNoJiMzOTtzIG9iamVjdGl2ZSBpcyB0byBtb3ZlIHRoYXQgYGNvcHlfdG9fdXNlcmAgb3V0c2lkZSB0aGUgdGFibGUgbG9jayBpbiBgZ2V0X2luZm9gLCBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IGhvbGRpbmcgYW55IGxvY2tzIGR1cmluZyB0aGUgY29weS4gSW4gYGNvcHlfZW50cmllc190b191c2VyYCwgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGlzIHVzZWQgdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCB3aGlsZSB0aGUgbG9jayBpcyBoZWxkLiBJZiB3ZSBkbyBnZXQgYSAtRUZBVUxULCB0aGUgY29kZSB1bmxvY2tzLCBjaGVja3MgZm9yIGEgZmF1bHQgdXNpbmcgYGZhdWx0X2luX3dyaXRlYWJsZSgpYCwgYW5kIHJldHJpZXMuIENsZXZlci4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gc2NhbiB0aGVzZSBtb2RpZmllZCBmaWxlcywgZXNwZWNpYWxseSBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgYW55dGhpbmcgS01TQU4gbWlnaHQgZmxhZy4gQWxzbywgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGlwNl90YWJsZXMuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBoYW5kbGVkIHNpbWlsYXJseS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgcGF0Y2gsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTY1Olx0fVxuIDk2NjpcdCNlbmRpZlxuIDk2NzpcdFxuIDk2ODpcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gOTY5Olx0e1xuIDk3MDpcdFx0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xuIDk3MTpcdFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIDk3MjpcdFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIDk3MzpcdFx0aW50IHJldDtcbiA5NzQ6XHRcbiA5NzU6XHRcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXA2dF9nZXRpbmZvKSlcbiA5NzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTc3Olx0XG4gOTc4Olx0XHRpZiAoY29weV9mcm9tX3VzZXIobmFtZSwgdXNlciwgc2l6ZW9mKG5hbWUpKSAhPSAwKVxuIDk3OTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA5ODA6XHRcbiA5ODE6XHRcdG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICYjMzk7XFwwJiMzOTs7XG4gOTgyOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiA5ODM6XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIDk4NDpcdFx0XHR4dF9jb21wYXRfbG9jayhBRl9JTkVUNik7XG4gOTg1Olx0I2VuZGlmXG4gOTg2Olx0XHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgbmFtZSk7XG4gOTg3Olx0XHRpZiAoIUlTX0VSUih0KSkge1xuIDk4ODpcdFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiA5ODk6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIDk5MDpcdFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XG4gOTkxOlx0XG4gOTkyOlx0XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4gOTkzOlx0XHRcdFx0cmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgXHUwMDI2dG1wKTtcbiA5OTQ6XHRcdFx0XHR4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUNik7XG4gOTk1Olx0XHRcdFx0cHJpdmF0ZSA9IFx1MDAyNnRtcDtcbiA5OTY6XHRcdFx0fVxuIDk5NzpcdCNlbmRpZlxuIDk5ODpcdFx0XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiA5OTk6XHRcdFx0aW5mby52YWxpZF9ob29rcyA9IHQtXHUwMDNldmFsaWRfaG9va3M7XG4xMDAwOlx0XHRcdG1lbWNweShpbmZvLmhvb2tfZW50cnksIHByaXZhdGUtXHUwMDNlaG9va19lbnRyeSxcbjEwMDE6XHRcdFx0ICAgICAgIHNpemVvZihpbmZvLmhvb2tfZW50cnkpKTtcbjEwMDI6XHRcdFx0bWVtY3B5KGluZm8udW5kZXJmbG93LCBwcml2YXRlLVx1MDAzZXVuZGVyZmxvdyxcbjEwMDM6XHRcdFx0ICAgICAgIHNpemVvZihpbmZvLnVuZGVyZmxvdykpO1xuMTAwNDpcdFx0XHRpbmZvLm51bV9lbnRyaWVzID0gcHJpdmF0ZS1cdTAwM2VudW1iZXI7XG4xMDA1Olx0XHRcdGluZm8uc2l6ZSA9IHByaXZhdGUtXHUwMDNlc2l6ZTtcbjEwMDY6XHRcdFx0c3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4xMDA3Olx0XG4xMDA4Olx0XHRcdHJldCA9IDA7XG4xMDA5Olx0XG4xMDEwOlx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbjEwMTE6XHRcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbjEwMTI6XHRcdH0gZWxzZVxuMTAxMzpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuMTAxNDpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4xMDE1Olx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbjEwMTY6XHRcdFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7XG4xMDE3Olx0I2VuZGlmXG4xMDE4Olx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4xMDE5Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQ2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGNvcHlfZW50cmllc190b191c2VyYCBpbiBOZXR3b3JrIFRhYmxlcyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gdHJhY2UgaXRzIGJlaGF2aW9yIGFjcm9zcyB0aGUgdmFyaW91cyB0YWJsZSBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiBgYXJwX3RhYmxlc2AsIGBpcF90YWJsZXNgLCBhbmQgYGlwNl90YWJsZXNgLCBhcyB0aGVzZSBhcmUgdGhlIHByaW1hcnkgcG9pbnRzIG9mIGludGVyZXN0IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgZmlsdGVyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbW92ZW1lbnQgb2YgZW50cmllcyDigJMgYmUgdGhleSBBUlAgbWFwcGluZ3MsIElQdjQgZmlyZXdhbGwgcnVsZXMsIG9yIElQdjYgZmlsdGVycyDigJMgZnJvbSB0aGUga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuIFVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvcHkgb3BlcmF0aW9uLCBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCBpcyBwYXJhbW91bnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZGF0YSB0cmFuc2Zlci4gSSB3aWxsIGFsc28gYmUgY29uc2lkZXJpbmcgaG93IHRoZSBjb250ZXh0IG9mIHRoZSB1c2VyIHByb2Nlc3MgbWlnaHQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGJ5IHRoZSBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgYW55IGNoYW5nZXMgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIHByb3RlY3QgdGhlIHN5c3RlbS4gSSB3aWxsIHRoZW4gYW5hbHl6ZSBpdHMgcmVzb3VyY2UgdXNhZ2UgYW5kIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgZW1lcmdlIGR1cmluZyB0aGUgY29weSBwcm9jZXNzLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgcHJvY2VzcyBjYW4gYmUgb3B0aW1pemVkLCBhbmQgaG93IGl0IGNhbiBiZSBzZWN1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0aW50IHJldCA9IDA7XG4gNjkxOlx0XHR2b2lkICpsb2NfY3B1X2VudHJ5O1xuIDY5MjpcdFxuIDY5MzpcdFx0Y291bnRlcnMgPSBhbGxvY19jb3VudGVycyh0YWJsZSk7XG4gNjk0Olx0XHRpZiAoSVNfRVJSKGNvdW50ZXJzKSlcbiA2OTU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xuIDY5NjpcdFxuIDY5NzpcdFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiA2OTg6XHRcbiA2OTk6XHRcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gNzAwOlx0XHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gNzAxOlx0XHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gNzAyOlx0XHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbiA3MDM6XHRcdFx0Y29uc3Qgc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdDtcbiA3MDQ6XHRcbiA3MDU6XHRcdFx0ZSA9IGxvY19jcHVfZW50cnkgJiM0Mzsgb2ZmO1xuIDcwNjpcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJwdHIgJiM0Mzsgb2ZmLCBlLFxuIDcwNzpcdFx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBhcnB0X2VudHJ5LCBjb3VudGVycykpIHx8XG4gNzA4Olx0XHRcdCAgICBjb3B5X3RvX3VzZXIodXNlcnB0ciAmIzQzOyBvZmZcbiA3MDk6XHRcdFx0XHRcdCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgYXJwdF9lbnRyeSwgY291bnRlcnMpLFxuIDcxMDpcdFx0XHRcdFx0IFx1MDAyNmNvdW50ZXJzW251bV0sXG4gNzExOlx0XHRcdFx0XHQgc2l6ZW9mKGNvdW50ZXJzW251bV0pKSkge1xuIDcxMjpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNzEzOlx0XHRcdFx0Z290byBmcmVlX2NvdW50ZXJzO1xuIDcxNDpcdFx0XHR9XG4gNzE1Olx0XG4gNzE2Olx0XHRcdHQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTtcbiA3MTc6XHRcdFx0aWYgKHh0X3RhcmdldF90b191c2VyKHQsIHVzZXJwdHIgJiM0Mzsgb2ZmICYjNDM7IGUtXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcbiA3MTg6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDcxOTpcdFx0XHRcdGdvdG8gZnJlZV9jb3VudGVycztcbiA3MjA6XHRcdFx0fVxuIDcyMTpcdFx0fVxuIDcyMjpcdFxuIDcyMzpcdCBmcmVlX2NvdW50ZXJzOlxuIDcyNDpcdFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIDcyNTpcdFx0dmZyZWUoY291bnRlcnMpO1xuIDcyNjpcdFx0cmV0dXJuIHJldDtcbiA3Mjc6XHR9XG4gNzI4Olx0XG4gNzI5Olx0c3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTAKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMTM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgRGV0ZWN0ZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FudGVkIHRvIHJpZ29yb3VzbHkgY2hlY2sgYGdldF9lbnRyaWVzYCBhY3Jvc3MgYWxsIHRocmVlIHJlbGV2YW50IGZpbGVzOiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLiBJIGZvY3VzZWQgb24gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgYGdldF9lbnRyaWVzYCBmdW5jdGlvbiBhbmQgdGhlIHJlbGF0ZWQgYGNvcHlfZW50cmllc190b191c2VyYCBhbmQgYGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcmAgZnVuY3Rpb25zLgoKSSB6ZXJvZWQgaW4gb24gdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24sIGNoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UuIFRoZSBgaW5mb2Agc3RydWN0IGluIGBnZXRfaW5mb2AgaXMgZGVmaW5lZCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIGdvb2QuICBJIGNvbmZpcm1lZCB0aGF0IHRoZSBjb2RlIHdpdGhpbiB0aGUgYGlmICghSVNfRVJSKHQpKWAgYmxvY2sgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIGBpbmZvYCB3aXRoIGBtZW1zZXQoJmFtcDtpbmZvLCAwLCBzaXplb2YoaW5mbykpYC4gQWxsIGZpZWxkcyBhcmUgdGhlbiBwb3B1bGF0ZWQsIGFuZCBvbmx5IGlmIGByZXRgIGlzIHplcm8gKGluZGljYXRpbmcgc3VjY2VzcykgZG9lcyBgY29weV90b191c2VyYCBldmVuIGV4ZWN1dGUuIFRoaXMgcHJldmVudHMgYW55IHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgYGluZm9gIHN0cnVjdCBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4gSWYgYHJldGAgaXMgbm90IHplcm8sIHRoZSBgY29weV90b191c2VyYCBkb2VzIG5vdCBoYXBwZW4uCgpJIHRoZW4gbG9va2VkIGF0IGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgYW5kIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgLiBUaGUgb25seSBjaGFuZ2UgdGhlcmUgd2FzIHRoZSBhZGRpdGlvbiBvZiBgcGFnZWZhdWx0X2Rpc2FibGUoKWAgYW5kIGBwYWdlZmF1bHRfZW5hYmxlKClgLCBidXQgY3JpdGljYWxseSwgdGhlIGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBpbml0aWFsaXphdGlvbiBsb2dpYyB3ZXJlICpub3QqIG1vZGlmaWVkLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBzYWZlIHRoZXJlLgoKYGdldF9lbnRyaWVzYCBhbmQgYGNvbXBhdF9nZXRfZW50cmllc2AgYWxzbyBoYWQgdGhlIG5ldyByZXRyeSBsb2dpYy4gQnV0IGFnYWluLCBpdCYjMzk7cyBqdXN0IHJldHJ5IGxvZ2ljLCBzbyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzLiBJIGNoZWNrZWQgZm9yIGFueSBvdGhlciBwYXRocyBvciBjaGFuZ2VzIGluIHRoZSBkaWZmIHRvIGVuc3VyZSBub3RoaW5nIHNsaXBwZWQgbXkgYXR0ZW50aW9uLgoKTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/KiogTm8uIGBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm9lZCBiZWZvcmUgcG9wdWxhdGlvbi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBhcmUgc2VudC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBUaGUgYGZhdWx0ZWRgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIGByZXRgIGhhcyBiZWVuIHNldCBpbiBhbGwgYnJhbmNoZXMuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyoqIE5vLgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm8uCgpHaXZlbiB0aG9zZSBjaGVja3MsIEkgY29uY2x1ZGVkIHRoYXQsIGZyb20gdGhlIEtNU0FOIHBlcnNwZWN0aXZlLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZSB0eXBlcyBvZiBidWdzIHRoYXQgYXJlIHBvc3NpYmxlIGhlcmUgYXJlIHRoaW5ncyBsaWtlIGRlYWRsb2NrcywgbG9jayBvcmRlcmluZyBwcm9ibGVtcywgYW5kIGlzc3VlcyB3aXRoIHVzZXIgcG9pbnRlcnMsIGJ1dCB0aG9zZSBhcmUgdGhpbmdzIHRoYXQgS0FTQU4gb3IgbG9ja2RlcCB3b3VsZCBoYXZlIGZsYWdnZWQuIFRoZSBjb2RlIGxvb2tzIHNvbGlkIGZyb20gYSBLTVNBTiBwb2ludCBvZiB2aWV3LCBhbmQgSSBkb3VibGUtY2hlY2tlZCBgZ2V0X2luZm9gIGluIGBpcF90YWJsZXMuY2AgdG8gYmUgc3VyZSBldmVyeXRoaW5nIHdhcyBwcm9wZXJseSBpbml0aWFsaXplZCwgcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIHRoZSBgY29tcGF0YCBzeXNjYWxsIHBhdGguICBUaGUgYGluZm9gIHZhcmlhYmxlLCBzcGVjaWZpY2FsbHksIGlzIHNldCB0byB6ZXJvIHRoZXJlIGFzIHdlbGwuIEV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQhCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXG5cbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJiMzOTtmYXVsdGVkJiMzOTsgYW5kICYjMzk7cmV0JiMzOTsgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpcHRhYmxlcywgaXA2dGFibGVzLCBhbmQgYXJwdGFibGVzIHRvIHByZXZlbnQgZGVhZGxvY2tzIGFuZCBsb2NrIGludmVyc2lvbiB3aGVuIGNvcHlpbmcgZGF0YSB0by9mcm9tIHVzZXIgc3BhY2Ugd2hpbGUgaG9sZGluZyB0YWJsZSBsb2NrcyAoYnkgZGlzYWJsaW5nIHBhZ2UgZmF1bHRzIGluIGNvcHlfZW50cmllc190b191c2VyIGFuZCByZXRyeWluZyB3aXRoIGZhdWx0X2luX3dyaXRlYWJsZSwgYW5kIGJ5IGRlZmVycmluZyBjb3B5X3RvX3VzZXIgaW4gZ2V0X2luZm8gdW50aWwgYWZ0ZXIgdW5sb2NraW5nKS5cblxuQWxsIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZSAoc3VjaCBhcyBzdHJ1Y3QgaXB0X2dldGluZm8gLyBpcDZ0X2dldGluZm8gLyBhcnB0X2dldGluZm8pIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQgYW5kIGNvcGllZCwgYW5kIGNvcHlfdG9fdXNlciBpcyBvbmx5IGludm9rZWQgaWYgdGFibGUgbG9va3VwIHN1Y2NlZWRlZCB3aXRob3V0IGVycm9yLiBMb2NhbCB2YXJpYWJsZXMgbGlrZSAmIzM5O2ZhdWx0ZWQmIzM5OyBhbmQgJiMzOTtyZXQmIzM5OyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIGFsbCBicmFuY2hlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb2xlYWsgcmlza3MgYXJlIGludHJvZHVjZWQ7IGFueSBwb3RlbnRpYWwgYnVncyAobG9ja2luZywgZmF1bHQgaGFuZGxpbmcsIGVycm9yIGNvZGVzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQga2VybmVsIGNoZWNrcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MTEuNDIxODA0NTY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3OTgyODA1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUF9ORl9BUlBUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZW50cmllc190b191c2VyXCIsXG4gICAgXCJnZXRfZW50cmllc1wiLFxuICAgIFwiZ2V0X2luZm9cIixcbiAgICBcImNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiY29tcGF0X2dldF9lbnRyaWVzXCIsXG4gICAgXCJkb19pcHRfZ2V0X2N0bFwiLFxuICAgIFwiZG9faXA2dF9nZXRfY3RsXCIsXG4gICAgXCJkb19hcnB0X2dldF9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlwdGFibGVzLCBpcDZ0YWJsZXMsIGFuZCBhcnB0YWJsZXMgdG8gcHJldmVudCBkZWFkbG9ja3MgYW5kIGxvY2sgaW52ZXJzaW9uIHdoZW4gY29weWluZyBkYXRhIHRvL2Zyb20gdXNlciBzcGFjZSB3aGlsZSBob2xkaW5nIHRhYmxlIGxvY2tzIChieSBkaXNhYmxpbmcgcGFnZSBmYXVsdHMgaW4gY29weV9lbnRyaWVzX3RvX3VzZXIgYW5kIHJldHJ5aW5nIHdpdGggZmF1bHRfaW5fd3JpdGVhYmxlLCBhbmQgYnkgZGVmZXJyaW5nIGNvcHlfdG9fdXNlciBpbiBnZXRfaW5mbyB1bnRpbCBhZnRlciB1bmxvY2tpbmcpLlxcblxcbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSkgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZCBhbmQgY29waWVkLCBhbmQgY29weV90b191c2VyIGlzIG9ubHkgaW52b2tlZCBpZiB0YWJsZSBsb29rdXAgc3VjY2VlZGVkIHdpdGhvdXQgZXJyb3IuIExvY2FsIHZhcmlhYmxlcyBsaWtlICdmYXVsdGVkJyBhbmQgJ3JldCcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja29wdCByZXRyaWV2YWwgcGF0aHMgaW4gbGVnYWN5IGFycF90YWJsZXMsIGlwX3RhYmxlcywgYW5kIGlwNl90YWJsZXMuIEl0IGFkZHMgcGFnZWZhdWx0X2Rpc2FibGUoKS9wYWdlZmF1bHRfZW5hYmxlKCkgYXJvdW5kIHVzZXIgY29waWVzIHdoaWxlIGhvbGRpbmcgeHRfdGFibGUgbG9ja3MsIGFkZHMgZmF1bHRfaW5fd3JpdGVhYmxlKCkgcmV0cnkgaGFuZGxpbmcgaW4gZ2V0X2VudHJpZXMvY29tcGF0X2dldF9lbnRyaWVzLCBhbmQgbW92ZXMgY29weV90b191c2VyIG91dHNpZGUgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBpbiBnZXRfaW5mby4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nLCBwYWdlIGZhdWx0LCBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOToxMS40MjE4MDg3NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE1NzQ5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTY6Mzk6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcXG5pbmRleCBkYjMwN2ZhNDlmM2Y2Li43YjQzMjY5YWE2YjIxIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuIFxcbkBAIC02OTUsNiArNjk2LDcgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcXG4gXFxuIFxcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVxcdTAwM2VlbnRyaWVzO1xcbiBcXG4rXFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gXFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xcbiBcXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXFxuIFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuQEAgLTcxOSwxMiArNzIxLDE0IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXFxuIFxcdH1cXG4gXFxuICBmcmVlX2NvdW50ZXJzOlxcbitcXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4ge1xcbitcXHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XFxuIFxcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcXG4gXFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbiBcXHRpbnQgcmV0O1xcbkBAIC03MzgsNyArNzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4gXFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJ1xcXFwwJztcXG4gXFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbi1cXHRcXHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4gXFxuIFxcdFxcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG5AQCAtNzUxLDE1ICs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4gXFx0XFx0aW5mby5zaXplID0gcHJpdmF0ZS1cXHUwMDNlc2l6ZTtcXG4gXFx0XFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xcbiBcXG4tXFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4tXFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHR4dF90YWJsZV91bmxvY2sodCk7XFxuIFxcdFxcdG1vZHVsZV9wdXQodC1cXHUwMDNlbWUpO1xcbiBcXHR9IGVsc2VcXG4gXFx0XFx0cmV0ID0gUFRSX0VSUih0KTtcXG4gXFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNzY5LDYgKzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIGdldDtcXG4gXFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbitcXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgqbGVuIFxcdTAwM2Mgc2l6ZW9mKGdldCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC03NzksNiArNzgyLDcgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFxuIFxcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXFxcMCc7XFxuIFxcbisgcmV0cnk6XFxuIFxcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgZ2V0Lm5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuQEAgLTc5NCw2ICs3OTgsMTQgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFx0fSBlbHNlXFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIFxcbitcXHRpZiAocmV0ID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgIWZhdWx0ZWQpIHtcXG4rXFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuK1xcdFxcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cXHUwMDNlZW50cnl0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGdldC5zaXplKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1xcbmluZGV4IDgwOTQ0MWNlZGNlZGMuLmUwMjkwNzJiMDc1MDEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1bWFzay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmhcXHUwMDNlXFxuQEAgLTgyNCw2ICs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcXG4gXFxuIFxcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVxcdTAwM2VlbnRyaWVzO1xcbiBcXG4rXFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gXFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xcbiBcXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXFxuIFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuQEAgLTg2MSw2ICs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcXG4gXFx0fVxcbiBcXG4gIGZyZWVfY291bnRlcnM6XFxuK1xcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4gXFx0dmZyZWUoY291bnRlcnMpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTk0Myw2ICs5NDYsNyBAQCBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLFxcbiBcXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4ge1xcbitcXHRzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbztcXG4gXFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xcbiBcXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XFxuIFxcdGludCByZXQ7XFxuQEAgLTk2MCw3ICs5NjQsNiBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiAjZW5kaWZcXG4gXFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgbmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuLVxcdFxcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIFxcdFxcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcXG5AQCAtOTgxLDEwICs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiBcXHRcXHRpbmZvLnNpemUgPSBwcml2YXRlLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XFxuIFxcbi1cXHRcXHRpZiAoY29weV90b191c2VyKHVzZXIsIFxcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxcbi1cXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdHJldCA9IDA7XFxuIFxcbiBcXHRcXHR4dF90YWJsZV91bmxvY2sodCk7XFxuIFxcdFxcdG1vZHVsZV9wdXQodC1cXHUwMDNlbWUpO1xcbkBAIC05OTQsNiArOTk0LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4gXFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxuIFxcdFxcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7XFxuICNlbmRpZlxcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXFx1MDAyNmluZm8sICpsZW4pICE9IDApXFxuK1xcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTEwMDQsNiArMTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgZ2V0O1xcbiBcXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XFxuK1xcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKCpsZW4gXFx1MDAzYyBzaXplb2YoZ2V0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTEwMTMsNiArMTAxNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbiBcXG4rIHJldHJ5OlxcbiBcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuQEAgLTEwMjcsNiArMTAzMSwxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXHR9IGVsc2VcXG4gXFx0XFx0cmV0ID0gUFRSX0VSUih0KTtcXG4gXFxuK1xcdGlmIChyZXQgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAhZmF1bHRlZCkge1xcbitcXHRcXHRmYXVsdGVkID0gdHJ1ZTtcXG4rXFx0XFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVxcdTAwM2VlbnRyeXRhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZ2V0LnNpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTU2MSwxMiArMTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsXFxuIFxcbiBcXHRwb3MgPSB1c2VycHRyO1xcbiBcXHRzaXplID0gdG90YWxfc2l6ZTtcXG4rXFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gXFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBwcml2YXRlLVxcdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XFxuIFxcdFxcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXFx1MDAyNnBvcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpKyspO1xcbiBcXHRcXHRpZiAocmV0ICE9IDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4gXFxuIFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTU3OSw2ICsxNTkzLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXHRpbnQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBnZXQ7XFxuIFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4rXFx0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoKmxlbiBcXHUwMDNjIHNpemVvZihnZXQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTU5MSw2ICsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXG4gXFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcXFwwJztcXG4gXFxuKyByZXRyeTpcXG4gXFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVCk7XFxuIFxcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuQEAgLTE2MTAsNiArMTYyNiwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIFxcbiBcXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xcbitcXHRpZiAocmV0ID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgIWZhdWx0ZWQpIHtcXG4rXFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuK1xcdFxcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cXHUwMDNlZW50cnl0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGdldC5zaXplKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcXG5pbmRleCAzMTNjNGFhYzM3N2FhLi5hNjRmY2QzYTk5NDhjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1bWFzay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXFx1MDAzZVxcbkBAIC04NDUsNiArODQ2LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXFxuIFxcbiBcXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cXHUwMDNlZW50cmllcztcXG4gXFxuK1xcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuIFxcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cXG4gXFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xcbiBcXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcXHUwMDNjIHRvdGFsX3NpemU7IG9mZiArPSBlLVxcdTAwM2VuZXh0X29mZnNldCwgbnVtKyspe1xcbkBAIC04ODIsNiArODg0LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXFxuIFxcdH1cXG4gXFxuICBmcmVlX2NvdW50ZXJzOlxcbitcXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC05NjQsNiArOTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIHtcXG4rXFx0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xcbiBcXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XFxuIFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4gXFx0aW50IHJldDtcXG5AQCAtOTgxLDcgKzk4NSw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuICNlbmRpZlxcbiBcXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgbmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuLVxcdFxcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVxcdTAwM2Vwcml2YXRlO1xcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbiBcXHRcXHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XFxuQEAgLTEwMDIsMTAgKzEwMDUsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiBcXHRcXHRpbmZvLnNpemUgPSBwcml2YXRlLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcXG4gXFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlciwgXFx1MDAyNmluZm8sICpsZW4pICE9IDApXFxuLVxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0cmV0ID0gMDtcXG4gXFxuIFxcdFxcdHh0X3RhYmxlX3VubG9jayh0KTtcXG4gXFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuQEAgLTEwMTUsNiArMTAxNSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbiBcXHRcXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcXG4gI2VuZGlmXFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTAyNSw2ICsxMDI3LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIGdldDtcXG4gXFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbitcXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgqbGVuIFxcdTAwM2Mgc2l6ZW9mKGdldCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xMDM1LDYgKzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFxuIFxcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXFxcMCc7XFxuIFxcbisgcmV0cnk6XFxuIFxcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbiBcXHRcXHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuQEAgLTEwNDksNiArMTA1MywxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFx0fSBlbHNlXFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIFxcbitcXHRpZiAocmV0ID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgIWZhdWx0ZWQpIHtcXG4rXFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuK1xcdFxcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cXHUwMDNlZW50cnl0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGdldC5zaXplKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTE1NzUsMTIgKzE1ODcsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxcbiBcXG4gXFx0cG9zID0gdXNlcnB0cjtcXG4gXFx0c2l6ZSA9IHRvdGFsX3NpemU7XFxuK1xcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuIFxcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cXHUwMDNlZW50cmllcywgdG90YWxfc2l6ZSkge1xcbiBcXHRcXHRyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsIFxcdTAwMjZwb3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzaXplLCBjb3VudGVycywgaSsrKTtcXG4gXFx0XFx0aWYgKHJldCAhPSAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcbiBcXHR2ZnJlZShjb3VudGVycyk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE1OTMsNiArMTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBnZXQ7XFxuIFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4rXFx0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoKmxlbiBcXHUwMDNjIHNpemVvZihnZXQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTYwNSw2ICsxNjIwLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFxuIFxcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXFxcMCc7XFxuIFxcbisgcmV0cnk6XFxuIFxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcXG4gXFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuQEAgLTE2MjQsNiArMTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKHQpO1xcbiBcXG4gXFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7XFxuK1xcdGlmIChyZXQgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAhZmF1bHRlZCkge1xcbitcXHRcXHRmYXVsdGVkID0gdHJ1ZTtcXG4rXFx0XFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVxcdTAwM2VlbnRyeXRhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZ2V0LnNpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOToxMy4wNzM5NDc4MjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYzODk4MjEwMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcIixcbiAgICBcIklQX05GX0lQVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVA2X05GX0lQVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfQVJQVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19DT01QQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiZ2V0X2VudHJpZXNcIixcbiAgICBcImdldF9pbmZvXCIsXG4gICAgXCJjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJcIixcbiAgICBcImNvbXBhdF9nZXRfZW50cmllc1wiLFxuICAgIFwiZG9faXB0X2dldF9jdGxcIixcbiAgICBcImRvX2lwNnRfZ2V0X2N0bFwiLFxuICAgIFwiZG9fYXJwdF9nZXRfY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja29wdCByZXRyaWV2YWwgcGF0aHMgaW4gbGVnYWN5IGFycF90YWJsZXMsIGlwX3RhYmxlcywgYW5kIGlwNl90YWJsZXMuIEl0IGFkZHMgcGFnZWZhdWx0X2Rpc2FibGUoKS9wYWdlZmF1bHRfZW5hYmxlKCkgYXJvdW5kIHVzZXIgY29waWVzIHdoaWxlIGhvbGRpbmcgeHRfdGFibGUgbG9ja3MsIGFkZHMgZmF1bHRfaW5fd3JpdGVhYmxlKCkgcmV0cnkgaGFuZGxpbmcgaW4gZ2V0X2VudHJpZXMvY29tcGF0X2dldF9lbnRyaWVzLCBhbmQgbW92ZXMgY29weV90b191c2VyIG91dHNpZGUgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBpbiBnZXRfaW5mby4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nLCBwYWdlIGZhdWx0LCBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiMzQxMzEyMmFlNDNiZjVmNWZmYmRlNWJmMGZlYWMxYWM0ZmRkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE2OjM5OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcbmluZGV4IGRiMzA3ZmE0OWYzZjYuLjdiNDMyNjlhYTZiMjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiBcbkBAIC02OTUsNiArNjk2LDcgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcbiBcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVx1MDAzZWVudHJpZXM7XG4gXG4rXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xuIFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xuIFx0Zm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgXHUwMDNjIHRvdGFsX3NpemU7IG9mZiArPSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XG5AQCAtNzE5LDEyICs3MjEsMTQgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbitcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4ge1xuK1x0c3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvO1xuIFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIFx0aW50IHJldDtcbkBAIC03MzgsNyArNzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICdcXDAnO1xuIFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbi1cdFx0c3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvO1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiBcbiBcdFx0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG5AQCAtNzUxLDE1ICs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gMDtcbitcdFx0cmV0ID0gMDtcbiBcdFx0eHRfdGFibGVfdW5sb2NrKHQpO1xuIFx0XHRtb2R1bGVfcHV0KHQtXHUwMDNlbWUpO1xuIFx0fSBlbHNlXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC03NjksNiArNzcxLDcgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzc5LDYgKzc4Miw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFwwJztcbiBcbisgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTc5NCw2ICs3OTgsMTQgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG5pbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVtYXNrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oXHUwMDNlXG5AQCAtODI0LDYgKzgyNSw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFxuIFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiBcbitcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXHUwMDNlbmV4dF9vZmZzZXQsIG51bSsrKXtcbkBAIC04NjEsNiArODYzLDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXHR9XG4gXG4gIGZyZWVfY291bnRlcnM6XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC05NDMsNiArOTQ2LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbitcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xuIFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIFx0aW50IHJldDtcbkBAIC05NjAsNyArOTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbi1cdFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcbkBAIC05ODEsMTAgKzk4NCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRcdGluZm8uc2l6ZSA9IHByaXZhdGUtXHUwMDNlc2l6ZTtcbiBcdFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IDA7XG4rXHRcdHJldCA9IDA7XG4gXG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbkBAIC05OTQsNiArOTk0LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIFx0XHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xuICNlbmRpZlxuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTAwNCw2ICsxMDA2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMDEzLDYgKzEwMTYsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXDAnO1xuIFxuKyByZXRyeTpcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbkBAIC0xMDI3LDYgKzEwMzEsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTU2MSwxMiArMTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsXG4gXG4gXHRwb3MgPSB1c2VycHRyO1xuIFx0c2l6ZSA9IHRvdGFsX3NpemU7XG4rXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBwcml2YXRlLVx1MDAzZWVudHJpZXMsIHRvdGFsX3NpemUpIHtcbiBcdFx0cmV0ID0gY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlcihpdGVyLCBcdTAwMjZwb3MsXG4gXHRcdFx0XHRcdFx0XHUwMDI2c2l6ZSwgY291bnRlcnMsIGkrKyk7XG4gXHRcdGlmIChyZXQgIT0gMClcbiBcdFx0XHRicmVhaztcbiBcdH1cbitcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTU3OSw2ICsxNTkzLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNTkxLDYgKzE2MDYsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFwwJztcbiBcbisgcmV0cnk6XG4gXHR4dF9jb21wYXRfbG9jayhBRl9JTkVUKTtcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuQEAgLTE2MTAsNiArMTYyNiwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4gXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcbmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG5AQCAtMjUsNiArMjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1bWFzay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcdTAwM2VcbkBAIC04NDUsNiArODQ2LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cbiBcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cbiBcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFx1MDAzYyB0b3RhbF9zaXplOyBvZmYgKz0gZS1cdTAwM2VuZXh0X29mZnNldCwgbnVtKyspe1xuQEAgLTg4Miw2ICs4ODQsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbitcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk2NCw2ICs5NjcsNyBAQCBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLFxuIFxuIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4ge1xuK1x0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xuIFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIFx0aW50IHJldDtcbkBAIC05ODEsNyArOTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiBcdFx0c3RydWN0IHh0X3RhYmxlX2luZm8gdG1wO1xuQEAgLTEwMDIsMTAgKzEwMDUsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0XHRpbmZvLnNpemUgPSBwcml2YXRlLVx1MDAzZXNpemU7XG4gXHRcdHN0cmNweShpbmZvLm5hbWUsIG5hbWUpO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IDA7XG4rXHRcdHJldCA9IDA7XG4gXG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbkBAIC0xMDE1LDYgKzEwMTUsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4gXHRcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpO1xuICNlbmRpZlxuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTAyNSw2ICsxMDI3LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuK1x0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XG4gXG4gXHRpZiAoKmxlbiBcdTAwM2Mgc2l6ZW9mKGdldCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEwMzUsNiArMTAzOCw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuIFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbkBAIC0xMDQ5LDYgKzEwNTMsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE1NzUsMTIgKzE1ODcsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxuIFxuIFx0cG9zID0gdXNlcnB0cjtcbiBcdHNpemUgPSB0b3RhbF9zaXplO1xuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XG4gXHRcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXHUwMDI2cG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpKyspO1xuIFx0XHRpZiAocmV0ICE9IDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1OTMsNiArMTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNjA1LDYgKzE2MjAsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVDYpO1xuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuQEAgLTE2MjQsNiArMTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuIFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7XG4rXHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4rXHRcdGZhdWx0ZWQgPSB0cnVlO1xuK1x0XHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXHUwMDNlZW50cnl0YWJsZSxcbitcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjEzLjA3Mzk0ODkyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDY4MDY3MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGl0IHRvdWNoZXMgYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYCwgYWxsIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHJlYWxtLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IGEgY29uc2lzdGVudCBjaGFuZ2UgYWNyb3NzIElQdjQsIElQdjYgYW5kIEFSUCB0YWJsZSBoYW5kbGluZyB3aGljaCBpcyBhbiBleHBlY3RlZCByZWZhY3Rvci5cblxuUGVlbGluZyBiYWNrIHRoZSBsYXllcnMsIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHNvbWUgY29tbW9uIHBhdHRlcm5zIGVtZXJnaW5nLiBJbiBhbGwgdGhyZWUgZmlsZXMsIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgbm93IGluY2x1ZGVzIGBwYWdlZmF1bHRfZGlzYWJsZSgpYCBhbmQgYHBhZ2VmYXVsdF9lbmFibGUoKWAgY2FsbHMuIEFsc28sIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uIGhhcyBoYWQgdGhlIGBjb3B5X3RvX3VzZXJgIGNhbGwgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYHh0X3RhYmxlX3VubG9ja2Agc2VjdGlvbi4gQW5kIGEgcmV0cnkgbG9vcCB3aXRoIGBmYXVsdF9pbl93cml0ZWFibGUoKWAgaGFzIGJlZW4gYWRkZWQgdG8gYGdldF9lbnRyaWVzYC4gVGhlcmUgYXJlIHNpbWlsYXIgY2hhbmdlcyBmb3IgdGhlIGNvbXBhdCBmdW5jdGlvbnMgaW4gaXBfdGFibGVzIGFuZCBpcDZfdGFibGVzLiBUaGlzIHN0cm9uZ2x5IGluZGljYXRlcyBzb21lIGNvbmNlcm4gYXJvdW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cyBkdXJpbmcgdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHJlYWRpbmcgbmV0ZmlsdGVyIHRhYmxlIGVudHJpZXMuXG5cblNvLCB3aHkgYXJlIHRoZXNlIGNoYW5nZXMgaGVyZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgcmVsYXRlZCB0byBzb21lIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBkYXRhIHRyYW5zZmVyLCBzbyBsZXQncyBjaGVjayB3aGF0IGxvY2tzIGFyZSBiZWluZyBoZWxkIHdoaWxlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfZW50cmllc2AsIGFuZCB0aGVpciBjb21wYXRyaW90cyBhcmUgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gR3JlcHBpbmcgb3IgcmVhZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaXBfdGFibGVzLmNgIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHNwZWNpZmljYWxseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBsb2Nrcy4gTG9va3MgbGlrZSB3ZSdyZSB0cnlpbmcgdG8gbWFrZSBkYXRhIHRyYW5zZmVycyBtb3JlIHJvYnVzdCB0byBoYW5kbGUgcGFnZSBmYXVsdHMsIGFuZCBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGJ5IGNhcmVmdWxseSBtYW5hZ2luZyBsb2NraW5nLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBpbXByb3ZlbWVudCBpbiB0ZXJtcyBvZiByb2J1c3RuZXNzLCBidXQgdGhlIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGFjcm9zcyB0aGUgZmlsZXMgbWVhbnMgY2FyZWZ1bCByZXZpZXdpbmcgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MjYuMTQyMDE4OTgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0XFx0dW5zaWduZWQgaW50IG9mZiwgbnVtO1xcbiA4MTY6XFx0XFx0Y29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZTtcXG4gODE3OlxcdFxcdHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7XFxuIDgxODpcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLVxcdTAwM2Vwcml2YXRlO1xcbiA4MTk6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgyMDpcXHRcXHRjb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5O1xcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHRjb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTtcXG4gODIzOlxcdFxcdGlmIChJU19FUlIoY291bnRlcnMpKVxcbiA4MjQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xcbiA4MjU6XFx0XFxuIDgyNjpcXHRcXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cXHUwMDNlZW50cmllcztcXG4gODI3OlxcdFxcbiA4Mjg6XFx0XFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gODI5OlxcdFxcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cXG4gODMwOlxcdFxcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cXG4gODMxOlxcdFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuIDgzMjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gODMzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbTtcXG4gODM0OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQ7XFxuIDgzNTpcXHRcXG4gODM2OlxcdFxcdFxcdGUgPSBsb2NfY3B1X2VudHJ5ICsgb2ZmO1xcbiA4Mzc6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmLCBlLFxcbiA4Mzg6XFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSkgfHxcXG4gODM5OlxcdFxcdFxcdCAgICBjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZlxcbiA4NDA6XFx0XFx0XFx0XFx0XFx0ICsgb2Zmc2V0b2Yoc3RydWN0IGlwdF9lbnRyeSwgY291bnRlcnMpLFxcbiA4NDE6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjb3VudGVyc1tudW1dLFxcbiA4NDI6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihjb3VudGVyc1tudW1dKSkpIHtcXG4gODQzOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDg0NDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDg0NTpcXHRcXHRcXHR9XFxuIDg0NjpcXHRcXG4gODQ3OlxcdFxcdFxcdGZvciAoaSA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KTtcXG4gODQ4OlxcdFxcdFxcdCAgICAgaSBcXHUwMDNjIGUtXFx1MDAzZXRhcmdldF9vZmZzZXQ7XFxuIDg0OTpcXHRcXHRcXHQgICAgIGkgKz0gbS1cXHUwMDNldS5tYXRjaF9zaXplKSB7XFxuIDg1MDpcXHRcXHRcXHRcXHRtID0gKHZvaWQgKillICsgaTtcXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0XFx0XFx0aWYgKHh0X21hdGNoX3RvX3VzZXIobSwgdXNlcnB0ciArIG9mZiArIGkpKSB7XFxuIDg1MzpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2NvdW50ZXJzO1xcbiA4NTU6XFx0XFx0XFx0XFx0fVxcbiA4NTY6XFx0XFx0XFx0fVxcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRcXHR0ID0gaXB0X2dldF90YXJnZXRfYyhlKTtcXG4gODU5OlxcdFxcdFxcdGlmICh4dF90YXJnZXRfdG9fdXNlcih0LCB1c2VycHRyICsgb2ZmICsgZS1cXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcXG4gODYwOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDg2MTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDg2MjpcXHRcXHRcXHR9XFxuIDg2MzpcXHRcXHR9XFxuIDg2NDpcXHRcXG4gODY1OlxcdCBmcmVlX2NvdW50ZXJzOlxcbiA4NjY6XFx0XFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbiA4Njc6XFx0XFx0dmZyZWUoY291bnRlcnMpO1xcbiA4Njg6XFx0XFx0cmV0dXJuIHJldDtcXG4gODY5OlxcdH1cXG4gODcwOlxcdFxcbiA4NzE6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4gODcyOlxcdHN0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuIDg3MzpcXHR7XFxuIDg3NDpcXHRcXHRpbnQgdiA9ICooY29tcGF0X2ludF90ICopc3JjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOToyNi4xNDIxMzg0MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI5NDY0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBgZ2V0X2VudHJpZXNgKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG5vdyBvbiB0aGUgYGdldF9lbnRyaWVzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIGNvbnRleHQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmUgaXMgaXQgb3BlcmF0aW5nIG9uPyBJcyB0aGlzIGEgc3RhbmRhcmQgcmV0cmlldmFsIG1ldGhvZCwgYSBzcGVjaWFsaXplZCBxdWVyeSwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhZ2luYXRpb24sIGZpbHRlcmluZyBieSBzcGVjaWZpYyBjcml0ZXJpYSAoZGF0ZSwgYXV0aG9yLCBrZXl3b3JkLCBldGMuKSwgc29ydGluZyBvcHRpb25zPyBXaGF0J3MgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIOKAkyBhIGxpc3QsIGEgZGljdGlvbmFyeSwgcGVyaGFwcyBhbiBpdGVyYXRvciBmb3IgaGFuZGxpbmcgbGFyZ2UgZGF0YXNldHMgZWZmaWNpZW50bHk/IEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgaXRzIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24sIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIERvZXMgaXQgaGl0IGEgZGF0YWJhc2U/IElzIGl0IGNhY2hlZD8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgZm9yIGJvdHRsZW5lY2tzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSB0byBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MzAuNTcxNjA1MDQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdH1cXG4xMDAxOlxcdFxcbjEwMDI6XFx0c3RhdGljIGludFxcbjEwMDM6XFx0Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4xMDA0OlxcdFxcdCAgICBjb25zdCBpbnQgKmxlbilcXG4xMDA1OlxcdHtcXG4xMDA2OlxcdFxcdGludCByZXQ7XFxuMTAwNzpcXHRcXHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcXG4xMDA4OlxcdFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4xMDA5OlxcdFxcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xcbjEwMTA6XFx0XFxuMTAxMTpcXHRcXHRpZiAoKmxlbiBcXHUwMDNjIHNpemVvZihnZXQpKVxcbjEwMTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTAxMzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmdldCwgdXB0ciwgc2l6ZW9mKGdldCkpICE9IDApXFxuMTAxNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xMDE1OlxcdFxcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzKSArIGdldC5zaXplKVxcbjEwMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTAxNzpcXHRcXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHQgcmV0cnk6XFxuMTAyMDpcXHRcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbjEwMjE6XFx0XFx0aWYgKCFJU19FUlIodCkpIHtcXG4xMDIyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4xMDIzOlxcdFxcdFxcdGlmIChnZXQuc2l6ZSA9PSBwcml2YXRlLVxcdTAwM2VzaXplKVxcbjEwMjQ6XFx0XFx0XFx0XFx0cmV0ID0gY29weV9lbnRyaWVzX3RvX3VzZXIocHJpdmF0ZS1cXHUwMDNlc2l6ZSxcXG4xMDI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHQsIHVwdHItXFx1MDAzZWVudHJ5dGFibGUpO1xcbjEwMjY6XFx0XFx0XFx0ZWxzZVxcbjEwMjc6XFx0XFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4xMDI4OlxcdFxcbjEwMjk6XFx0XFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuMTAzMDpcXHRcXHRcXHR4dF90YWJsZV91bmxvY2sodCk7XFxuMTAzMTpcXHRcXHR9IGVsc2VcXG4xMDMyOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdGlmIChyZXQgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAhZmF1bHRlZCkge1xcbjEwMzU6XFx0XFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuMTAzNjpcXHRcXHRcXHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXFx1MDAzZWVudHJ5dGFibGUsXFxuMTAzNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ2V0LnNpemUpKVxcbjEwMzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTAzOTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjEwNDA6XFx0XFx0fVxcbjEwNDE6XFx0XFxuMTA0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwNDM6XFx0fVxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRzdGF0aWMgaW50XFxuMTA0NjpcXHRfX2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsXFxuMTA0NzpcXHRcXHQgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzLFxcbjEwNDg6XFx0XFx0ICAgICB2b2lkIF9fdXNlciAqY291bnRlcnNfcHRyKVxcbjEwNDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTozMC41NzE3NDE1NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE4NDU4MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGVidWdnaW5nIHRoZSBgeHRfdGFibGVfbG9ja2AgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHh0X3RhYmxlX2xvY2tgLCBhbmQgSSdtIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMuIFRoZSBmYWN0IHRoYXQgaXQncyBkaXNhYmxpbmcgcGFnZSBmYXVsdHMgaXMgYSByZWQgZmxhZywgbWVhbmluZyB0aGF0IHRoZSBjb2RlICpwcm9iYWJseSogaG9sZHMgc29tZSBraW5kIG9mIGNyaXRpY2FsIHNlY3Rpb24uIExpa2VseSBhIHNwaW5sb2NrIG9yIG11dGV4LCBtYXliZSBldmVuIGRpc2FibGluZyBwcmVlbXB0aW9uIG9yIGJvdHRvbS1oYWxmIHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0IG5lZWRzIHRvIHByZXZlbnQgcGFnZSBmYXVsdHMgaW4gdGhhdCBzcGVjaWZpYyBsb2NhdGlvbiwgYW5kIHRoZSB0eXBlIG9mIGxvY2sgZ2l2ZXMgYSBjbHVlIGFzIHRvIHdoZXJlIHRvIGxvb2suIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suXG5cblRvIHZlcmlmeSBteSBodW5jaCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGB4dF9maW5kX3RhYmxlX2xvY2tgIGlzIHVzZWQgYW5kIGRlZmluZWQuIEknbGwgZWl0aGVyIGdyZXAgdGhlIGNvZGUgZm9yIGluc3RhbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUgb3IgbG9vayBhdCBpdHMgYWN0dWFsIGRlZmluaXRpb24gdG8gY29uZmlybSB3aGF0IGtpbmQgb2YgbG9ja2luZyBpdCdzIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgeHRfdGFibGVfbG9ja2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDE0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTozMi43OTAyMDIyNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDM2MzU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4dF9maW5kX3RhYmxlX2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD0zMzg9c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg6MzM5OnN0cnVjdCB4dF90YWJsZSAqeHRfZmluZF90YWJsZV9sb2NrKHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaC0zNDAtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUpO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz03Njg9c3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtNzg1LSByZXRyeTpcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jOjc4NjpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTc4Ny1cXHRpZiAoIUlTX0VSUih0KSkge1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz05MzU9c3RhdGljIGludCBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NDktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYzo5NTA6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GUFJPVE9fQVJQLCB0bXAubmFtZSk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NTEtXFx0aWYgKElTX0VSUih0KSkge1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTEwMDM9Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xMDE5LSByZXRyeTpcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTAyMDpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xMDIxLVxcdGlmICghSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTE2Nj1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTExODAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjExODE6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIHRtcC5uYW1lKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTE4Mi1cXHRpZiAoSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTU5MD1jb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTYxMC1cXHR4dF9jb21wYXRfbG9jayhBRl9JTkVUKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTYxMTpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNjEyLVxcdGlmICghSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTEwMjQ9Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDEtIHJldHJ5Olxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTA0MjpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDMtXFx0aWYgKCFJU19FUlIodCkpIHtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTE4OD1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xMjAxLVxcdFxcdHJldHVybiBQVFJfRVJSKHBhZGRjKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjEyMDI6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCB0bXAubmFtZSk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xMjAzLVxcdGlmIChJU19FUlIodCkpIHtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTYwND1jb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjI0LVxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE2MjU6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjI2LVxcdGlmICghSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTMyNT1FWFBPUlRfU1lNQk9MKHh0X2ZpbmRfdGFibGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzMjctLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCBcXHUwMDI2IHJlZi4gIFJldHVybnMgRVJSX1BUUiBvbiBlcnJvci4gKi9cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTMyODpzdHJ1Y3QgeHRfdGFibGUgKnh0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzI5LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzItfVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzczOkVYUE9SVF9TWU1CT0xfR1BMKHh0X2ZpbmRfdGFibGVfbG9jayk7XFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzQtXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTEzNzU9c3RydWN0IHh0X3RhYmxlICp4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzcte1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzc4OlxcdHN0cnVjdCB4dF90YWJsZSAqdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIGFmLCBuYW1lKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTM3OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzg0LVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjEzODU6XFx0XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIGFmLCBuYW1lKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTM4Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjM0LjkyMDU3MDk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5MTY1Mzk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOZXRmaWx0ZXIgVGFibGVzIGFyZSBQcmltZSBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBgYXJwX3RhYmxlc2AsIGBpcF90YWJsZXNgLCBhbmQgYGlwNl90YWJsZXNgIOKAkyB0aG9zZSBhcmUgdGhlIHN0YW5kYXJkIG5ldGZpbHRlciB0YWJsZXMgaW4gdGhlIExpbnV4IGtlcm5lbC4gQXJlIHRoZXkgYWNjZXNzaWJsZT8gQWJzb2x1dGVseSEgVGhleSdyZSBpbnZva2VkIHRocm91Z2ggYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgb24gc3RhbmRhcmQgc29ja2V0cyBsaWtlIGBBRl9JTkVUYCwgYEFGX0lORVQ2YCwgb3IgYEFGX0FSUGAsIG9yIGV2ZW4gYEFGX05FVExJTktgLiBJJ20gc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IGNhbGxzIGxpa2UgYElQX0dFVF9FTlRSSUVTYCwgYElQVF9TT19HRVRfRU5UUklFU2AsIGBJUFRfU09fR0VUX0lORk9gLCB0aGluZ3MgbGlrZSB0aGF0LCBhY2Nlc3NlZCB0aHJvdWdoIGBnZXRzb2Nrb3B0KGZkLCBTT0xfSVAsIC4uLilgIG9yIGBnZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgLi4uKWAg4oCTIGJhc2ljIG5ldGZpbHRlciBzb2NrZXQgaW50ZXJmYWNlcywgY29tcGxldGVseSBzdGFuZGFyZCBhbmQgdG90YWxseSByZWFjaGFibGUgYnkgc3l6a2FsbGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGZ1enppbmcgY3JpdGVyaWEuIEZpcnN0LCBpcyB0aGVyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZT8gWWVzLCBmb3Igc3VyZS4gV2UncmUgbG9va2luZyBhdCBgbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jYCwgYG5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNgLCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNgLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIGxvY2sgYW5kIHBhZ2VmYXVsdCBoYW5kbGluZywgcmlnaHQ/IEl0J3MgYWJvdXQgaG93IHRoZSBjb2RlIGhhbmRsZXMgYHBhZ2VmYXVsdF9kaXNhYmxlYC9gcGFnZWZhdWx0X2VuYWJsZWAgaW4gYGNvcHlfZW50cmllc190b191c2VyYCwgdGhlIHJldHJ5IGxvb3Agd2l0aCBgZmF1bHRfaW5fd3JpdGVhYmxlYCBpbiBgZ2V0X2VudHJpZXNgLCBhbmQgbW92aW5nIGBjb3B5X3RvX3VzZXJgIG91dHNpZGUgYHh0X3RhYmxlX3VubG9ja2AgaW4gYGdldF9pbmZvYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBob3cgdXNlciBtZW1vcnkgY29weWluZyBpcyBoYW5kbGVkIHVuZGVyIG5ldGZpbHRlciBsb2NrcyDigJMgdHJ5aW5nIHRvIGF2b2lkIHNsZWVwcyBvciBmYXVsdHMgd2hpbGUgaG9sZGluZyBtdXRleGVzIG9yIHNwaW5sb2NrcywgYW5kIGFsc28gYXZvaWQgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuXG5cblRoaXMgc2NyZWFtcyBcIldvcnRoRnV6emluZyA9IHRydWVcIi5cblxuTm93LCB0aW1lIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYG5ldC9pcHY0L25ldGZpbHRlci9gIGFuZCBgbmV0L2lwdjYvbmV0ZmlsdGVyL2AgdG8gbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgcmlnaHQgc2V0dGluZ3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MzguOTEyMjI4MDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTIxODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9ORl9JUFRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTk9Y29uZmlnIE5GX0RFRlJBR19JUFY0XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMy0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTQ6Y29uZmlnIElQX05GX0lQVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xMjg9ZW5kaWYgIyBORl9OQVRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTMwOmNvbmZpZyBJUF9ORl9JUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiSVAgdGFibGVzIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBmaWx0ZXJpbmcvbWFzcS9OQVQpXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTQxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE0MjppZiBJUF9ORl9JUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE0My1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTE4ND1jb25maWcgSVBfTkZfRklMVEVSXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTg1LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgZmlsdGVyaW5nXFxcIlxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE4NjpcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTg3OlxcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTIyMT1jb25maWcgSVBfTkZfTkFUXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjMtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjQ6XFx0ZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0yNjU9Y29uZmlnIElQX05GX01BTkdMRVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTI2Ni1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IG1hbmdsaW5nXFxcIlxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjI2NzpcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MjY4OlxcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjY5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMwMT1jb25maWcgSVBfTkZfUkFXXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzAyLVxcdHRyaXN0YXRlICAncmF3IHRhYmxlIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBOT1RSQUNLL1RSQUNFKSdcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMDM6XFx0ZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDQtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzEzPWNvbmZpZyBJUF9ORl9TRUNVUklUWVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzE2LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzE3OlxcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzE4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMjQ6ZW5kaWYgIyBJUF9ORl9JUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyNS1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfTkZUX0RVUF9JUFY0KSArPSBuZnRfZHVwX2lwdjQub1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTI3LSMgZ2VuZXJpYyBJUCB0YWJsZXNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX05GX0lQVEFCTEVTX0xFR0FDWSkgKz0gaXBfdGFibGVzLm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjM5LjAwMTQ1MjA3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU4ODc1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipNYWtlZmlsZSBFeHBsb3JhdGlvbiBmb3IgSVB2NCBhbmQgSVB2NiBOZXRmaWx0ZXIgTW9kdWxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZXNlIE5ldGZpbHRlciBtb2R1bGVzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYE1ha2VmaWxlYHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIG9uZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9gIGRpcmVjdG9yaWVzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbW9kdWxlcyBmb3IgSVB2NCBhbmQgSVB2NiBmaWx0ZXJpbmcgYXJlIGRlZmluZWQuIEJ5IGV4YW1pbmluZyB0aGUgTWFrZWZpbGVzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYnVpbGQgZmxhZ3MsIG1vZHVsZSB0YXJnZXRzLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgbGlua2VkIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhlc2UgY3J1Y2lhbCBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIGJ1aWx0LiBLbm93aW5nIHRoZSBNYWtlZmlsZSB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgSSBjYW4gc3RhcnQgbWFraW5nIGNoYW5nZXMgdG8gbXkgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0MS42NjAzMjk5MjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGZpbHRlciBtb2R1bGVzIG9uIHRvcCBvZiBJUHY0LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIGRlZnJhZ1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX05GX0RFRlJBR19JUFY0KSArPSBuZl9kZWZyYWdfaXB2NC5vXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNCkgKz0gbmZfc29ja2V0X2lwdjQub1xcbiAgMTA6XFx0b2JqLSQoQ09ORklHX05GX1RQUk9YWV9JUFY0KSArPSBuZl90cHJveHlfaXB2NC5vXFxuICAxMTpcXHRcXG4gIDEyOlxcdCMgcmVqZWN0XFxuICAxMzpcXHRvYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjQpICs9IG5mX3JlamVjdF9pcHY0Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0IyBOQVQgaGVscGVycyAobmZfY29ubnRyYWNrKVxcbiAgMTY6XFx0b2JqLSQoQ09ORklHX05GX05BVF9IMzIzKSArPSBuZl9uYXRfaDMyMy5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfTkZfTkFUX1BQVFApICs9IG5mX25hdF9wcHRwLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0bmZfbmF0X3NubXBfYmFzaWMteSA6PSBuZl9uYXRfc25tcF9iYXNpYy5hc24xLm8gbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vXFxuICAyMDpcXHQkKG9iaikvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vOiAkKG9iaikvbmZfbmF0X3NubXBfYmFzaWMuYXNuMS5oXFxuICAyMTpcXHRvYmotJChDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMpICs9IG5mX25hdF9zbm1wX2Jhc2ljLm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0b2JqLSQoQ09ORklHX05GVF9SRUpFQ1RfSVBWNCkgKz0gbmZ0X3JlamVjdF9pcHY0Lm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORlRfRklCX0lQVjQpICs9IG5mdF9maWJfaXB2NC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfTkZUX0RVUF9JUFY0KSArPSBuZnRfZHVwX2lwdjQub1xcbiAgMjY6XFx0XFxuICAyNzpcXHQjIGdlbmVyaWMgSVAgdGFibGVzXFxuICAyODpcXHRvYmotJChDT05GSUdfSVBfTkZfSVBUQUJMRVNfTEVHQUNZKSArPSBpcF90YWJsZXMub1xcbiAgMjk6XFx0XFxuICAzMDpcXHQjIHRoZSB0aHJlZSBpbnN0YW5jZXMgb2YgaXBfdGFibGVzXFxuICAzMTpcXHRvYmotJChDT05GSUdfSVBfTkZfRklMVEVSKSArPSBpcHRhYmxlX2ZpbHRlci5vXFxuICAzMjpcXHRvYmotJChDT05GSUdfSVBfTkZfTUFOR0xFKSArPSBpcHRhYmxlX21hbmdsZS5vXFxuICAzMzpcXHRvYmotJChDT05GSUdfSVBfTkZfTkFUKSArPSBpcHRhYmxlX25hdC5vXFxuICAzNDpcXHRvYmotJChDT05GSUdfSVBfTkZfUkFXKSArPSBpcHRhYmxlX3Jhdy5vXFxuICAzNTpcXHRvYmotJChDT05GSUdfSVBfTkZfU0VDVVJJVFkpICs9IGlwdGFibGVfc2VjdXJpdHkub1xcbiAgMzY6XFx0XFxuICAzNzpcXHQjIG1hdGNoZXNcXG4gIDM4OlxcdG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BSCkgKz0gaXB0X2FoLm9cXG4gIDM5OlxcdG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUikgKz0gaXB0X3JwZmlsdGVyLm9cXG4gIDQwOlxcdFxcbiAgNDE6XFx0IyB0YXJnZXRzXFxuICA0MjpcXHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX0VDTikgKz0gaXB0X0VDTi5vXFxuICA0MzpcXHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCkgKz0gaXB0X1JFSkVDVC5vXFxuICA0NDpcXHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZKSArPSBpcHRfU1lOUFJPWFkub1xcbiAgNDU6XFx0XFxuICA0NjpcXHQjIGdlbmVyaWMgQVJQIHRhYmxlc1xcbiAgNDc6XFx0b2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgKz0gYXJwX3RhYmxlcy5vXFxuICA0ODpcXHRvYmotJChDT05GSUdfSVBfTkZfQVJQX01BTkdMRSkgKz0gYXJwdF9tYW5nbGUub1xcbiAgNDk6XFx0XFxuICA1MDpcXHQjIGp1c3QgZmlsdGVyaW5nIGluc3RhbmNlIG9mIEFSUCB0YWJsZXMgZm9yIG5vd1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0MS42NjAzOTQ1ODlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NTUyODUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgdGhlIE5ldGZpbHRlciBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJ1aWxkIHByb2Nlc3MsIGFuZCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkndmUgYWxyZWFkeSBsb29rZWQgYXQgWCwgWSwgYW5kIFosIGJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiBhbmQgbmV0ZmlsdGVyLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZWAgZmlsZS4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGltcGFjdGluZyB0aGUgdGFyZ2V0IEknbSB0cm91Ymxlc2hvb3RpbmcuIEJldHRlciB0byBiZSBjb21wbGV0ZSBhbmQgZWxpbWluYXRlIHRoaXMgc2VjdGlvbiBhcyBhbiBpc3N1ZSwgdGhhbiB0byBtaXNzIGEgcG9zc2libGUgcHJvYmxlbS4gSXQncyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMsIGFuZCBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGFueXRoaW5nLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0My42NDU5MjU1MjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGZpbHRlciBtb2R1bGVzIG9uIHRvcCBvZiBJUHY2LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIExpbmsgb3JkZXIgbWF0dGVycyBoZXJlLlxcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19MRUdBQ1kpICs9IGlwNl90YWJsZXMub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9GSUxURVIpICs9IGlwNnRhYmxlX2ZpbHRlci5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfSVA2X05GX01BTkdMRSkgKz0gaXA2dGFibGVfbWFuZ2xlLm9cXG4gIDEwOlxcdG9iai0kKENPTkZJR19JUDZfTkZfUkFXKSArPSBpcDZ0YWJsZV9yYXcub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9TRUNVUklUWSkgKz0gaXA2dGFibGVfc2VjdXJpdHkub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9OQVQpICs9IGlwNnRhYmxlX25hdC5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdCMgZGVmcmFnXFxuICAxNTpcXHRuZl9kZWZyYWdfaXB2Ni15IDo9IG5mX2RlZnJhZ19pcHY2X2hvb2tzLm8gbmZfY29ubnRyYWNrX3JlYXNtLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19ORl9ERUZSQUdfSVBWNikgKz0gbmZfZGVmcmFnX2lwdjYub1xcbiAgMTc6XFx0XFxuICAxODpcXHRvYmotJChDT05GSUdfTkZfU09DS0VUX0lQVjYpICs9IG5mX3NvY2tldF9pcHY2Lm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORl9UUFJPWFlfSVBWNikgKz0gbmZfdHByb3h5X2lwdjYub1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjIHJlamVjdFxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX05GX1JFSkVDVF9JUFY2KSArPSBuZl9yZWplY3RfaXB2Ni5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbiAgMjU6XFx0XFxuICAyNjpcXHQjIG5mX3RhYmxlc1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX05GVF9SRUpFQ1RfSVBWNikgKz0gbmZ0X3JlamVjdF9pcHY2Lm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19ORlRfRFVQX0lQVjYpICs9IG5mdF9kdXBfaXB2Ni5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfTkZUX0ZJQl9JUFY2KSArPSBuZnRfZmliX2lwdjYub1xcbiAgMzA6XFx0XFxuICAzMTpcXHQjIG1hdGNoZXNcXG4gIDMyOlxcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfQUgpICs9IGlwNnRfYWgub1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCkgKz0gaXA2dF9ldWk2NC5vXFxuICAzNDpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX0ZSQUcpICs9IGlwNnRfZnJhZy5vXFxuICAzNTpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIpICs9IGlwNnRfaXB2NmhlYWRlci5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgub1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRFUikgKz0gaXA2dF9ycGZpbHRlci5vXFxuICAzOTpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX1JUKSArPSBpcDZ0X3J0Lm9cXG4gIDQwOlxcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSArPSBpcDZ0X3NyaC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjQzLjY0NjAwMzE4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY1Mzg5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgSVB2NiBGaXJld2FsbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxlZ2FjeSBJUHY2IGlwdGFibGVzIHN1cHBvcnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgSVB2NiBuZXRmaWx0ZXIgZnJhbWV3b3JrIHJlc2lkZSwgYW5kIGBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZYCBzaG91bGQgYmUgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IG9wdGlvbiBpcyBzdGlsbCBwcmVzZW50IGFuZCwgaWYgc28sIHdoYXQgaXRzIGN1cnJlbnQgc3RhdGUgaXMuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBhbnkgYXNzb2NpYXRlZCBjb2RlIGNoYW5nZXMgb3IgcG90ZW50aWFsIGRlcHJlY2F0aW9uIHBhdGhzLiBJJ20gYXNzdW1pbmcgdGhhdCBzaW5jZSBpdCdzIGEgbGVnYWN5IGNvbXBvbmVudCwgdGhlcmUgbWlnaHQgYmUgc29tZSBjaHVybiBhcm91bmQgaXRzIHVzZS4gSXQncyB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjQ2LjcxMTM5NTEzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MTU5NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQNl9ORl9JUFRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTY9bWVudSBcXFwiSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05LSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMDpjb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NzI9Y29uZmlnIE5GX0xPR19JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpjb25maWcgSVA2X05GX0lQVEFCTEVTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctODEtXFx0dHJpc3RhdGUgXFxcIklQNiB0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05Mi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo5MzppZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05NC1cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTE5Nz1jb25maWcgSVA2X05GX0ZJTFRFUlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE5OC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IGZpbHRlcmluZ1xcXCJcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxOTk6XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uIHx8IElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMDA6XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjAxLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yMzQ9Y29uZmlnIElQNl9ORl9NQU5HTEVcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yMzUtXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBtYW5nbGluZ1xcXCJcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMzY6XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uIHx8IElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMzc6XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTI0NT1jb25maWcgSVA2X05GX1JBV1xcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSAgJ3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJ1xcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjI0NzpcXHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjU3PWNvbmZpZyBJUDZfTkZfU0VDVVJJVFlcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI2MC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNjItXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjY4PWNvbmZpZyBJUDZfTkZfTkFUXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNzEtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNzI6XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcdHNlbGVjdCBORl9OQVRcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTI5MD1jb25maWcgSVA2X05GX1RBUkdFVF9OUFRcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI5OC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyOTk6ZW5kaWYgIyBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMDAtZW5kbWVudVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTYtIyBMaW5rIG9yZGVyIG1hdHRlcnMgaGVyZS5cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSVA2X05GX0lQVEFCTEVTX0xFR0FDWSkgKz0gaXA2X3RhYmxlcy5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX0lQNl9ORl9GSUxURVIpICs9IGlwNnRhYmxlX2ZpbHRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjQ2Ljk5OTU2MzY4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI3ODI1ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYElQX05GX0FSUFRBQkxFU2AqKlxuXG5BbHJpZ2h0LCBJJ20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBhbmFseXNpcywgYnV0IEkgY2FuJ3QgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLiBUaGUgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGhhcyBsZWQgbWUgdG8gYSBmZXcgaW50ZXJlc3RpbmcgcG9pbnRzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIGNyaXRpY2FsLiBBIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBJICpoYXZlKiB0byBjb25zaWRlciB0aGUgYElQX05GX0FSUFRBQkxFU2AgbW9kdWxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjaywgZXNwZWNpYWxseSByZWxldmFudCBpbiBzY2VuYXJpb3MgaW52b2x2aW5nIEFSUCBhbmQgSVAgYWRkcmVzcyBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIG5ldGZpbHRlci4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCB3aGV0aGVyIGl0IGlzIGEgcG9pbnQgb2YgYXR0YWNrIGluIHRoZSBzeXN0ZW0uIEdpdmVuIGl0cyBwb3RlbnRpYWwgZm9yIGFsdGVyaW5nIEFSUCBiZWhhdmlvciwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IHdoYXRldmVyIGlzIG9jY3VycmluZyB3aXRoaW4gdGhlIHN5c3RlbSBpc24ndCByZWxhdGVkIHRvIGltcHJvcGVyIGltcGxlbWVudGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIG5ldGZpbHRlciBtb2R1bGUuIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGl0cyB1c2UgYW5kIHF1aWNrbHkgYXNzZXNzIGlmIHRoYXQgbWF5IGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGlzc3VlIEknbSBjaGFzaW5nLiBJdCdzIGEgdml0YWwgcGllY2UgdG8gY29uZmlybSBJIGhhdmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0OS43MjczOTE2NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTc0MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX05GX0FSUFRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMyND1lbmRpZiAjIElQX05GX0lQVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjYtIyBBUlAgdGFibGVzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzI3OmNvbmZpZyBJUF9ORl9BUlBUQUJMRVNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBBUlBUQUJMRVMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM0Mz1jb25maWcgSVBfTkZfQVJQRklMVEVSXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJhcnB0YWJsZXMtbGVnYWN5IHBhY2tldCBmaWx0ZXJpbmcgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozNDU6XFx0c2VsZWN0IElQX05GX0FSUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0Ni1cXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9BUlBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM1Nz1jb25maWcgSVBfTkZfQVJQX01BTkdMRVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM1OC1cXHR0cmlzdGF0ZSBcXFwiQVJQIHBheWxvYWQgbWFuZ2xpbmdcXFwiXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU5OlxcdGRlcGVuZHMgb24gSVBfTkZfQVJQVEFCTEVTIHx8IE5GVF9DT01QQVRfQVJQXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzYwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZKSArPSBpcHRfU1lOUFJPWFkub1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ2LSMgZ2VuZXJpYyBBUlAgdGFibGVzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19JUF9ORl9BUlBUQUJMRVMpICs9IGFycF90YWJsZXMub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS00OC1vYmotJChDT05GSUdfSVBfTkZfQVJQX01BTkdMRSkgKz0gYXJwdF9tYW5nbGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0OS43NzkzNzMyNjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE1MDMzMDc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldGZpbHRlciBDb21wYXRpYmlsaXR5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgaW4gcGxhY2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIG9yIHNvbWUgb3RoZXIgY3J1Y2lhbCBjb25maWcgb3B0aW9uIG1pZ2h0IGJlIG1pc3NpbmcuIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nOiBgSVBfTkZfSVBUQUJMRVNfTEVHQUNZYCAob3IgYElQX05GX0lQVEFCTEVTYCksIGBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZYCAob3IgYElQNl9ORl9JUFRBQkxFU2ApLCBgSVBfTkZfQVJQVEFCTEVTYCwgYW5kLCBvZiBjb3Vyc2UsIGBORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIChvciBqdXN0IGBORVRGSUxURVJfWFRBQkxFU2ApLiBJdCdzIGVzc2VudGlhbCB3ZSBkb24ndCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgSVBfTkZfSVBUQUJMRVNgIGFuZCBgSVBfTkZfSVBUQUJMRVNfTEVHQUNZYCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGRldGFpbCB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo1Mi45Mjk3MDY0ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTA6XFx0XFx0dHJpc3RhdGVcXG4gIDExOlxcdFxcdGRlZmF1bHQgblxcbiAgMTI6XFx0XFxuICAxMzpcXHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxuICAxNDpcXHRjb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IElQIHRhYmxlcyBzdXBwb3J0XFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDE4OlxcdFxcdGRlZmF1bHRcXHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBpcHRhYmxlcyBpcyBhIGxlZ2FjeSBwYWNrZXQgY2xhc3NpZmllci5cXG4gIDIxOlxcdFxcdCAgVGhpcyBpcyBub3QgbmVlZGVkIGlmIHlvdSBhcmUgdXNpbmcgaXB0YWJsZXMgb3ZlciBuZnRhYmxlc1xcbiAgMjI6XFx0XFx0ICAoaXB0YWJsZXMtbmZ0KS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5GX1NPQ0tFVF9JUFY0XFxuICAyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc29ja2V0IGxvb2t1cCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc1xcbiAgMjg6XFx0XFx0ICBpcyByZXF1aXJlZCBieSB0aGUge2lwLG5mfXRhYmxlcyBzb2NrZXQgbWF0Y2guXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORl9UUFJPWFlfSVBWNFxcbiAgMzE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgdHByb3h5IHN1cHBvcnRcXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdGlmIE5GX1RBQkxFU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTkZfVEFCTEVTX0lQVjRcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIklQdjQgbmZfdGFibGVzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRpZiBORl9UQUJMRVNfSVBWNFxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XFxuICA0MzpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo1Mi45Mjk3Nzc2NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1MDI3NzI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSBpbml0aWFsIHRob3VnaHQsIGFzIEkgc2VlIGl0LCBpcyB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLiAgSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gIE15IGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBsZWdhY3kgY29tcG9uZW50IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSdtIGdvaW5nIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRoZSBLY29uZmlnIGZpbGUgdG8gcmV2ZWFsIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgYXMgYSBtb2R1bGUsIGFsb25nIHdpdGggYW55IGRlcGVuZGVuY2llcyBvciBoZWxwIHRleHQuICBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0dXMgb2YgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgaXMgY3J1Y2lhbCwgYmVjYXVzZSBpdCBhbG1vc3QgY2VydGFpbmx5IGltcGFjdHMgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2Ygb2xkZXIgaXB0YWJsZXMgZnVuY3Rpb25hbGl0aWVzLCBhbmQgbWF5IGJlIGEgZmFjdG9yIHdoZW4gZGVhbGluZyB3aXRoIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBzeXN0ZW1zIG9yIGFwcGxpY2F0aW9ucyB0aGF0IHJlbHkgb24gbGVnYWN5IGV4dGVuc2lvbnMuIFVsdGltYXRlbHksIHRoaXMgaXMgdGhlIGZvdW5kYXRpb25hbCBzdGVwIGJlZm9yZSBmdXJ0aGVyIGFuYWx5c2lzOyBJIG5lZWQgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdHVzIHRvIGRyaXZlIHRoZSBzdWJzZXF1ZW50IHF1ZXN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjU4LjA4MDA1Nzg2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4OTY5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XFxcIlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBCUklER0UgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00Ni1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xND1jb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBJUCB0YWJsZXMgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxODpcXHRkZWZhdWx0XFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xOS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMjc9Y29uZmlnIElQX05GX0FSUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IEFSUFRBQkxFUyBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMyOTpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMzMC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zNDM9Y29uZmlnIElQX05GX0FSUEZJTFRFUlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQ2LVxcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0FSUFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjM0NzpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0OC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0xMD1jb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUFY2IFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTEzLVxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNDpcXHRkZWZhdWx0XFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzM4PWNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0Nzpjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc0OC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTE0MTQ9RVhQT1JUX1NZTUJPTF9HUEwoeHRfdGVlX2VuYWJsZWQpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE1LVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNDE2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE0MTctREVGSU5FX1BFUl9DUFUoc2VxY291bnRfdCwgeHRfcmVjc2VxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0yMDk1PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3Byb3RvX2ZpbmkpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMDk2LVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoyMDk3OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIwOTgtLyoqXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MjE4ND1zdGF0aWMgaW50IF9faW5pdCB4dF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjE4OC1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjE4OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZKSkge1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMTkwLVxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjU4LjE0Nzk2NDE4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMDkyNzEwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBUYWJsZSBFbnRyeSBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGZpbHRlciB0YWJsZSBlbnRyaWVzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzIHByb2Nlc3MuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgZmlsZXMgcmVsYXRlZCB0byB0aGUgQVJQLCBJUHY0LCBhbmQgSVB2NiB0YWJsZXM6IGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuXG5cbkZpcnN0LCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgaW4gZWFjaCBmaWxlIHRoYXQgc2VlbSByZWxldmFudC4gSW4gYGFycF90YWJsZXMuY2AsIEkgc2VlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGFuZCBgZ2V0X2VudHJpZXNgLiBUaGVzZSBhcmUgYWxsIHN0YXRpYywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZWlyIGNhbGxlcnMgdG8gc2VlIGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQuIExvb2tzIGxpa2UgdGhlIGNhbGxlciBmb3IgYGdldF9pbmZvYCBhbmQgYGdldF9lbnRyaWVzYCBpcyBgZG9fYXJwdF9nZXRfY3RsYC4gR29vZCwgdGhhdCBuYXJyb3dzIGl0IGRvd24uXG5cbk5vdywgbG9va2luZyBhdCBgaXBfdGFibGVzLmNgLCBJJ3ZlIGdvdCBhIHNpbWlsYXIgc2V0OiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLiBBZGRpdGlvbmFsbHksIEkgc2VlIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2dldF9lbnRyaWVzYCwgbGlrZWx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdXNlcnNwYWNlIGludGVyZmFjZXMuIFRoZSBjYWxsZXJzIGhlcmUgYXJlIGBkb19pcHRfZ2V0X2N0bGAgYW5kIGBjb21wYXRfZG9faXB0X2dldF9jdGxgLlxuXG5GaW5hbGx5LCBgaXA2X3RhYmxlcy5jYCBtaXJyb3JzIHRoZSBJUHY0IHN0cnVjdHVyZSB3aXRoIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGBnZXRfZW50cmllc2AsIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgLCBhbmQgYGNvbXBhdF9nZXRfZW50cmllc2AuIFRoZWlyIGNhbGxlcnMgYXJlIGBkb19pcDZ0X2dldF9jdGxgIGFuZCBgY29tcGF0X2RvX2lwNnRfZ2V0X2N0bGAuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlc2UgYGRvXypfZ2V0X2N0bGAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgcmV0cmlldmFsIGFuZCBjb3B5aW5nIHByb2Nlc3MgaXMgbGlrZWx5IGluaXRpYXRlZC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlaXIgaW1wbGVtZW50YXRpb25zIGluIGVhY2ggcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNTAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MDIuMzU3MjM3OTg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk2MjU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19pcHRfZ2V0X2N0bHxkb19hcnB0X2dldF9jdGx8ZG9faXA2dF9nZXRfY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz05ODQ9c3RhdGljIGludCBkb19hcnB0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy0xMDA5LVxcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmM6MTAxMDpzdGF0aWMgaW50IGRvX2FycHRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTEwMTEte1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz0xMTMxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgYXJwdF9zb2Nrb3B0cyA9IHtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtMTEzNy1cXHQuZ2V0X29wdG1heFxcdD0gQVJQVF9TT19HRVRfTUFYKzEsXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYzoxMTM4OlxcdC5nZXRcXHRcXHQ9IGRvX2FycHRfZ2V0X2N0bCxcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTExMzktXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYz0xNjcxPXN0YXRpYyBpbnRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTY3Mjpkb19pcHRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTY3My17XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTgwOT1zdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIGlwdF9zb2Nrb3B0cyA9IHtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xODE1LVxcdC5nZXRfb3B0bWF4XFx0PSBJUFRfU09fR0VUX01BWCsxLFxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYzoxODE2OlxcdC5nZXRcXHRcXHQ9IGRvX2lwdF9nZXRfY3RsLFxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xODE3LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTE2ODU9c3RhdGljIGludFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTY4Njpkb19pcDZ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjg3LXtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTgyND1zdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIGlwNnRfc29ja29wdHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE4MzAtXFx0LmdldF9vcHRtYXhcXHQ9IElQNlRfU09fR0VUX01BWCsxLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTgzMTpcXHQuZ2V0XFx0XFx0PSBkb19pcDZ0X2dldF9jdGwsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xODMyLVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjAyLjQyOTIwODg1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ0NDIwODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGdldF9jdGxgIGluIGBpcF90YWJsZXMuY2AgYW5kIGBpcDZfdGFibGVzLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgY29tcGFyZSB0aGUgYGdldF9jdGxgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlwX3RhYmxlcy5jYCBhbmQgYGlwNl90YWJsZXMuY2Agc291cmNlIGZpbGVzLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhpcyBjcm9zcy1leGFtaW5hdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBkaWZmZXJlbmNlcyBvciBzaW1pbGFyaXRpZXMgaW4gaG93IElQdjQgYW5kIElQdjYgY29udHJvbCBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IHRoZSBOZXRmaWx0ZXIgbGV2ZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHRhYmxlcyB0aGVtc2VsdmVzLiBJcyB0aGVyZSBzb21lIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBbSBJIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgYnVnLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHksIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZGVzaWduIGRlY2lzaW9uPyBJdOKAmXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlaXIgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGFueSBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmV0cmlldmUgY29udHJvbCBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHJ1bGUgbWFuaXB1bGF0aW9uIG9yIHRhYmxlIG1hbmFnZW1lbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIGFueSBkaWZmZXJlbmNlcyBpbiB0aGUga2VybmVsIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MDQuODczNjMyMTYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzEyNzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYXQuKmdldF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIzOTQ9c3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZyxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxMy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MTQ6c3RhdGljIGludCBjb21wYXRfZG9fZWJ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxNS1cXHRcXHR2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI0ODc9c3RhdGljIGludCBkb19lYnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjUwMy1cXHQgICAgICpsZW4gIT0gc2l6ZW9mKHRtcCkpKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjUwNDpcXHRcXHRyZXR1cm4gY29tcGF0X2RvX2VidF9nZXRfY3RsKHNrLCBjbWQsIHVzZXIsIGxlbik7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTA1LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDowNC45NDA3NjQ5OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQzNzkzNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyBgY29tcGF0X2dldF9lbnRyaWVzYCBDYWxscyBpbiBpcHRhYmxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY29tcGF0X2dldF9lbnRyaWVzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlwX3RhYmxlcy5jYCBhbmQgYGlwNl90YWJsZXMuY2AgY29kZWJhc2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZD8gV2hhdCBpcyB0aGUgY29udGV4dD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29tcGF0aWJpbGl0eS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGlwdGFibGVzIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgcHVycG9zZSB0aGV5IHNlcnZlIGFuZCB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgdGhleSBhZGRyZXNzLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24gb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyBhIGNvZGUgZGl2ZSB0byBpZGVudGlmeSBldmVyeSBpbnN0YW5jZSBvZiBhIGBjb21wYXRfZ2V0X2VudHJpZXNgIGludm9jYXRpb24uIFRoaXMgd2lsbCBzZXJ2ZSBhcyB0aGUgZm91bmRhdGlvbiBvZiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzOTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDowNi42ODQ1NjA5MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODY0NjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYXRfZ2V0X2VudHJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTU4OT1zdGF0aWMgaW50XFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE1OTA6Y29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNTkxLVxcdFxcdCAgIGludCAqbGVuKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE2NzI9ZG9faXB0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTY4OC1cXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTY4OTpcXHRcXHRcXHRyZXQgPSBjb21wYXRfZ2V0X2VudHJpZXMoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pO1xcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNjkwLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTYwMz1zdGF0aWMgaW50XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxNjA0OmNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjA1LVxcdFxcdCAgIGludCAqbGVuKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xNjg2PWRvX2lwNnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTcwMi1cXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE3MDM6XFx0XFx0XFx0cmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE3MDQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDowNy4zMTMyMTIyNzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MjE0NDkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIFRhYmxlIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBpbiB0aGVzZSBuZXRmaWx0ZXIgdGFibGUgaW1wbGVtZW50YXRpb25zLiBGaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGRlYWwgd2l0aCBpbiB0aGUgdGhyZWUgQyBmaWxlczogYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYC4gIEknbSBzZWVpbmcgYSBjb25zaXN0ZW50IHBhdHRlcm4gb2YgYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9pbmZvYCwgYW5kIGBnZXRfZW50cmllc2AgYWNyb3NzIGFsbCBvZiB0aGVtLiBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCBhbHNvIGhhdmUgdGhvc2UgXCJjb21wYXRcIiB2ZXJzaW9ucyBhbmQgdGhlIGBkb18qX2dldF9jdGxgIHZhcmlhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLCBvciBwZXJoYXBzIHRoZSBjYWxsZXJzIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIHN5bWJvbHMgb2YgaW1tZWRpYXRlIGludGVyZXN0IGFyZTogYGRvX2lwdF9nZXRfY3RsYCwgYGNvbXBhdF9nZXRfZW50cmllc2AsIGBnZXRfZW50cmllc2AsIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGBkb19hcnB0X2dldF9jdGxgLCBhbmQgYGRvX2lwNnRfZ2V0X2N0bGAuICBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgJ2NvbXBhdCcgc3ltYm9scywgYW5kIHRoZSAnZ2V0JyBhbmQgJ2NvcHknIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZGlzdGluY3QuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZXNlIGZ1bmN0aW9uczogYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9pbmZvYCwgYGdldF9lbnRyaWVzYCwgYGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBjb21wYXRfZ2V0X2VudHJpZXNgLCBgZG9fYXJwdF9nZXRfY3RsYCwgYGRvX2lwdF9nZXRfY3RsYCwgYW5kIGBkb19pcDZ0X2dldF9jdGxgLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIGxpa2UgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgLCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAuIFRpbWUgdG8gY29uZmlybSB0aGF0J3MgYWN0dWFsbHkgdGhlIGNhc2UuXG5cbk9rYXksIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aG9zZSBpbiB0aGUgS2NvbmZpZyBmaWxlcy5cblxuUmlnaHQsIG5vdyB0aGUgY3J1Y2lhbCBzdGVwOiBjaGVja2luZyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UuIEluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCBgTkVURklMVEVSX1hUQUJMRVNgIGRlcGVuZHMgb24gYE5FVEZJTFRFUmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgSVBfTkZfSVBUQUJMRVNfTEVHQUNZYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGFuZCBgTkVURklMVEVSX1hUQUJMRVNgIGFuZCBgSVBfTkZfSVBUQUJMRVNgLiAgSG1tLCBpcyBgSVBfTkZfSVBUQUJMRVNgIGEgbWVudSBvciBhIGNvbmZpZz8gTGV0IG1lIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYWdhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MTIuNDA1MzU5MzkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElQIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIklQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIE5GX0RFRlJBR19JUFY0XFxuICAxMDpcXHRcXHR0cmlzdGF0ZVxcbiAgMTE6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMjpcXHRcXG4gIDEzOlxcdCMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcXG4gIDE0OlxcdGNvbmZpZyBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU1xcbiAgMTg6XFx0XFx0ZGVmYXVsdFxcdG0gaWYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIGlwdGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxcbiAgMjE6XFx0XFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXFxuICAyMjpcXHRcXHQgIChpcHRhYmxlcy1uZnQpLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkZfU09DS0VUX0lQVjRcXG4gIDI1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY0IHNvY2tldCBsb29rdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MTIuNDA1NDQ2NjUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0OTE4NDU2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGZpbHRlci9YdGFibGVzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXJlJ3MgYSBwYXRjaCBoZXJlIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyLXNwYWNlIGFuZCBrZXJuZWwtc3BhY2Ugd2l0aGluIHRoZSBOZXRmaWx0ZXIvWHRhYmxlcyBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHNvY2tvcHQgcmV0cmlldmFsIGhhbmRsZXJzIGluIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuIFRoZSBjb3JlIGlzc3VlIGFwcGVhcnMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgY29weWluZyBvZiBlbnRyaWVzIHRvIHVzZXIgc3BhY2UsIGFsbCB3aGlsZSBkZWFsaW5nIHdpdGggdGFibGUgbG9ja3MuXG5cbkkndmUgbm90ZWQgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGFyZSBpbXBvcnRhbnQgaGVyZTogYE5FVEZJTFRFUl9YVEFCTEVTYCwgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgLCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQgcG90ZW50aWFsbHkgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAg4oCTIHRoZXNlIGFyZSBjbGVhcmx5IHJlbGV2YW50IHRvIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgcXVpY2tseSBjaGVja2VkIGZvciB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLCBidXQgYWxsIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGFyZSBzcGVjaWZpYyB0byBuZXRmaWx0ZXIgYW5kIHh0YWJsZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgdGhlIGNvZGUgY29waWVzIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgZGlzYWJsZXMgcGFnZSBmYXVsdHMgZHVyaW5nIHRoZSBjb3B5IG9wZXJhdGlvbiwgd2hpY2ggaXMgc21hcnQsIGJ1dCBJJ20gZ3Vlc3NpbmcgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbS4gYGZhdWx0X2luX3dyaXRlYWJsZSgpYCBzb3VuZHMgbGlrZSBhIGNsZXZlciB3YXkgdG8gaGFuZGxlIHdyaXRlIGZhdWx0cy4gQWxzbyB0aGUgbW92ZW1lbnQgb2YgdXNlciBjb3B5aW5nIG91dHNpZGUgb2YgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBsb29rcyBsaWtlIGEgZ29vZCBzdGVwLlxuXG5UaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgbmV0ZmlsdGVyIGNvcmUgbG9naWMgd29ya3MuIFRoaXMgc29ydCBvZiBjaGFuZ2Ugd2FycmFudHMgdGhvcm91Z2ggdGVzdGluZy4gSSB0aGluayBmdXp6aW5nIGlzIGVzc2VudGlhbCBoZXJlLiBXZSBuZWVkIHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGVycm9yIHBhdGhzIG9yIGlzc3VlcyB3aXRoIGhvdyBwYWdlIGZhdWx0cyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBtYW5pcHVsYXRpbmcgZGF0YSB1bmRlciB0aGVzZSB0YWJsZSBsb2Nrcy5cblxuSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIGlzIGltcG9ydGFudCwgSSB3aWxsIHVzZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxMywiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoxNi44OTcyOTQ3OTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg1ODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUF9ORl9BUlBUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZW50cmllc190b191c2VyXCIsXG4gICAgXCJnZXRfZW50cmllc1wiLFxuICAgIFwiZ2V0X2luZm9cIixcbiAgICBcImNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiY29tcGF0X2dldF9lbnRyaWVzXCIsXG4gICAgXCJkb19pcHRfZ2V0X2N0bFwiLFxuICAgIFwiZG9faXA2dF9nZXRfY3RsXCIsXG4gICAgXCJkb19hcnB0X2dldF9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2Nrb3B0IHJldHJpZXZhbCBwYXRocyBpbiBsZWdhY3kgYXJwX3RhYmxlcywgaXBfdGFibGVzLCBhbmQgaXA2X3RhYmxlcy4gSXQgYWRkcyBwYWdlZmF1bHRfZGlzYWJsZSgpL3BhZ2VmYXVsdF9lbmFibGUoKSBhcm91bmQgdXNlciBjb3BpZXMgd2hpbGUgaG9sZGluZyB4dF90YWJsZSBsb2NrcywgYWRkcyBmYXVsdF9pbl93cml0ZWFibGUoKSByZXRyeSBoYW5kbGluZyBpbiBnZXRfZW50cmllcy9jb21wYXRfZ2V0X2VudHJpZXMsIGFuZCBtb3ZlcyBjb3B5X3RvX3VzZXIgb3V0c2lkZSBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGluIGdldF9pbmZvLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcsIHBhZ2UgZmF1bHQsIGFuZCBlcnJvciBoYW5kbGluZyBpbiByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUF9ORl9BUlBUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZW50cmllc190b191c2VyXCIsXG4gICAgXCJnZXRfZW50cmllc1wiLFxuICAgIFwiZ2V0X2luZm9cIixcbiAgICBcImNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiY29tcGF0X2dldF9lbnRyaWVzXCIsXG4gICAgXCJkb19pcHRfZ2V0X2N0bFwiLFxuICAgIFwiZG9faXA2dF9nZXRfY3RsXCIsXG4gICAgXCJkb19hcnB0X2dldF9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2Nrb3B0IHJldHJpZXZhbCBwYXRocyBpbiBsZWdhY3kgYXJwX3RhYmxlcywgaXBfdGFibGVzLCBhbmQgaXA2X3RhYmxlcy4gSXQgYWRkcyBwYWdlZmF1bHRfZGlzYWJsZSgpL3BhZ2VmYXVsdF9lbmFibGUoKSBhcm91bmQgdXNlciBjb3BpZXMgd2hpbGUgaG9sZGluZyB4dF90YWJsZSBsb2NrcywgYWRkcyBmYXVsdF9pbl93cml0ZWFibGUoKSByZXRyeSBoYW5kbGluZyBpbiBnZXRfZW50cmllcy9jb21wYXRfZ2V0X2VudHJpZXMsIGFuZCBtb3ZlcyBjb3B5X3RvX3VzZXIgb3V0c2lkZSBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGluIGdldF9pbmZvLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcsIHBhZ2UgZmF1bHQsIGFuZCBlcnJvciBoYW5kbGluZyBpbiByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjE2Ljk3MjE2MjM3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyNDc5MDk4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoxNi45NzI2MTIzODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzI0NzQ1NDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXFxuXFxuQWxsIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZSAoc3VjaCBhcyBzdHJ1Y3QgaXB0X2dldGluZm8gLyBpcDZ0X2dldGluZm8gLyBhcnB0X2dldGluZm8pIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJ2ZhdWx0ZWQnIGFuZCAncmV0JyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIGFsbCBicmFuY2hlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb2xlYWsgcmlza3MgYXJlIGludHJvZHVjZWQ7IGFueSBwb3RlbnRpYWwgYnVncyAobG9ja2luZywgZmF1bHQgaGFuZGxpbmcsIGVycm9yIGNvZGVzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQga2VybmVsIGNoZWNrcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNjozOTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG5pbmRleCBkYjMwN2ZhNDlmM2Y2Li43YjQzMjY5YWE2YjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG5AQCAtNjk1LDYgKzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cbiBcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cbiBcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFx1MDAzYyB0b3RhbF9zaXplOyBvZmYgKz0gZS1cdTAwM2VuZXh0X29mZnNldCwgbnVtKyspe1xuQEAgLTcxOSwxMiArNzIxLDE0IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXHR9XG4gXG4gIGZyZWVfY291bnRlcnM6XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbitcdHN0cnVjdCBhcnB0X2dldGluZm8gaW5mbztcbiBcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiBcdGludCByZXQ7XG5AQCAtNzM4LDcgKzc0Miw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAnXFwwJztcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GUFJPVE9fQVJQLCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBhcnB0X2dldGluZm8gaW5mbztcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gXG4gXHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuQEAgLTc1MSwxNSArNzU0LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRcdGluZm8uc2l6ZSA9IHByaXZhdGUtXHUwMDNlc2l6ZTtcbiBcdFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IDA7XG4rXHRcdHJldCA9IDA7XG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNzY5LDYgKzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGFycHRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuK1x0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XG4gXG4gXHRpZiAoKmxlbiBcdTAwM2Mgc2l6ZW9mKGdldCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc3OSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GUFJPVE9fQVJQLCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbkBAIC03OTQsNiArNzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1xuaW5kZXggODA5NDQxY2VkY2VkYy4uZTAyOTA3MmIwNzUwMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1bWFzay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaFx1MDAzZVxuQEAgLTgyNCw2ICs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcbiBcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVx1MDAzZWVudHJpZXM7XG4gXG4rXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xuIFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xuIFx0Zm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgXHUwMDNjIHRvdGFsX3NpemU7IG9mZiArPSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XG5AQCAtODYxLDYgKzg2Myw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFx0fVxuIFxuICBmcmVlX2NvdW50ZXJzOlxuK1x0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFx0dmZyZWUoY291bnRlcnMpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtOTQzLDYgKzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sXG4gXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiB7XG4rXHRzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbztcbiBcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiBcdGludCByZXQ7XG5AQCAtOTYwLDcgKzk2NCw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gI2VuZGlmXG4gXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XG5AQCAtOTgxLDEwICs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0XHRpbmZvLnNpemUgPSBwcml2YXRlLVx1MDAzZXNpemU7XG4gXHRcdHN0cnNjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuK1x0XHRyZXQgPSAwO1xuIFxuIFx0XHR4dF90YWJsZV91bmxvY2sodCk7XG4gXHRcdG1vZHVsZV9wdXQodC1cdTAwM2VtZSk7XG5AQCAtOTk0LDYgKzk5NCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbiBcdFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcbiAjZW5kaWZcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbitcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEwMDQsNiArMTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGlwdF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTAxMyw2ICsxMDE2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFwwJztcbiBcbisgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG5AQCAtMTAyNyw2ICsxMDMxLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE1NjEsMTIgKzE1NzMsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxuIFxuIFx0cG9zID0gdXNlcnB0cjtcbiBcdHNpemUgPSB0b3RhbF9zaXplO1xuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XG4gXHRcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXHUwMDI2cG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpKyspO1xuIFx0XHRpZiAocmV0ICE9IDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1NzksNiArMTU5Myw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTU5MSw2ICsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVCk7XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjEwLDYgKzE2MjYsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuIFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbiBcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG5pbmRleCAzMTNjNGFhYzM3N2FhLi5hNjRmY2QzYTk5NDhjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG5AQCAtODQ1LDYgKzg0Niw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFxuIFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiBcbitcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXHUwMDNlbmV4dF9vZmZzZXQsIG51bSsrKXtcbkBAIC04ODIsNiArODg0LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXHR9XG4gXG4gIGZyZWVfY291bnRlcnM6XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC05NjQsNiArOTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbitcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcbiBcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiBcdGludCByZXQ7XG5AQCAtOTgxLDcgKzk4NSw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gI2VuZGlmXG4gXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgbmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuLVx0XHRzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcbkBAIC0xMDAyLDEwICsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuK1x0XHRyZXQgPSAwO1xuIFxuIFx0XHR4dF90YWJsZV91bmxvY2sodCk7XG4gXHRcdG1vZHVsZV9wdXQodC1cdTAwM2VtZSk7XG5AQCAtMTAxNSw2ICsxMDE1LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIFx0XHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcbiAjZW5kaWZcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbitcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEwMjUsNiArMTAyNyw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMDM1LDYgKzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXDAnO1xuIFxuKyByZXRyeTpcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbiBcdFx0c3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG5AQCAtMTA0OSw2ICsxMDUzLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0fSBlbHNlXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4rXHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4rXHRcdGZhdWx0ZWQgPSB0cnVlO1xuK1x0XHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXHUwMDNlZW50cnl0YWJsZSxcbitcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xNTc1LDEyICsxNTg3LDE0IEBAIGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwgc3RydWN0IHh0X3RhYmxlICp0YWJsZSxcbiBcbiBcdHBvcyA9IHVzZXJwdHI7XG4gXHRzaXplID0gdG90YWxfc2l6ZTtcbitcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHR4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHByaXZhdGUtXHUwMDNlZW50cmllcywgdG90YWxfc2l6ZSkge1xuIFx0XHRyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsIFx1MDAyNnBvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzaXplLCBjb3VudGVycywgaSsrKTtcbiBcdFx0aWYgKHJldCAhPSAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuK1x0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFxuIFx0dmZyZWUoY291bnRlcnMpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xNTkzLDYgKzE2MDcsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTYwNSw2ICsxNjIwLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXDAnO1xuIFxuKyByZXRyeTpcbiBcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjI0LDYgKzE2NDAsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiBcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpO1xuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoxNi45NzI2MTMyODJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyMTIyNjczNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGFuZCBGYXVsdHMgaW4gTmV0ZmlsdGVyIFRhYmxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBjb3JlIE5ldGZpbHRlciB0YWJsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHksIEkgYmVsaWV2ZSB3ZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBwcm9ibGVtcy4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLlxuXG5GaXJzdCwgaW4gYGNvcHlfZW50cmllc190b191c2VyYCwgdGhlIGNvZGUgbm93IHdyYXBzIHRoZSBlbnRyeSBjb3B5IGxvb3Agd2l0aCBgcGFnZWZhdWx0X2Rpc2FibGUoKWAgYW5kIGBwYWdlZmF1bHRfZW5hYmxlKClgLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIHRvIHByZXZlbnQgcGFnZSBmYXVsdHMgZHVyaW5nIHRoaXMgY3JpdGljYWwgb3BlcmF0aW9uLCBsaWtlbHkgd2hlbiBhY2Nlc3NpbmcgdXNlci1zcGFjZSBtZW1vcnksIGVuc3VyaW5nIGF0b21pY2l0eSBhbmQgcHJldmVudGluZyB1bmV4cGVjdGVkIGludGVycnVwdGlvbnMuIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgaW50ZXJydXB0aW9ucyBhbmQgc3Vic2VxdWVudCByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24gaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIG1haW4gY2hhbmdlIGhlcmUgaXMgdGhlIG1vdmVtZW50IG9mIHRoZSBgaW5mb2Agc3RydWN0IGFuZCBgY29weV90b191c2VyKClgIGNhbGwuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGNvZGUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBgaW5mb2Agc3RydWN0ICp3aXRoaW4qIGFuIGBpZiAoIUlTX0VSUih0KSlgIGJsb2NrLCB3aGVyZSBgdGAgaXMgYSB0YWJsZSBwb2ludGVyLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBgY29weV90b191c2VyKClgIGNhbGwsIHdoaWNoIHNlbmRzIHRoYXQgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBzdHJ1Y3QgdG8gdXNlciBzcGFjZSwgKndhcyogb3V0c2lkZSBvZiB0aGF0IGBpZmAgYmxvY2ssIGJ1dCBub3cgaXQgaGFzIGJlZW4gbW92ZWQgYW5kIGlzIGd1YXJkZWQgYnkgYGlmICghcmV0IFx1MDAyNlx1MDAyNiAuLi4pYFxuXG5UaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBUaGUgYGluZm9gIHN0cnVjdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiB0aGUgdGFibGUgbG9va3VwIHN1Y2NlZWRzIChgIUlTX0VSUih0KWApLiBOb3csIHdoaWxlIHRoZSBgY29weV90b191c2VyYCBjYWxsIGlzIGdhdGVkIGJ5IGAhcmV0YCwgZW5zdXJpbmcgdGhhdCBjb3B5IHdpbGwgb25seSBoYXBwZW4gd2hlbiBgcmV0ID09IDBgIChpLmUuIHN1Y2Nlc3MpLCB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gaWYgYHJldGAgaXMgbW9kaWZpZWQgc29tZXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBmdW5jdGlvbiwgd2hpY2ggY291bGQgY2F1c2UgYSBgY29weV90b191c2VyKClgIHdpdGggdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoaXMgaXMgbm90IGlkZWFsLCBhbmQgSSBiZXQgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgZGF0YSBjb3JydXB0aW9uLlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGluIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AsIHRvIGVuc3VyZSB0aGF0IGByZXRgIGlzICpvbmx5KiBtb2RpZmllZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSB0YWJsZSBsb29rdXAuXG5cbkZpbmFsbHksIHRoZSBgZ2V0X2VudHJpZXNgIGZ1bmN0aW9uIGFkZHMgYHJldHJ5YCBsb2dpYyB1c2luZyBgZmF1bHRfaW5fd3JpdGVhYmxlYC4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHBvdGVudGlhbCB3cml0ZSBmYXVsdHMgZHVyaW5nIHRoZSBjb3B5aW5nIG9mIGVudHJpZXMsIGxpa2VseSB0byB1c2VyLXNwYWNlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBmYXVsdF9pbl93cml0ZWFibGVgIGlzIHRoZXJlIHRvIGhhbmRsZSB0aGUgc2NlbmFyaW9zIHdoZXJlIHdyaXRlcyB0byB1c2VyIHNwYWNlIGNvdWxkIGZhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoyOS4xODQ4ODM3NDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gNzI2OlxcdFxcdHJldHVybiByZXQ7XFxuIDcyNzpcXHR9XFxuIDcyODpcXHRcXG4gNzI5OlxcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XFxuIDczMjpcXHRcXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XFxuIDczMzpcXHRcXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XFxuIDczNDpcXHRcXHRpbnQgcmV0O1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGFycHRfZ2V0aW5mbykpXFxuIDczNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIHVzZXIsIHNpemVvZihuYW1lKSkgIT0gMClcXG4gNzQwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAnXFxcXDAnO1xcbiA3NDM6XFx0XFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xcbiA3NDQ6XFx0XFx0aWYgKCFJU19FUlIodCkpIHtcXG4gNzQ1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4gNzQ2OlxcdFxcbiA3NDc6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xcbiA3NDg6XFx0XFx0XFx0aW5mby52YWxpZF9ob29rcyA9IHQtXFx1MDAzZXZhbGlkX2hvb2tzO1xcbiA3NDk6XFx0XFx0XFx0bWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS1cXHUwMDNlaG9va19lbnRyeSxcXG4gNzUwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoaW5mby5ob29rX2VudHJ5KSk7XFxuIDc1MTpcXHRcXHRcXHRtZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtXFx1MDAzZXVuZGVyZmxvdyxcXG4gNzUyOlxcdFxcdFxcdCAgICAgICBzaXplb2YoaW5mby51bmRlcmZsb3cpKTtcXG4gNzUzOlxcdFxcdFxcdGluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLVxcdTAwM2VudW1iZXI7XFxuIDc1NDpcXHRcXHRcXHRpbmZvLnNpemUgPSBwcml2YXRlLVxcdTAwM2VzaXplO1xcbiA3NTU6XFx0XFx0XFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRcXHRyZXQgPSAwO1xcbiA3NTg6XFx0XFx0XFx0eHRfdGFibGVfdW5sb2NrKHQpO1xcbiA3NTk6XFx0XFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuIDc2MDpcXHRcXHR9IGVsc2VcXG4gNzYxOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIDc2MjpcXHRcXG4gNzYzOlxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4gNzY0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDc2NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NjY6XFx0fVxcbiA3Njc6XFx0XFxuIDc2ODpcXHRzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiA3Njk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IGludCAqbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoyOS4xODUwMjE1MzVaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MjMyNzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYGlwX3RhYmxlcy5jYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGluZm9ybWF0aW9uIGlzIGJlaW5nIHJldHJpZXZlZC4gVGltZSB0byBqdW1wIGludG8gdGhlIGBpcF90YWJsZXMuY2Agc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24gb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGRlYWxpbmcgd2l0aCByZXR1cm5pbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUga2VybmVsIHNwYWNlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZyAtIHRoZSBhY3R1YWwgcmV0cmlldmFsIG9mIHRoZSBkYXRhLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBpdCwgc3RhcnRpbmcgd2l0aCB0aGF0IGBnZXRfaW5mb2AgZnVuY3Rpb24uIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgcmVxdWVzdHMgYW5kIGhvdyBpdCBwYWNrYWdlcyBhbmQgcmV0dXJucyB0aGUgcmVsZXZhbnQgZGV0YWlscy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBhdHRlbnRpb24gZm9yIG9wdGltaXphdGlvbiBvciBkZWJ1Z2dpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQ1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDozMS4yNzczNTI2MjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NDUsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NDU6XFx0I2VuZGlmXFxuIDk0NjpcXHRcXG4gOTQ3OlxcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIDk0ODpcXHR7XFxuIDk0OTpcXHRcXHRzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbztcXG4gOTUwOlxcdFxcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcXG4gOTUxOlxcdFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4gOTUyOlxcdFxcdGludCByZXQ7XFxuIDk1MzpcXHRcXG4gOTU0OlxcdFxcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldGluZm8pKVxcbiA5NTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApXFxuIDk1ODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gOTU5OlxcdFxcbiA5NjA6XFx0XFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJ1xcXFwwJztcXG4gOTYxOlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDk2MjpcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG4gOTYzOlxcdFxcdFxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQpO1xcbiA5NjQ6XFx0I2VuZGlmXFxuIDk2NTpcXHRcXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBuYW1lKTtcXG4gOTY2OlxcdFxcdGlmICghSVNfRVJSKHQpKSB7XFxuIDk2NzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuIDk2ODpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbiA5Njk6XFx0XFx0XFx0c3RydWN0IHh0X3RhYmxlX2luZm8gdG1wO1xcbiA5NzA6XFx0XFxuIDk3MTpcXHRcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSkge1xcbiA5NzI6XFx0XFx0XFx0XFx0cmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgXFx1MDAyNnRtcCk7XFxuIDk3MzpcXHRcXHRcXHRcXHR4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTtcXG4gOTc0OlxcdFxcdFxcdFxcdHByaXZhdGUgPSBcXHUwMDI2dG1wO1xcbiA5NzU6XFx0XFx0XFx0fVxcbiA5NzY6XFx0I2VuZGlmXFxuIDk3NzpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuIDk3ODpcXHRcXHRcXHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cXHUwMDNldmFsaWRfaG9va3M7XFxuIDk3OTpcXHRcXHRcXHRtZW1jcHkoaW5mby5ob29rX2VudHJ5LCBwcml2YXRlLVxcdTAwM2Vob29rX2VudHJ5LFxcbiA5ODA6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLmhvb2tfZW50cnkpKTtcXG4gOTgxOlxcdFxcdFxcdG1lbWNweShpbmZvLnVuZGVyZmxvdywgcHJpdmF0ZS1cXHUwMDNldW5kZXJmbG93LFxcbiA5ODI6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLnVuZGVyZmxvdykpO1xcbiA5ODM6XFx0XFx0XFx0aW5mby5udW1fZW50cmllcyA9IHByaXZhdGUtXFx1MDAzZW51bWJlcjtcXG4gOTg0OlxcdFxcdFxcdGluZm8uc2l6ZSA9IHByaXZhdGUtXFx1MDAzZXNpemU7XFxuIDk4NTpcXHRcXHRcXHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcdFxcdHJldCA9IDA7XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdFxcdHh0X3RhYmxlX3VubG9jayh0KTtcXG4gOTkwOlxcdFxcdFxcdG1vZHVsZV9wdXQodC1cXHUwMDNlbWUpO1xcbiA5OTE6XFx0XFx0fSBlbHNlXFxuIDk5MjpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHQpO1xcbiA5OTM6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4gOTk0OlxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbiA5OTU6XFx0XFx0XFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcXG4gOTk2OlxcdCNlbmRpZlxcbiA5OTc6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFxcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxcbiA5OTg6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gOTk5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjMxLjI3NzUzMDU4NloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEwMTI0NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NCBDb21wYXQgVGFibGUgSW5mb3JtYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBpcF90YWJsZXMuY2AgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXBhdGliaWxpdHkgaGFuZGxpbmcgd29ya3MuIE9rYXksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNoZWNrcyBmb3IgYENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIGFuZCwgd2l0aGluIGl0LCBgaW5fY29tcGF0X3N5c2NhbGwoKWAuIE5vdyBJIHNlZSB0aGUgY3J1Y2lhbCBwYXJ0OiB0aGUgYGNvbXBhdF90YWJsZV9pbmZvYCBmdW5jdGlvbiFcblxuQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gd2hhdCBoYXBwZW5zIGlmIGBjb21wYXRfdGFibGVfaW5mb2AgKmZhaWxzKj8gVGhlIGNvZGUgZG9lc24ndCBleHBsaWNpdGx5IGhhbmRsZSBhIHBvdGVudGlhbCBlcnJvciByZXR1cm4uIEl0IGNoZWNrcyBmb3IgYElTX0VSUih0KWAsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW4gZXF1aXZhbGVudCBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29tcGF0X3RhYmxlX2luZm9gIGl0c2VsZiBiZWZvcmUgdGhhdCBgcHJpdmF0ZSA9IFx1MDAyNnRtcDtgIGFzc2lnbm1lbnQuIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGNvbXBhdF90YWJsZV9pbmZvYCB0byB1bmRlcnN0YW5kIGl0cyBlcnJvciBiZWhhdmlvciBhbmQgc2VlIGlmIHRoaXMgcmVxdWlyZXMgYSBmaXguIEEgcmV0dXJuIG9mIGFuIGVycm9yIHdvdWxkIGhhdmUgYmVlbiBhIHNpZ25pZmljYW50IHByb2JsZW0uIExldCdzIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MzMuNzg3NjU3OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyNTpcXHRcXHRjb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5O1xcbiA5MjY6XFx0XFx0aW50IHJldDtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0aWYgKCFuZXdpbmZvIHx8ICFpbmZvKVxcbiA5Mjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdC8qIHdlIGRvbnQgY2FyZSBhYm91dCBuZXdpbmZvLVxcdTAwM2VlbnRyaWVzICovXFxuIDkzMjpcXHRcXHRtZW1jcHkobmV3aW5mbywgaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpKTtcXG4gOTMzOlxcdFxcdG5ld2luZm8tXFx1MDAzZWluaXRpYWxfZW50cmllcyA9IDA7XFxuIDkzNDpcXHRcXHRsb2NfY3B1X2VudHJ5ID0gaW5mby1cXHUwMDNlZW50cmllcztcXG4gOTM1OlxcdFxcdHJldCA9IHh0X2NvbXBhdF9pbml0X29mZnNldHMoQUZfSU5FVCwgaW5mby1cXHUwMDNlbnVtYmVyKTtcXG4gOTM2OlxcdFxcdGlmIChyZXQpXFxuIDkzNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5Mzg6XFx0XFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBpbmZvLVxcdTAwM2VzaXplKSB7XFxuIDkzOTpcXHRcXHRcXHRyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTtcXG4gOTQwOlxcdFxcdFxcdGlmIChyZXQgIT0gMClcXG4gOTQxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDk0MjpcXHRcXHR9XFxuIDk0MzpcXHRcXHRyZXR1cm4gMDtcXG4gOTQ0OlxcdH1cXG4gOTQ1OlxcdCNlbmRpZlxcbiA5NDY6XFx0XFxuIDk0NzpcXHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiA5NDg6XFx0e1xcbiA5NDk6XFx0XFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjMzLjc4Nzg2NTc5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDgzOTc5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2V0X2luZm9gIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBTYWZldHkgYW5kIExvY2tpbmcqKlxuXG5Pa2F5LCBzbyBiZWZvcmUgZGl2aW5nIGludG8gdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpiZWZvcmUqIHN0YXRlIG9mIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uLiBSaWdodCwgaGVyZSdzIHdoYXQgSSBzZWU6IHRoZSBvbGQgY29kZSB3YXMgcmVxdWVzdGluZyBhIHRhYmxlIGxvY2ssIHJldHJpZXZpbmcgdGFibGUgaW5mb3JtYXRpb24sIGFuZCB0aGVuIGRvaW5nIGEgYGNvcHlfdG9fdXNlcmAuIEknbSBzZWVpbmcgdGhhdCBldmVuIGlmIGBjb21wYXRfdGFibGVfaW5mb2AgZmFpbGVkLCB0aGUgY29kZSB3b3VsZCBwcm9jZWVkIHRvIHRoZSBgY29weV90b191c2VyYCBjYWxsIGFueXdheSwgd2hpY2ggc2VlbXPigKYgcGVjdWxpYXIuIEFuZCBpbiB0aGUgbmV3IGNvZGUsIEkgbm90aWNlZCB0aGUgbGluZSBgcmV0ID0gMDtgIHNldCBleHBsaWNpdGx5IGFuZCB0aGVuIG92ZXJ3cml0dGVuIG9ubHkgb24gYSBmYXVsdC4gQ3J1Y2lhbGx5LCBgaW5mb2AgaXMgYmVpbmcgYG1lbXNldGAtZWQsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB0aGUgKndoeSogb2YgdGhpcyBwYXRjaC4gVGhlIGtleSBpcyBpbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gQWhhLCB0aGUgdXNlIG9mIGBwYWdlZmF1bHRfZGlzYWJsZSgpYCBhcm91bmQgdGhlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgYW5kIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGZ1bmN0aW9ucyBpcyB0aGUgZ2l2ZWF3YXkuIEl0J3MgcmVsYXRlZCB0byB0aGUgYGdldF9lbnRyaWVzYCBmdW5jdGlvbiBhcyB3ZWxsLlxuXG5UaGUgbW90aXZhdGlvbiBoZXJlIGlzIGNsZWFyOiB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbWFraW5nIGBjb3B5X3RvX3VzZXJgIGNhbGxzICp3aGlsZSBob2xkaW5nIGEgbG9jayogKGxpa2UgYHh0X3RhYmxlX2xvY2tgKS4gVGhpcyBpcyBhIHBvdGVudGlhbCBkaXNhc3RlciEgV2UgY2FuIGVuZCB1cCB3aXRoIGRlYWRsb2Nrcywgb3IgYXQgbGVhc3QgdW5kZXNpcmFibGUgYmVoYXZpb3IgaWYgYSBwYWdlIGZhdWx0IGhhcHBlbnMgd2hpbGUgd2UncmUgaW4gYW4gYXRvbWljIGNvbnRleHQgb3Igd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLiBBIHBhZ2UgZmF1bHQgZHVyaW5nIGEgYGNvcHlfdG9fdXNlcmAgY2FsbCBpbiBzdWNoIGEgc2l0dWF0aW9uIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcywgaW5jbHVkaW5nIGxvY2sgaW52ZXJzaW9uIGFuZCBpc3N1ZXMgd2l0aCBgbW1hcF9sb2NrYC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2gncyBvYmplY3RpdmUgaXMgdG8gbW92ZSB0aGF0IGBjb3B5X3RvX3VzZXJgIG91dHNpZGUgdGhlIHRhYmxlIGxvY2sgaW4gYGdldF9pbmZvYCwgZW5zdXJpbmcgd2UncmUgbm90IGhvbGRpbmcgYW55IGxvY2tzIGR1cmluZyB0aGUgY29weS4gSW4gYGNvcHlfZW50cmllc190b191c2VyYCwgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGlzIHVzZWQgdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCB3aGlsZSB0aGUgbG9jayBpcyBoZWxkLiBJZiB3ZSBkbyBnZXQgYSAtRUZBVUxULCB0aGUgY29kZSB1bmxvY2tzLCBjaGVja3MgZm9yIGEgZmF1bHQgdXNpbmcgYGZhdWx0X2luX3dyaXRlYWJsZSgpYCwgYW5kIHJldHJpZXMuIENsZXZlci5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIHNjYW4gdGhlc2UgbW9kaWZpZWQgZmlsZXMsIGVzcGVjaWFsbHkgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGFueXRoaW5nIEtNU0FOIG1pZ2h0IGZsYWcuIEFsc28sIEknbGwgdGFrZSBhIGxvb2sgYXQgYGlwNl90YWJsZXMuY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIGhhbmRsZWQgc2ltaWxhcmx5LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBwYXRjaCwgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDo0MC4wMzYyNjY2MzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTY1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTY1OlxcdH1cXG4gOTY2OlxcdCNlbmRpZlxcbiA5Njc6XFx0XFxuIDk2ODpcXHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiA5Njk6XFx0e1xcbiA5NzA6XFx0XFx0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xcbiA5NzE6XFx0XFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xcbiA5NzI6XFx0XFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbiA5NzM6XFx0XFx0aW50IHJldDtcXG4gOTc0OlxcdFxcbiA5NzU6XFx0XFx0aWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2dldGluZm8pKVxcbiA5NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk3NzpcXHRcXG4gOTc4OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApXFxuIDk3OTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gOTgwOlxcdFxcbiA5ODE6XFx0XFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJ1xcXFwwJztcXG4gOTgyOlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDk4MzpcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG4gOTg0OlxcdFxcdFxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcXG4gOTg1OlxcdCNlbmRpZlxcbiA5ODY6XFx0XFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIG5hbWUpO1xcbiA5ODc6XFx0XFx0aWYgKCFJU19FUlIodCkpIHtcXG4gOTg4OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4gOTg5OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDk5MDpcXHRcXHRcXHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuIDk5MzpcXHRcXHRcXHRcXHRyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCBcXHUwMDI2dG1wKTtcXG4gOTk0OlxcdFxcdFxcdFxcdHh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKEFGX0lORVQ2KTtcXG4gOTk1OlxcdFxcdFxcdFxcdHByaXZhdGUgPSBcXHUwMDI2dG1wO1xcbiA5OTY6XFx0XFx0XFx0fVxcbiA5OTc6XFx0I2VuZGlmXFxuIDk5ODpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuIDk5OTpcXHRcXHRcXHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cXHUwMDNldmFsaWRfaG9va3M7XFxuMTAwMDpcXHRcXHRcXHRtZW1jcHkoaW5mby5ob29rX2VudHJ5LCBwcml2YXRlLVxcdTAwM2Vob29rX2VudHJ5LFxcbjEwMDE6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLmhvb2tfZW50cnkpKTtcXG4xMDAyOlxcdFxcdFxcdG1lbWNweShpbmZvLnVuZGVyZmxvdywgcHJpdmF0ZS1cXHUwMDNldW5kZXJmbG93LFxcbjEwMDM6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLnVuZGVyZmxvdykpO1xcbjEwMDQ6XFx0XFx0XFx0aW5mby5udW1fZW50cmllcyA9IHByaXZhdGUtXFx1MDAzZW51bWJlcjtcXG4xMDA1OlxcdFxcdFxcdGluZm8uc2l6ZSA9IHByaXZhdGUtXFx1MDAzZXNpemU7XFxuMTAwNjpcXHRcXHRcXHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0XFx0cmV0ID0gMDtcXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0XFx0eHRfdGFibGVfdW5sb2NrKHQpO1xcbjEwMTE6XFx0XFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuMTAxMjpcXHRcXHR9IGVsc2VcXG4xMDEzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuMTAxNDpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbjEwMTU6XFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxuMTAxNjpcXHRcXHRcXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcXG4xMDE3OlxcdCNlbmRpZlxcbjEwMTg6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFxcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxcbjEwMTk6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6NDAuMDM2NDg5NjI4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjEyMjk5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgaW4gTmV0d29yayBUYWJsZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gdHJhY2UgaXRzIGJlaGF2aW9yIGFjcm9zcyB0aGUgdmFyaW91cyB0YWJsZSBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiBgYXJwX3RhYmxlc2AsIGBpcF90YWJsZXNgLCBhbmQgYGlwNl90YWJsZXNgLCBhcyB0aGVzZSBhcmUgdGhlIHByaW1hcnkgcG9pbnRzIG9mIGludGVyZXN0IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgZmlsdGVyaW5nLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBtb3ZlbWVudCBvZiBlbnRyaWVzIOKAkyBiZSB0aGV5IEFSUCBtYXBwaW5ncywgSVB2NCBmaXJld2FsbCBydWxlcywgb3IgSVB2NiBmaWx0ZXJzIOKAkyBmcm9tIHRoZSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29weSBvcGVyYXRpb24sIGZyb20gYSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgcGVyc3BlY3RpdmUsIGlzIHBhcmFtb3VudC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW50cm9kdWNlZCBieSB0aGlzIGRhdGEgdHJhbnNmZXIuIEkgd2lsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGhvdyB0aGUgY29udGV4dCBvZiB0aGUgdXNlciBwcm9jZXNzIG1pZ2h0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCBieSB0aGUgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIGFueSBjaGFuZ2VzIG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBwcm90ZWN0IHRoZSBzeXN0ZW0uIEkgd2lsbCB0aGVuIGFuYWx5emUgaXRzIHJlc291cmNlIHVzYWdlIGFuZCBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGVtZXJnZSBkdXJpbmcgdGhlIGNvcHkgcHJvY2Vzcy4gSSB3aWxsIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIHByb2Nlc3MgY2FuIGJlIG9wdGltaXplZCwgYW5kIGhvdyBpdCBjYW4gYmUgc2VjdXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjQyLjI1NzcyMjgxOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDY5MTpcXHRcXHR2b2lkICpsb2NfY3B1X2VudHJ5O1xcbiA2OTI6XFx0XFxuIDY5MzpcXHRcXHRjb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTtcXG4gNjk0OlxcdFxcdGlmIChJU19FUlIoY291bnRlcnMpKVxcbiA2OTU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xcbiA2OTY6XFx0XFxuIDY5NzpcXHRcXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cXHUwMDNlZW50cmllcztcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gNzAwOlxcdFxcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cXG4gNzAxOlxcdFxcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cXG4gNzAyOlxcdFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuIDcwMzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0O1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRcXHRlID0gbG9jX2NwdV9lbnRyeSArIG9mZjtcXG4gNzA2OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZiwgZSxcXG4gNzA3OlxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgYXJwdF9lbnRyeSwgY291bnRlcnMpKSB8fFxcbiA3MDg6XFx0XFx0XFx0ICAgIGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmXFxuIDcwOTpcXHRcXHRcXHRcXHRcXHQgKyBvZmZzZXRvZihzdHJ1Y3QgYXJwdF9lbnRyeSwgY291bnRlcnMpLFxcbiA3MTA6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjb3VudGVyc1tudW1dLFxcbiA3MTE6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihjb3VudGVyc1tudW1dKSkpIHtcXG4gNzEyOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDcxMzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDcxNDpcXHRcXHRcXHR9XFxuIDcxNTpcXHRcXG4gNzE2OlxcdFxcdFxcdHQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTtcXG4gNzE3OlxcdFxcdFxcdGlmICh4dF90YXJnZXRfdG9fdXNlcih0LCB1c2VycHRyICsgb2ZmICsgZS1cXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcXG4gNzE4OlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDcxOTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDcyMDpcXHRcXHRcXHR9XFxuIDcyMTpcXHRcXHR9XFxuIDcyMjpcXHRcXG4gNzIzOlxcdCBmcmVlX2NvdW50ZXJzOlxcbiA3MjQ6XFx0XFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbiA3MjU6XFx0XFx0dmZyZWUoY291bnRlcnMpO1xcbiA3MjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gNzI3OlxcdH1cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0c3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6NDIuMjU3ODQxODg5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NjIxOTE4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIERldGVjdGVkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSB3YW50ZWQgdG8gcmlnb3JvdXNseSBjaGVjayBgZ2V0X2VudHJpZXNgIGFjcm9zcyBhbGwgdGhyZWUgcmVsZXZhbnQgZmlsZXM6IGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuIEkgZm9jdXNlZCBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBgZ2V0X2VudHJpZXNgIGZ1bmN0aW9uIGFuZCB0aGUgcmVsYXRlZCBgY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYCBmdW5jdGlvbnMuXG5cbkkgemVyb2VkIGluIG9uIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uLCBjaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGUgYGluZm9gIHN0cnVjdCBpbiBgZ2V0X2luZm9gIGlzIGRlZmluZWQgb24gdGhlIHN0YWNrLCB3aGljaCBpcyBnb29kLiAgSSBjb25maXJtZWQgdGhhdCB0aGUgY29kZSB3aXRoaW4gdGhlIGBpZiAoIUlTX0VSUih0KSlgIGJsb2NrICpleHBsaWNpdGx5KiBpbml0aWFsaXplcyBgaW5mb2Agd2l0aCBgbWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSlgLiBBbGwgZmllbGRzIGFyZSB0aGVuIHBvcHVsYXRlZCwgYW5kIG9ubHkgaWYgYHJldGAgaXMgemVybyAoaW5kaWNhdGluZyBzdWNjZXNzKSBkb2VzIGBjb3B5X3RvX3VzZXJgIGV2ZW4gZXhlY3V0ZS4gVGhpcyBwcmV2ZW50cyBhbnkgcG9zc2liaWxpdHkgb2YgYW4gdW5pbml0aWFsaXplZCBgaW5mb2Agc3RydWN0IGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBJZiBgcmV0YCBpcyBub3QgemVybywgdGhlIGBjb3B5X3RvX3VzZXJgIGRvZXMgbm90IGhhcHBlbi5cblxuSSB0aGVuIGxvb2tlZCBhdCBgY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYC4gVGhlIG9ubHkgY2hhbmdlIHRoZXJlIHdhcyB0aGUgYWRkaXRpb24gb2YgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGFuZCBgcGFnZWZhdWx0X2VuYWJsZSgpYCwgYnV0IGNyaXRpY2FsbHksIHRoZSBidWZmZXJzLCBsZW5ndGhzLCBhbmQgaW5pdGlhbGl6YXRpb24gbG9naWMgd2VyZSAqbm90KiBtb2RpZmllZC4gVGhpcyBtZWFucyB3ZSdyZSBzYWZlIHRoZXJlLlxuXG5gZ2V0X2VudHJpZXNgIGFuZCBgY29tcGF0X2dldF9lbnRyaWVzYCBhbHNvIGhhZCB0aGUgbmV3IHJldHJ5IGxvZ2ljLiBCdXQgYWdhaW4sIGl0J3MganVzdCByZXRyeSBsb2dpYywgc28gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcy4gSSBjaGVja2VkIGZvciBhbnkgb3RoZXIgcGF0aHMgb3IgY2hhbmdlcyBpbiB0aGUgZGlmZiB0byBlbnN1cmUgbm90aGluZyBzbGlwcGVkIG15IGF0dGVudGlvbi5cblxuTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZz8qKiBOby4gYGluZm9gIGlzIGV4cGxpY2l0bHkgemVyb2VkIGJlZm9yZSBwb3B1bGF0aW9uLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIGFyZSBzZW50LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBUaGUgYGZhdWx0ZWRgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIGByZXRgIGhhcyBiZWVuIHNldCBpbiBhbGwgYnJhbmNoZXMuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8qKiBOby5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8qKiBOby5cblxuR2l2ZW4gdGhvc2UgY2hlY2tzLCBJIGNvbmNsdWRlZCB0aGF0LCBmcm9tIHRoZSBLTVNBTiBwZXJzcGVjdGl2ZSwgdGhlcmUncyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBhcmUgcG9zc2libGUgaGVyZSBhcmUgdGhpbmdzIGxpa2UgZGVhZGxvY2tzLCBsb2NrIG9yZGVyaW5nIHByb2JsZW1zLCBhbmQgaXNzdWVzIHdpdGggdXNlciBwb2ludGVycywgYnV0IHRob3NlIGFyZSB0aGluZ3MgdGhhdCBLQVNBTiBvciBsb2NrZGVwIHdvdWxkIGhhdmUgZmxhZ2dlZC4gVGhlIGNvZGUgbG9va3Mgc29saWQgZnJvbSBhIEtNU0FOIHBvaW50IG9mIHZpZXcsIGFuZCBJIGRvdWJsZS1jaGVja2VkIGBnZXRfaW5mb2AgaW4gYGlwX3RhYmxlcy5jYCB0byBiZSBzdXJlIGV2ZXJ5dGhpbmcgd2FzIHByb3Blcmx5IGluaXRpYWxpemVkLCBwYXJ0aWN1bGFybHkgd2l0aCByZWdhcmQgdG8gdGhlIGBjb21wYXRgIHN5c2NhbGwgcGF0aC4gIFRoZSBgaW5mb2AgdmFyaWFibGUsIHNwZWNpZmljYWxseSwgaXMgc2V0IHRvIHplcm8gdGhlcmUgYXMgd2VsbC4gRXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZCFcblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDUwLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDo1MC4yMjAwMzY1MDlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlwdGFibGVzLCBpcDZ0YWJsZXMsIGFuZCBhcnB0YWJsZXMgdG8gcHJldmVudCBkZWFkbG9ja3MgYW5kIGxvY2sgaW52ZXJzaW9uIHdoZW4gY29weWluZyBkYXRhIHRvL2Zyb20gdXNlciBzcGFjZSB3aGlsZSBob2xkaW5nIHRhYmxlIGxvY2tzIChieSBkaXNhYmxpbmcgcGFnZSBmYXVsdHMgaW4gY29weV9lbnRyaWVzX3RvX3VzZXIgYW5kIHJldHJ5aW5nIHdpdGggZmF1bHRfaW5fd3JpdGVhYmxlLCBhbmQgYnkgZGVmZXJyaW5nIGNvcHlfdG9fdXNlciBpbiBnZXRfaW5mbyB1bnRpbCBhZnRlciB1bmxvY2tpbmcpLlxcblxcbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSkgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZCBhbmQgY29waWVkLCBhbmQgY29weV90b191c2VyIGlzIG9ubHkgaW52b2tlZCBpZiB0YWJsZSBsb29rdXAgc3VjY2VlZGVkIHdpdGhvdXQgZXJyb3IuIExvY2FsIHZhcmlhYmxlcyBsaWtlICdmYXVsdGVkJyBhbmQgJ3JldCcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXFxuXFxuQWxsIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZSAoc3VjaCBhcyBzdHJ1Y3QgaXB0X2dldGluZm8gLyBpcDZ0X2dldGluZm8gLyBhcnB0X2dldGluZm8pIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJ2ZhdWx0ZWQnIGFuZCAncmV0JyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIGFsbCBicmFuY2hlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb2xlYWsgcmlza3MgYXJlIGludHJvZHVjZWQ7IGFueSBwb3RlbnRpYWwgYnVncyAobG9ja2luZywgZmF1bHQgaGFuZGxpbmcsIGVycm9yIGNvZGVzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQga2VybmVsIGNoZWNrcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsrmwx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 15:43:36 +0000 UTC FinishedAt: 2026-09-09 16:40:51 +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": "7a099b347fef536a84068076e2d384f044e5cfc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "IP_NF_IPTABLES_LEGACY", "IP6_NF_IPTABLES_LEGACY", "IP_NF_ARPTABLES", "NETFILTER_XTABLES_COMPAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7a099b347fef536a84068076e2d384f044e5cfc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "IP_NF_IPTABLES_LEGACY", "IP6_NF_IPTABLES_LEGACY", "IP_NF_ARPTABLES", "NETFILTER_XTABLES_COMPAT" ], "series_id": "c82e66ad-a1f8-40b9-add9-717f129c8f63" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "copy_entries_to_user", "get_entries", "get_info", "compat_copy_entries_to_user", "compat_get_entries", "do_ipt_get_ctl", "do_ip6t_get_ctl", "do_arpt_get_ctl" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9JUFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9BUlBUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfQ09NUEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9lbnRyaWVzX3RvX3VzZXImIzM0OywKICAgICYjMzQ7Z2V0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7Z2V0X2luZm8mIzM0OywKICAgICYjMzQ7Y29tcGF0X2NvcHlfZW50cmllc190b191c2VyJiMzNDssCiAgICAmIzM0O2NvbXBhdF9nZXRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtkb19pcHRfZ2V0X2N0bCYjMzQ7LAogICAgJiMzNDtkb19pcDZ0X2dldF9jdGwmIzM0OywKICAgICYjMzQ7ZG9fYXJwdF9nZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXG5cbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJiMzOTtmYXVsdGVkJiMzOTsgYW5kICYjMzk7cmV0JiMzOTsgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tvcHQgcmV0cmlldmFsIHBhdGhzIGluIGxlZ2FjeSBhcnBfdGFibGVzLCBpcF90YWJsZXMsIGFuZCBpcDZfdGFibGVzLiBJdCBhZGRzIHBhZ2VmYXVsdF9kaXNhYmxlKCkvcGFnZWZhdWx0X2VuYWJsZSgpIGFyb3VuZCB1c2VyIGNvcGllcyB3aGlsZSBob2xkaW5nIHh0X3RhYmxlIGxvY2tzLCBhZGRzIGZhdWx0X2luX3dyaXRlYWJsZSgpIHJldHJ5IGhhbmRsaW5nIGluIGdldF9lbnRyaWVzL2NvbXBhdF9nZXRfZW50cmllcywgYW5kIG1vdmVzIGNvcHlfdG9fdXNlciBvdXRzaWRlIGNyaXRpY2FsIGxvY2sgc2VjdGlvbnMgaW4gZ2V0X2luZm8uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZywgcGFnZSBmYXVsdCwgYW5kIGVycm9yIGhhbmRsaW5nIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiMzQxMzEyMmFlNDNiZjVmNWZmYmRlNWJmMGZlYWMxYWM0ZmRkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE2OjM5OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG5pbmRleCBkYjMwN2ZhNDlmM2Y2Li43YjQzMjY5YWE2YjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiBcbkBAIC02OTUsNiAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuJiM0MztcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbkBAIC03MTksMTIgJiM0Mzs3MjEsMTQgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbiYjNDM7XHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XG4gXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4gXHRpbnQgcmV0O1xuQEAgLTczOCw3ICYjNDM7NzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICYjMzk7XFwwJiMzOTs7XG4gXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgbmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuLVx0XHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuIFxuIFx0XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbkBAIC03NTEsMTUgJiM0Mzs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdHJldCA9IDA7XG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC03NjksNiAmIzQzOzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGFycHRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC03NzksNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuIFxuJiM0MzsgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTc5NCw2ICYjNDM7Nzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiYjNDM7XHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4mIzQzO1x0XHRmYXVsdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG5pbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1bWFzay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmhcdTAwM2VcbkBAIC04MjQsNiAmIzQzOzgyNSw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFxuIFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiBcbiYjNDM7XHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xuIFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xuIFx0Zm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgXHUwMDNjIHRvdGFsX3NpemU7IG9mZiAmIzQzOz0gZS1cdTAwM2VuZXh0X29mZnNldCwgbnVtJiM0MzsmIzQzOyl7XG5AQCAtODYxLDYgJiM0Mzs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbiYjNDM7XHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC05NDMsNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sXG4gXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiB7XG4mIzQzO1x0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4gXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4gXHRpbnQgcmV0O1xuQEAgLTk2MCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbi1cdFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcbkBAIC05ODEsMTAgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0XHRpbmZvLnNpemUgPSBwcml2YXRlLVx1MDAzZXNpemU7XG4gXHRcdHN0cnNjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0cmV0ID0gMDtcbiBcbiBcdFx0eHRfdGFibGVfdW5sb2NrKHQpO1xuIFx0XHRtb2R1bGVfcHV0KHQtXHUwMDNlbWUpO1xuQEAgLTk5NCw2ICYjNDM7OTk0LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIFx0XHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xuICNlbmRpZlxuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMDA0LDYgJiM0MzsxMDA2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiYjNDM7XHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTAxMyw2ICYjNDM7MTAxNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiBcbiYjNDM7IHJldHJ5OlxuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTEwMjcsNiAmIzQzOzEwMzEsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuJiM0MztcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbiYjNDM7XHRcdGZhdWx0ZWQgPSB0cnVlO1xuJiM0MztcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xNTYxLDEyICYjNDM7MTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsXG4gXG4gXHRwb3MgPSB1c2VycHRyO1xuIFx0c2l6ZSA9IHRvdGFsX3NpemU7XG4mIzQzO1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XG4gXHRcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXHUwMDI2cG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpJiM0MzsmIzQzOyk7XG4gXHRcdGlmIChyZXQgIT0gMClcbiBcdFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1NzksNiAmIzQzOzE1OTMsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNTkxLDYgJiM0MzsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiBcbiYjNDM7IHJldHJ5OlxuIFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVCk7XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjEwLDYgJiM0MzsxNjI2LDEzIEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiBcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7XG4mIzQzO1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuJiM0MztcdFx0ZmF1bHRlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXHUwMDNlZW50cnl0YWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcbmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFx1MDAzZVxuQEAgLTg0NSw2ICYjNDM7ODQ2LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuJiM0MztcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbkBAIC04ODIsNiAmIzQzOzg4NCw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFx0fVxuIFxuICBmcmVlX2NvdW50ZXJzOlxuJiM0MztcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk2NCw2ICYjNDM7OTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87XG4gXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4gXHRpbnQgcmV0O1xuQEAgLTk4MSw3ICYjNDM7OTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiBcdFx0c3RydWN0IHh0X3RhYmxlX2luZm8gdG1wO1xuQEAgLTEwMDIsMTAgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0cmV0ID0gMDtcbiBcbiBcdFx0eHRfdGFibGVfdW5sb2NrKHQpO1xuIFx0XHRtb2R1bGVfcHV0KHQtXHUwMDNlbWUpO1xuQEAgLTEwMTUsNiAmIzQzOzEwMTUsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4gXHRcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpO1xuICNlbmRpZlxuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMDI1LDYgJiM0MzsxMDI3LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMDM1LDYgJiM0MzsxMDM4LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuIFxuJiM0MzsgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTEwNDksNiAmIzQzOzEwNTMsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiYjNDM7XHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4mIzQzO1x0XHRmYXVsdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTU3NSwxMiAmIzQzOzE1ODcsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxuIFxuIFx0cG9zID0gdXNlcnB0cjtcbiBcdHNpemUgPSB0b3RhbF9zaXplO1xuJiM0MztcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHR4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHByaXZhdGUtXHUwMDNlZW50cmllcywgdG90YWxfc2l6ZSkge1xuIFx0XHRyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsIFx1MDAyNnBvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspO1xuIFx0XHRpZiAocmV0ICE9IDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFxuIFx0dmZyZWUoY291bnRlcnMpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xNTkzLDYgJiM0MzsxNjA3LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuJiM0MztcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNjA1LDYgJiM0MzsxNjIwLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4gXG4mIzQzOyByZXRyeTpcbiBcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjI0LDYgJiM0MzsxNjQwLDEzIEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4gXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcbiYjNDM7XHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4mIzQzO1x0XHRmYXVsdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVBfTkZfSVBUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0lQNl9ORl9JUFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVBfTkZfQVJQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfZW50cmllc190b191c2VyJiMzNDssCiAgICAmIzM0O2dldF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2dldF9pbmZvJiMzNDssCiAgICAmIzM0O2NvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlciYjMzQ7LAogICAgJiMzNDtjb21wYXRfZ2V0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7ZG9faXB0X2dldF9jdGwmIzM0OywKICAgICYjMzQ7ZG9faXA2dF9nZXRfY3RsJiMzNDssCiAgICAmIzM0O2RvX2FycHRfZ2V0X2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzb2Nrb3B0IHJldHJpZXZhbCBwYXRocyBpbiBsZWdhY3kgYXJwX3RhYmxlcywgaXBfdGFibGVzLCBhbmQgaXA2X3RhYmxlcy4gSXQgYWRkcyBwYWdlZmF1bHRfZGlzYWJsZSgpL3BhZ2VmYXVsdF9lbmFibGUoKSBhcm91bmQgdXNlciBjb3BpZXMgd2hpbGUgaG9sZGluZyB4dF90YWJsZSBsb2NrcywgYWRkcyBmYXVsdF9pbl93cml0ZWFibGUoKSByZXRyeSBoYW5kbGluZyBpbiBnZXRfZW50cmllcy9jb21wYXRfZ2V0X2VudHJpZXMsIGFuZCBtb3ZlcyBjb3B5X3RvX3VzZXIgb3V0c2lkZSBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGluIGdldF9pbmZvLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcsIHBhZ2UgZmF1bHQsIGFuZCBlcnJvciBoYW5kbGluZyBpbiByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNjozOTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IGRiMzA3ZmE0OWYzZjYuLjdiNDMyNjlhYTZiMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCkBAIC02OTUsNiAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCiAKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0mZ3Q7ZW50cmllczsKIAomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCS8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi8KIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgJmx0OyB0b3RhbF9zaXplOyBvZmYgJiM0Mzs9IGUtJmd0O25leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXsKQEAgLTcxOSwxMiAmIzQzOzcyMSwxNCBAQCBzdGF0aWMgaW50IGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTczOCw3ICYjNDM7NzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAluYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAmIzM5O1wwJiMzOTs7CiAJdCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBhcnB0X2dldGluZm8gaW5mbzsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwogCiAJCW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC03NTEsMTUgJiM0Mzs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gMDsKJiM0MzsJCXJldCA9IDA7CiAJCXh0X3RhYmxlX3VubG9jayh0KTsKIAkJbW9kdWxlX3B1dCh0LSZndDttZSk7CiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQomIzQzOwkJcmV0ID0gLUVGQVVMVDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjksNiAmIzQzOzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBnZXQ7CiAJc3RydWN0IHh0X3RhYmxlICp0OwomIzQzOwlib29sIGZhdWx0ZWQgPSBmYWxzZTsKIAogCWlmICgqbGVuICZsdDsgc2l6ZW9mKGdldCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc5LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgZ2V0Lm5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKQEAgLTc5NCw2ICYjNDM7Nzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb2NfZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVtYXNrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oJmd0OwpAQCAtODI0LDYgJiM0Mzs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLSZndDtlbnRyaWVzOwogCiYjNDM7CXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJLyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqLwogCS8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi8KIAlmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiAmbHQ7IHRvdGFsX3NpemU7IG9mZiAmIzQzOz0gZS0mZ3Q7bmV4dF9vZmZzZXQsIG51bSYjNDM7JiM0MzspewpAQCAtODYxLDYgJiM0Mzs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAl9CiAKICBmcmVlX2NvdW50ZXJzOgomIzQzOwlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CiB9CkBAIC05NDMsNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sCiAKIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiB7CiYjNDM7CXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk2MCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVAogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CkBAIC05ODEsMTAgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCQlpbmZvLnNpemUgPSBwcml2YXRlLSZndDtzaXplOwogCQlzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtOTk0LDYgJiM0Mzs5OTQsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKQogCQl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNCw2ICYjNDM7MTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDEzLDYgJiM0MzsxMDE2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwpAQCAtMTAyNyw2ICYjNDM7MTAzMSwxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTYxLDEyICYjNDM7MTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU3OSw2ICYjNDM7MTU5Myw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAlpbnQgcmV0OwogCXN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTkxLDYgJiM0MzsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQpOwogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKQEAgLTE2MTAsNiAmIzQzOzE2MjYsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTsKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1bWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgmZ3Q7CkBAIC04NDUsNiAmIzQzOzg0Niw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtJmd0O2VudHJpZXM7CiAKJiM0MzsJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAkvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovCiAJLyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqLwogCWZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmICZsdDsgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLSZndDtuZXh0X29mZnNldCwgbnVtJiM0MzsmIzQzOyl7CkBAIC04ODIsNiAmIzQzOzg4NCw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2NCw2ICYjNDM7OTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk4MSw3ICYjNDM7OTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewotCQlzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUCiAJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKQEAgLTEwMDIsMTAgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtMTAxNSw2ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiAJaWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpCiAJCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAyNSw2ICYjNDM7MTAyNyw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCWludCByZXQ7CiAJc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMzUsNiAmIzQzOzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAogCWdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICYjMzk7XDAmIzM5OzsKIAomIzQzOyByZXRyeToKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CkBAIC0xMDQ5LDYgJiM0MzsxMDUzLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTc1LDEyICYjNDM7MTU4NywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU5Myw2ICYjNDM7MTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2MDUsNiAmIzQzOzE2MjAsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTsKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewpAQCAtMTYyNCw2ICYjNDM7MTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7CiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCB0b3VjaGVzIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AsIGFsbCB3aXRoaW4gdGhlIG5ldGZpbHRlciByZWFsbS4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgdGhpcyBpcyBwcm9iYWJseSBhYm91dCBhIGNvbnNpc3RlbnQgY2hhbmdlIGFjcm9zcyBJUHY0LCBJUHY2IGFuZCBBUlAgdGFibGUgaGFuZGxpbmcgd2hpY2ggaXMgYW4gZXhwZWN0ZWQgcmVmYWN0b3IuCgpQZWVsaW5nIGJhY2sgdGhlIGxheWVycywgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc29tZSBjb21tb24gcGF0dGVybnMgZW1lcmdpbmcuIEluIGFsbCB0aHJlZSBmaWxlcywgYGNvcHlfZW50cmllc190b191c2VyYCBub3cgaW5jbHVkZXMgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGFuZCBgcGFnZWZhdWx0X2VuYWJsZSgpYCBjYWxscy4gQWxzbywgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24gaGFzIGhhZCB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBgeHRfdGFibGVfdW5sb2NrYCBzZWN0aW9uLiBBbmQgYSByZXRyeSBsb29wIHdpdGggYGZhdWx0X2luX3dyaXRlYWJsZSgpYCBoYXMgYmVlbiBhZGRlZCB0byBgZ2V0X2VudHJpZXNgLiBUaGVyZSBhcmUgc2ltaWxhciBjaGFuZ2VzIGZvciB0aGUgY29tcGF0IGZ1bmN0aW9ucyBpbiBpcF90YWJsZXMgYW5kIGlwNl90YWJsZXMuIFRoaXMgc3Ryb25nbHkgaW5kaWNhdGVzIHNvbWUgY29uY2VybiBhcm91bmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzIGR1cmluZyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gcmVhZGluZyBuZXRmaWx0ZXIgdGFibGUgZW50cmllcy4KClNvLCB3aHkgYXJlIHRoZXNlIGNoYW5nZXMgaGVyZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBsb2NraW5nIGlzc3VlcyBkdXJpbmcgZGF0YSB0cmFuc2Zlciwgc28gbGV0JiMzOTtzIGNoZWNrIHdoYXQgbG9ja3MgYXJlIGJlaW5nIGhlbGQgd2hpbGUgYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9lbnRyaWVzYCwgYW5kIHRoZWlyIGNvbXBhdHJpb3RzIGFyZSBhY3RpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBHcmVwcGluZyBvciByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBpcF90YWJsZXMuY2AgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgd2l0aCB0aGVpciBhc3NvY2lhdGVkIGxvY2tzLiBMb29rcyBsaWtlIHdlJiMzOTtyZSB0cnlpbmcgdG8gbWFrZSBkYXRhIHRyYW5zZmVycyBtb3JlIHJvYnVzdCB0byBoYW5kbGUgcGFnZSBmYXVsdHMsIGFuZCBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGJ5IGNhcmVmdWxseSBtYW5hZ2luZyBsb2NraW5nLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBpbXByb3ZlbWVudCBpbiB0ZXJtcyBvZiByb2J1c3RuZXNzLCBidXQgdGhlIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGFjcm9zcyB0aGUgZmlsZXMgbWVhbnMgY2FyZWZ1bCByZXZpZXdpbmcgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRcdHVuc2lnbmVkIGludCBvZmYsIG51bTtcbiA4MTY6XHRcdGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmU7XG4gODE3Olx0XHRzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzO1xuIDgxODpcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS1cdTAwM2Vwcml2YXRlO1xuIDgxOTpcdFx0aW50IHJldCA9IDA7XG4gODIwOlx0XHRjb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5O1xuIDgyMTpcdFxuIDgyMjpcdFx0Y291bnRlcnMgPSBhbGxvY19jb3VudGVycyh0YWJsZSk7XG4gODIzOlx0XHRpZiAoSVNfRVJSKGNvdW50ZXJzKSlcbiA4MjQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xuIDgyNTpcdFxuIDgyNjpcdFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiA4Mjc6XHRcbiA4Mjg6XHRcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gODI5Olx0XHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gODMwOlx0XHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gODMxOlx0XHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbiA4MzI6XHRcdFx0dW5zaWduZWQgaW50IGk7XG4gODMzOlx0XHRcdGNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbTtcbiA4MzQ6XHRcdFx0Y29uc3Qgc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdDtcbiA4MzU6XHRcbiA4MzY6XHRcdFx0ZSA9IGxvY19jcHVfZW50cnkgJiM0Mzsgb2ZmO1xuIDgzNzpcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJwdHIgJiM0Mzsgb2ZmLCBlLFxuIDgzODpcdFx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSkgfHxcbiA4Mzk6XHRcdFx0ICAgIGNvcHlfdG9fdXNlcih1c2VycHRyICYjNDM7IG9mZlxuIDg0MDpcdFx0XHRcdFx0ICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSxcbiA4NDE6XHRcdFx0XHRcdCBcdTAwMjZjb3VudGVyc1tudW1dLFxuIDg0MjpcdFx0XHRcdFx0IHNpemVvZihjb3VudGVyc1tudW1dKSkpIHtcbiA4NDM6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDg0NDpcdFx0XHRcdGdvdG8gZnJlZV9jb3VudGVycztcbiA4NDU6XHRcdFx0fVxuIDg0NjpcdFxuIDg0NzpcdFx0XHRmb3IgKGkgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSk7XG4gODQ4Olx0XHRcdCAgICAgaSBcdTAwM2MgZS1cdTAwM2V0YXJnZXRfb2Zmc2V0O1xuIDg0OTpcdFx0XHQgICAgIGkgJiM0Mzs9IG0tXHUwMDNldS5tYXRjaF9zaXplKSB7XG4gODUwOlx0XHRcdFx0bSA9ICh2b2lkICopZSAmIzQzOyBpO1xuIDg1MTpcdFxuIDg1MjpcdFx0XHRcdGlmICh4dF9tYXRjaF90b191c2VyKG0sIHVzZXJwdHIgJiM0Mzsgb2ZmICYjNDM7IGkpKSB7XG4gODUzOlx0XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDg1NDpcdFx0XHRcdFx0Z290byBmcmVlX2NvdW50ZXJzO1xuIDg1NTpcdFx0XHRcdH1cbiA4NTY6XHRcdFx0fVxuIDg1NzpcdFxuIDg1ODpcdFx0XHR0ID0gaXB0X2dldF90YXJnZXRfYyhlKTtcbiA4NTk6XHRcdFx0aWYgKHh0X3RhcmdldF90b191c2VyKHQsIHVzZXJwdHIgJiM0Mzsgb2ZmICYjNDM7IGUtXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcbiA4NjA6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDg2MTpcdFx0XHRcdGdvdG8gZnJlZV9jb3VudGVycztcbiA4NjI6XHRcdFx0fVxuIDg2MzpcdFx0fVxuIDg2NDpcdFxuIDg2NTpcdCBmcmVlX2NvdW50ZXJzOlxuIDg2NjpcdFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIDg2NzpcdFx0dmZyZWUoY291bnRlcnMpO1xuIDg2ODpcdFx0cmV0dXJuIHJldDtcbiA4Njk6XHR9XG4gODcwOlx0XG4gODcxOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiA4NzI6XHRzdGF0aWMgdm9pZCBjb21wYXRfc3RhbmRhcmRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIDg3MzpcdHtcbiA4NzQ6XHRcdGludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAzOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBgZ2V0X2VudHJpZXNgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBub3cgb24gdGhlIGBnZXRfZW50cmllc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgY29udGV4dD8gV2hhdCBkYXRhIHN0cnVjdHVyZSBpcyBpdCBvcGVyYXRpbmcgb24/IElzIHRoaXMgYSBzdGFuZGFyZCByZXRyaWV2YWwgbWV0aG9kLCBhIHNwZWNpYWxpemVkIHF1ZXJ5LCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBhcmFtZXRlcnMgaXQgYWNjZXB0cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGFnaW5hdGlvbiwgZmlsdGVyaW5nIGJ5IHNwZWNpZmljIGNyaXRlcmlhIChkYXRlLCBhdXRob3IsIGtleXdvcmQsIGV0Yy4pLCBzb3J0aW5nIG9wdGlvbnM/IFdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIOKAkyBhIGxpc3QsIGEgZGljdGlvbmFyeSwgcGVyaGFwcyBhbiBpdGVyYXRvciBmb3IgaGFuZGxpbmcgbGFyZ2UgZGF0YXNldHMgZWZmaWNpZW50bHk/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IGl0cyB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBEb2VzIGl0IGhpdCBhIGRhdGFiYXNlPyBJcyBpdCBjYWNoZWQ/IFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBmb3IgYm90dGxlbmVja3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGFzc2VzcyBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0fVxuMTAwMTpcdFxuMTAwMjpcdHN0YXRpYyBpbnRcbjEwMDM6XHRnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuMTAwNDpcdFx0ICAgIGNvbnN0IGludCAqbGVuKVxuMTAwNTpcdHtcbjEwMDY6XHRcdGludCByZXQ7XG4xMDA3Olx0XHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcbjEwMDg6XHRcdHN0cnVjdCB4dF90YWJsZSAqdDtcbjEwMDk6XHRcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuMTAxMDpcdFxuMTAxMTpcdFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuMTAxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMTM6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZnZXQsIHVwdHIsIHNpemVvZihnZXQpKSAhPSAwKVxuMTAxNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjEwMTU6XHRcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzKSAmIzQzOyBnZXQuc2l6ZSlcbjEwMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDE3Olx0XHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuMTAxODpcdFxuMTAxOTpcdCByZXRyeTpcbjEwMjA6XHRcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG4xMDIxOlx0XHRpZiAoIUlTX0VSUih0KSkge1xuMTAyMjpcdFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbjEwMjM6XHRcdFx0aWYgKGdldC5zaXplID09IHByaXZhdGUtXHUwMDNlc2l6ZSlcbjEwMjQ6XHRcdFx0XHRyZXQgPSBjb3B5X2VudHJpZXNfdG9fdXNlcihwcml2YXRlLVx1MDAzZXNpemUsXG4xMDI1Olx0XHRcdFx0XHRcdFx0ICAgdCwgdXB0ci1cdTAwM2VlbnRyeXRhYmxlKTtcbjEwMjY6XHRcdFx0ZWxzZVxuMTAyNzpcdFx0XHRcdHJldCA9IC1FQUdBSU47XG4xMDI4Olx0XG4xMDI5Olx0XHRcdG1vZHVsZV9wdXQodC1cdTAwM2VtZSk7XG4xMDMwOlx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbjEwMzE6XHRcdH0gZWxzZVxuMTAzMjpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuMTAzMzpcdFxuMTAzNDpcdFx0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuMTAzNTpcdFx0XHRmYXVsdGVkID0gdHJ1ZTtcbjEwMzY6XHRcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4xMDM3Olx0XHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuMTAzODpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTAzOTpcdFx0XHRnb3RvIHJldHJ5O1xuMTA0MDpcdFx0fVxuMTA0MTpcdFxuMTA0MjpcdFx0cmV0dXJuIHJldDtcbjEwNDM6XHR9XG4xMDQ0Olx0XG4xMDQ1Olx0c3RhdGljIGludFxuMTA0NjpcdF9fZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcyxcbjEwNDc6XHRcdCAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMsXG4xMDQ4Olx0XHQgICAgIHZvaWQgX191c2VyICpjb3VudGVyc19wdHIpXG4xMDQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRlYnVnZ2luZyB0aGUgYHh0X3RhYmxlX2xvY2tgIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHh0X3RhYmxlX2xvY2tgLCBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSBzdXNwaWNpb3VzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGRpc2FibGluZyBwYWdlIGZhdWx0cyBpcyBhIHJlZCBmbGFnLCBtZWFuaW5nIHRoYXQgdGhlIGNvZGUgKnByb2JhYmx5KiBob2xkcyBzb21lIGtpbmQgb2YgY3JpdGljYWwgc2VjdGlvbi4gTGlrZWx5IGEgc3BpbmxvY2sgb3IgbXV0ZXgsIG1heWJlIGV2ZW4gZGlzYWJsaW5nIHByZWVtcHRpb24gb3IgYm90dG9tLWhhbGYgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQgbmVlZHMgdG8gcHJldmVudCBwYWdlIGZhdWx0cyBpbiB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLCBhbmQgdGhlIHR5cGUgb2YgbG9jayBnaXZlcyBhIGNsdWUgYXMgdG8gd2hlcmUgdG8gbG9vay4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KClRvIHZlcmlmeSBteSBodW5jaCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGB4dF9maW5kX3RhYmxlX2xvY2tgIGlzIHVzZWQgYW5kIGRlZmluZWQuIEkmIzM5O2xsIGVpdGhlciBncmVwIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lIG9yIGxvb2sgYXQgaXRzIGFjdHVhbCBkZWZpbml0aW9uIHRvIGNvbmZpcm0gd2hhdCBraW5kIG9mIGxvY2tpbmcgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB4dF90YWJsZV9sb2NrYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4dF9maW5kX3RhYmxlX2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD0zMzg9c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaDozMzk6c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgtMzQwLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmM9NzY4PXN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy03ODUtIHJldHJ5OlxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYzo3ODY6XHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtNzg3LVx0aWYgKCFJU19FUlIodCkpIHtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jPTkzNT1zdGF0aWMgaW50IGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NDktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jOjk1MDpcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgdG1wLm5hbWUpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NTEtXHRpZiAoSVNfRVJSKHQpKSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTEwMDM9Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTAxOS0gcmV0cnk6XG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTAyMDpcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTAyMS1cdGlmICghSVNfRVJSKHQpKSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTExNjY9ZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTE4MC1cbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYzoxMTgxOlx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIHRtcC5uYW1lKTtcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xMTgyLVx0aWYgKElTX0VSUih0KSkge1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYz0xNTkwPWNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTYxMC1cdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE2MTE6XHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE2MTItXHRpZiAoIUlTX0VSUih0KSkge1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTAyND1nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDEtIHJldHJ5OlxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxMDQyOlx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDMtXHRpZiAoIUlTX0VSUih0KSkge1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTE4OD1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTIwMS1cdFx0cmV0dXJuIFBUUl9FUlIocGFkZGMpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxMjAyOlx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCB0bXAubmFtZSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEyMDMtXHRpZiAoSVNfRVJSKHQpKSB7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xNjA0PWNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjI0LVx0eHRfY29tcGF0X2xvY2soQUZfSU5FVDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxNjI1Olx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE2MjYtXHRpZiAoIUlTX0VSUih0KSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xMzI1PUVYUE9SVF9TWU1CT0woeHRfZmluZF90YWJsZSk7XG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzMjctLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCBcdTAwMjYgcmVmLiAgUmV0dXJucyBFUlJfUFRSIG9uIGVycm9yLiAqL1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjEzMjg6c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZixcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzI5LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzItfVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjEzNzM6RVhQT1JUX1NZTUJPTF9HUEwoeHRfZmluZF90YWJsZV9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzc0LVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTEzNzU9c3RydWN0IHh0X3RhYmxlICp4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLFxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzc3LXtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzc4Olx0c3RydWN0IHh0X3RhYmxlICp0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgYWYsIG5hbWUpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzktXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzODQtXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzg1Olx0XHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgYWYsIG5hbWUpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzODYtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmV0ZmlsdGVyIFRhYmxlcyBhcmUgUHJpbWUgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBhcnBfdGFibGVzYCwgYGlwX3RhYmxlc2AsIGFuZCBgaXA2X3RhYmxlc2Ag4oCTIHRob3NlIGFyZSB0aGUgc3RhbmRhcmQgbmV0ZmlsdGVyIHRhYmxlcyBpbiB0aGUgTGludXgga2VybmVsLiBBcmUgdGhleSBhY2Nlc3NpYmxlPyBBYnNvbHV0ZWx5ISBUaGV5JiMzOTtyZSBpbnZva2VkIHRocm91Z2ggYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgb24gc3RhbmRhcmQgc29ja2V0cyBsaWtlIGBBRl9JTkVUYCwgYEFGX0lORVQ2YCwgb3IgYEFGX0FSUGAsIG9yIGV2ZW4gYEFGX05FVExJTktgLiBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBjYWxscyBsaWtlIGBJUF9HRVRfRU5UUklFU2AsIGBJUFRfU09fR0VUX0VOVFJJRVNgLCBgSVBUX1NPX0dFVF9JTkZPYCwgdGhpbmdzIGxpa2UgdGhhdCwgYWNjZXNzZWQgdGhyb3VnaCBgZ2V0c29ja29wdChmZCwgU09MX0lQLCAuLi4pYCBvciBgZ2V0c29ja29wdChmZCwgU09MX0lQVjYsIC4uLilgIOKAkyBiYXNpYyBuZXRmaWx0ZXIgc29ja2V0IGludGVyZmFjZXMsIGNvbXBsZXRlbHkgc3RhbmRhcmQgYW5kIHRvdGFsbHkgcmVhY2hhYmxlIGJ5IHN5emthbGxlci4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGZ1enppbmcgY3JpdGVyaWEuIEZpcnN0LCBpcyB0aGVyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZT8gWWVzLCBmb3Igc3VyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY2AsIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jYCwgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jYC4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIG1vZGlmeWluZyBsb2NrIGFuZCBwYWdlZmF1bHQgaGFuZGxpbmcsIHJpZ2h0PyBJdCYjMzk7cyBhYm91dCBob3cgdGhlIGNvZGUgaGFuZGxlcyBgcGFnZWZhdWx0X2Rpc2FibGVgL2BwYWdlZmF1bHRfZW5hYmxlYCBpbiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCB0aGUgcmV0cnkgbG9vcCB3aXRoIGBmYXVsdF9pbl93cml0ZWFibGVgIGluIGBnZXRfZW50cmllc2AsIGFuZCBtb3ZpbmcgYGNvcHlfdG9fdXNlcmAgb3V0c2lkZSBgeHRfdGFibGVfdW5sb2NrYCBpbiBgZ2V0X2luZm9gLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyB1c2VyIG1lbW9yeSBjb3B5aW5nIGlzIGhhbmRsZWQgdW5kZXIgbmV0ZmlsdGVyIGxvY2tzIOKAkyB0cnlpbmcgdG8gYXZvaWQgc2xlZXBzIG9yIGZhdWx0cyB3aGlsZSBob2xkaW5nIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCBhbmQgYWxzbyBhdm9pZCBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4KClRoaXMgc2NyZWFtcyAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0Oy4KCk5vdywgdGltZSB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgbmV0L2lwdjQvbmV0ZmlsdGVyL2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvYCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCB0aGUgcmlnaHQgc2V0dGluZ3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfTkZfSVBUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTk9Y29uZmlnIE5GX0RFRlJBR19JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTMtIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTQ6Y29uZmlnIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xMjg9ZW5kaWYgIyBORl9OQVRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyOS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjEzMDpjb25maWcgSVBfTkZfSVBUQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O0lQIHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nL21hc3EvTkFUKVwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE0MS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE0MjppZiBJUF9ORl9JUFRBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTQzLVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTE4ND1jb25maWcgSVBfTkZfRklMVEVSXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xODUtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgZmlsdGVyaW5nXCYjMzQ7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxODY6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxODc6XHRkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTg4LVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTIyMT1jb25maWcgSVBfTkZfTkFUXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjIzLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjIyNDpcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0yNjU9Y29uZmlnIElQX05GX01BTkdMRVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjY2LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IG1hbmdsaW5nXCYjMzQ7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoyNjc6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoyNjg6XHRkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjY5LVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMwMT1jb25maWcgSVBfTkZfUkFXXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDItXHR0cmlzdGF0ZSAgJiMzOTtyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIE5PVFJBQ0svVFJBQ0UpJiMzOTtcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMwMzpcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDQtXHRoZWxwXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzEzPWNvbmZpZyBJUF9ORl9TRUNVUklUWVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMxNi1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMTc6XHRkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzE4LVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyMy1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMyNDplbmRpZiAjIElQX05GX0lQVEFCTEVTXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjUtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19ORlRfRFVQX0lQVjQpICYjNDM7PSBuZnRfZHVwX2lwdjQub1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0yNy0jIGdlbmVyaWMgSVAgdGFibGVzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX05GX0lQVEFCTEVTX0xFR0FDWSkgJiM0Mzs9IGlwX3RhYmxlcy5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODU5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTWFrZWZpbGUgRXhwbG9yYXRpb24gZm9yIElQdjQgYW5kIElQdjYgTmV0ZmlsdGVyIE1vZHVsZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlc2UgTmV0ZmlsdGVyIG1vZHVsZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgTWFrZWZpbGVgcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIG9uZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9gIGRpcmVjdG9yaWVzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbW9kdWxlcyBmb3IgSVB2NCBhbmQgSVB2NiBmaWx0ZXJpbmcgYXJlIGRlZmluZWQuIEJ5IGV4YW1pbmluZyB0aGUgTWFrZWZpbGVzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYnVpbGQgZmxhZ3MsIG1vZHVsZSB0YXJnZXRzLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgbGlua2VkIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhlc2UgY3J1Y2lhbCBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIGJ1aWx0LiBLbm93aW5nIHRoZSBNYWtlZmlsZSB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgSSBjYW4gc3RhcnQgbWFraW5nIGNoYW5nZXMgdG8gbXkgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcyBvbiB0b3Agb2YgSVB2NC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0IyBkZWZyYWdcbiAgIDc6XHRvYmotJChDT05GSUdfTkZfREVGUkFHX0lQVjQpICYjNDM7PSBuZl9kZWZyYWdfaXB2NC5vXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX05GX1NPQ0tFVF9JUFY0KSAmIzQzOz0gbmZfc29ja2V0X2lwdjQub1xuICAxMDpcdG9iai0kKENPTkZJR19ORl9UUFJPWFlfSVBWNCkgJiM0Mzs9IG5mX3Rwcm94eV9pcHY0Lm9cbiAgMTE6XHRcbiAgMTI6XHQjIHJlamVjdFxuICAxMzpcdG9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNCkgJiM0Mzs9IG5mX3JlamVjdF9pcHY0Lm9cbiAgMTQ6XHRcbiAgMTU6XHQjIE5BVCBoZWxwZXJzIChuZl9jb25udHJhY2spXG4gIDE2Olx0b2JqLSQoQ09ORklHX05GX05BVF9IMzIzKSAmIzQzOz0gbmZfbmF0X2gzMjMub1xuICAxNzpcdG9iai0kKENPTkZJR19ORl9OQVRfUFBUUCkgJiM0Mzs9IG5mX25hdF9wcHRwLm9cbiAgMTg6XHRcbiAgMTk6XHRuZl9uYXRfc25tcF9iYXNpYy15IDo9IG5mX25hdF9zbm1wX2Jhc2ljLmFzbjEubyBuZl9uYXRfc25tcF9iYXNpY19tYWluLm9cbiAgMjA6XHQkKG9iaikvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vOiAkKG9iaikvbmZfbmF0X3NubXBfYmFzaWMuYXNuMS5oXG4gIDIxOlx0b2JqLSQoQ09ORklHX05GX05BVF9TTk1QX0JBU0lDKSAmIzQzOz0gbmZfbmF0X3NubXBfYmFzaWMub1xuICAyMjpcdFxuICAyMzpcdG9iai0kKENPTkZJR19ORlRfUkVKRUNUX0lQVjQpICYjNDM7PSBuZnRfcmVqZWN0X2lwdjQub1xuICAyNDpcdG9iai0kKENPTkZJR19ORlRfRklCX0lQVjQpICYjNDM7PSBuZnRfZmliX2lwdjQub1xuICAyNTpcdG9iai0kKENPTkZJR19ORlRfRFVQX0lQVjQpICYjNDM7PSBuZnRfZHVwX2lwdjQub1xuICAyNjpcdFxuICAyNzpcdCMgZ2VuZXJpYyBJUCB0YWJsZXNcbiAgMjg6XHRvYmotJChDT05GSUdfSVBfTkZfSVBUQUJMRVNfTEVHQUNZKSAmIzQzOz0gaXBfdGFibGVzLm9cbiAgMjk6XHRcbiAgMzA6XHQjIHRoZSB0aHJlZSBpbnN0YW5jZXMgb2YgaXBfdGFibGVzXG4gIDMxOlx0b2JqLSQoQ09ORklHX0lQX05GX0ZJTFRFUikgJiM0Mzs9IGlwdGFibGVfZmlsdGVyLm9cbiAgMzI6XHRvYmotJChDT05GSUdfSVBfTkZfTUFOR0xFKSAmIzQzOz0gaXB0YWJsZV9tYW5nbGUub1xuICAzMzpcdG9iai0kKENPTkZJR19JUF9ORl9OQVQpICYjNDM7PSBpcHRhYmxlX25hdC5vXG4gIDM0Olx0b2JqLSQoQ09ORklHX0lQX05GX1JBVykgJiM0Mzs9IGlwdGFibGVfcmF3Lm9cbiAgMzU6XHRvYmotJChDT05GSUdfSVBfTkZfU0VDVVJJVFkpICYjNDM7PSBpcHRhYmxlX3NlY3VyaXR5Lm9cbiAgMzY6XHRcbiAgMzc6XHQjIG1hdGNoZXNcbiAgMzg6XHRvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUgpICYjNDM7PSBpcHRfYWgub1xuICAzOTpcdG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUikgJiM0Mzs9IGlwdF9ycGZpbHRlci5vXG4gIDQwOlx0XG4gIDQxOlx0IyB0YXJnZXRzXG4gIDQyOlx0b2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9FQ04pICYjNDM7PSBpcHRfRUNOLm9cbiAgNDM6XHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCkgJiM0Mzs9IGlwdF9SRUpFQ1Qub1xuICA0NDpcdG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFkpICYjNDM7PSBpcHRfU1lOUFJPWFkub1xuICA0NTpcdFxuICA0NjpcdCMgZ2VuZXJpYyBBUlAgdGFibGVzXG4gIDQ3Olx0b2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgJiM0Mzs9IGFycF90YWJsZXMub1xuICA0ODpcdG9iai0kKENPTkZJR19JUF9ORl9BUlBfTUFOR0xFKSAmIzQzOz0gYXJwdF9tYW5nbGUub1xuICA0OTpcdFxuICA1MDpcdCMganVzdCBmaWx0ZXJpbmcgaW5zdGFuY2Ugb2YgQVJQIHRhYmxlcyBmb3Igbm93XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgdGhlIE5ldGZpbHRlciBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYnVpbGQgcHJvY2VzcywgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7dmUgYWxyZWFkeSBsb29rZWQgYXQgWCwgWSwgYW5kIFosIGJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIElQdjYgYW5kIG5ldGZpbHRlciwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGVgIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIHRoZSB0YXJnZXQgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcuIEJldHRlciB0byBiZSBjb21wbGV0ZSBhbmQgZWxpbWluYXRlIHRoaXMgc2VjdGlvbiBhcyBhbiBpc3N1ZSwgdGhhbiB0byBtaXNzIGEgcG9zc2libGUgcHJvYmxlbS4gSXQmIzM5O3MgdGhlIGRldmlsIGluIHRoZSBkZXRhaWxzLCBhbmQgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG1pc3MgYW55dGhpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgbXkgYmFja2dyb3VuZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcyBvbiB0b3Agb2YgSVB2Ni5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0IyBMaW5rIG9yZGVyIG1hdHRlcnMgaGVyZS5cbiAgIDc6XHRvYmotJChDT05GSUdfSVA2X05GX0lQVEFCTEVTX0xFR0FDWSkgJiM0Mzs9IGlwNl90YWJsZXMub1xuICAgODpcdG9iai0kKENPTkZJR19JUDZfTkZfRklMVEVSKSAmIzQzOz0gaXA2dGFibGVfZmlsdGVyLm9cbiAgIDk6XHRvYmotJChDT05GSUdfSVA2X05GX01BTkdMRSkgJiM0Mzs9IGlwNnRhYmxlX21hbmdsZS5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0lQNl9ORl9SQVcpICYjNDM7PSBpcDZ0YWJsZV9yYXcub1xuICAxMTpcdG9iai0kKENPTkZJR19JUDZfTkZfU0VDVVJJVFkpICYjNDM7PSBpcDZ0YWJsZV9zZWN1cml0eS5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0lQNl9ORl9OQVQpICYjNDM7PSBpcDZ0YWJsZV9uYXQub1xuICAxMzpcdFxuICAxNDpcdCMgZGVmcmFnXG4gIDE1Olx0bmZfZGVmcmFnX2lwdjYteSA6PSBuZl9kZWZyYWdfaXB2Nl9ob29rcy5vIG5mX2Nvbm50cmFja19yZWFzbS5vXG4gIDE2Olx0b2JqLSQoQ09ORklHX05GX0RFRlJBR19JUFY2KSAmIzQzOz0gbmZfZGVmcmFnX2lwdjYub1xuICAxNzpcdFxuICAxODpcdG9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNikgJiM0Mzs9IG5mX3NvY2tldF9pcHY2Lm9cbiAgMTk6XHRvYmotJChDT05GSUdfTkZfVFBST1hZX0lQVjYpICYjNDM7PSBuZl90cHJveHlfaXB2Ni5vXG4gIDIwOlx0XG4gIDIxOlx0IyByZWplY3RcbiAgMjI6XHRvYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICYjNDM7PSBuZl9yZWplY3RfaXB2Ni5vXG4gIDIzOlx0XG4gIDI0Olx0b2JqLSQoQ09ORklHX05GX0RVUF9JUFY2KSAmIzQzOz0gbmZfZHVwX2lwdjYub1xuICAyNTpcdFxuICAyNjpcdCMgbmZfdGFibGVzXG4gIDI3Olx0b2JqLSQoQ09ORklHX05GVF9SRUpFQ1RfSVBWNikgJiM0Mzs9IG5mdF9yZWplY3RfaXB2Ni5vXG4gIDI4Olx0b2JqLSQoQ09ORklHX05GVF9EVVBfSVBWNikgJiM0Mzs9IG5mdF9kdXBfaXB2Ni5vXG4gIDI5Olx0b2JqLSQoQ09ORklHX05GVF9GSUJfSVBWNikgJiM0Mzs9IG5mdF9maWJfaXB2Ni5vXG4gIDMwOlx0XG4gIDMxOlx0IyBtYXRjaGVzXG4gIDMyOlx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSCkgJiM0Mzs9IGlwNnRfYWgub1xuICAzMzpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQpICYjNDM7PSBpcDZ0X2V1aTY0Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX0ZSQUcpICYjNDM7PSBpcDZ0X2ZyYWcub1xuICAzNTpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUikgJiM0Mzs9IGlwNnRfaXB2NmhlYWRlci5vXG4gIDM2Olx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgJiM0Mzs9IGlwNnRfbWgub1xuICAzNzpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgJiM0Mzs9IGlwNnRfaGJoLm9cbiAgMzg6XHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX1JQRklMVEVSKSAmIzQzOz0gaXA2dF9ycGZpbHRlci5vXG4gIDM5Olx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgJiM0Mzs9IGlwNnRfcnQub1xuICA0MDpcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSAmIzQzOz0gaXA2dF9zcmgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIHRoZSBJUHY2IEZpcmV3YWxsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxlZ2FjeSBJUHY2IGlwdGFibGVzIHN1cHBvcnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElQdjYgbmV0ZmlsdGVyIGZyYW1ld29yayByZXNpZGUsIGFuZCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAgc2hvdWxkIGJlIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCBvcHRpb24gaXMgc3RpbGwgcHJlc2VudCBhbmQsIGlmIHNvLCB3aGF0IGl0cyBjdXJyZW50IHN0YXRlIGlzLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgYW55IGFzc29jaWF0ZWQgY29kZSBjaGFuZ2VzIG9yIHBvdGVudGlhbCBkZXByZWNhdGlvbiBwYXRocy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNpbmNlIGl0JiMzOTtzIGEgbGVnYWN5IGNvbXBvbmVudCwgdGhlcmUgbWlnaHQgYmUgc29tZSBjaHVybiBhcm91bmQgaXRzIHVzZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQNl9ORl9JUFRBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9Nj1tZW51IFwmIzM0O0lQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctOS0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMDpjb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NzI9Y29uZmlnIE5GX0xPR19JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNzktXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpjb25maWcgSVA2X05GX0lQVEFCTEVTXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cdHRyaXN0YXRlIFwmIzM0O0lQNiB0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05Mi1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjkzOmlmIElQNl9ORl9JUFRBQkxFU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctOTQtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MTk3PWNvbmZpZyBJUDZfTkZfRklMVEVSXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xOTgtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgZmlsdGVyaW5nXCYjMzQ7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxOTk6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MjAwOlx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yMDEtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTIzND1jb25maWcgSVA2X05GX01BTkdMRVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IG1hbmdsaW5nXCYjMzQ7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMzY6XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MjM3Olx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXHRoZWxwXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjQ1PWNvbmZpZyBJUDZfTkZfUkFXXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDYtXHR0cmlzdGF0ZSAgJiMzOTtyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIFRSQUNFKSYjMzk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNDc6XHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0OC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yNTc9Y29uZmlnIElQNl9ORl9TRUNVUklUWVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI2MC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNjE6XHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI2Mi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yNjg9Y29uZmlnIElQNl9ORl9OQVRcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNzEtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MjcyOlx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXHRzZWxlY3QgTkZfTkFUXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjkwPWNvbmZpZyBJUDZfTkZfVEFSR0VUX05QVFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI5OC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjI5OTplbmRpZiAjIElQNl9ORl9JUFRBQkxFU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzAwLWVuZG1lbnVcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtNi0jIExpbmsgb3JkZXIgbWF0dGVycyBoZXJlLlxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19MRUdBQ1kpICYjNDM7PSBpcDZfdGFibGVzLm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS04LW9iai0kKENPTkZJR19JUDZfTkZfRklMVEVSKSAmIzQzOz0gaXA2dGFibGVfZmlsdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYElQX05GX0FSUFRBQkxFU2AqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW50byB0aGlzIGFuYWx5c2lzLCBidXQgSSBjYW4mIzM5O3QgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLiBUaGUgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGhhcyBsZWQgbWUgdG8gYSBmZXcgaW50ZXJlc3RpbmcgcG9pbnRzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcml0aWNhbC4gQSB0aG91Z2h0IGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZDogSSAqaGF2ZSogdG8gY29uc2lkZXIgdGhlIGBJUF9ORl9BUlBUQUJMRVNgIG1vZHVsZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLCBlc3BlY2lhbGx5IHJlbGV2YW50IGluIHNjZW5hcmlvcyBpbnZvbHZpbmcgQVJQIGFuZCBJUCBhZGRyZXNzIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0ZmlsdGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHdoZXRoZXIgaXQgaXMgYSBwb2ludCBvZiBhdHRhY2sgaW4gdGhlIHN5c3RlbS4gR2l2ZW4gaXRzIHBvdGVudGlhbCBmb3IgYWx0ZXJpbmcgQVJQIGJlaGF2aW9yLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgd2hhdGV2ZXIgaXMgb2NjdXJyaW5nIHdpdGhpbiB0aGUgc3lzdGVtIGlzbiYjMzk7dCByZWxhdGVkIHRvIGltcHJvcGVyIGltcGxlbWVudGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIG5ldGZpbHRlciBtb2R1bGUuIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGl0cyB1c2UgYW5kIHF1aWNrbHkgYXNzZXNzIGlmIHRoYXQgbWF5IGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGlzc3VlIEkmIzM5O20gY2hhc2luZy4gSXQmIzM5O3MgYSB2aXRhbCBwaWVjZSB0byBjb25maXJtIEkgaGF2ZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9ORl9BUlBUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMyND1lbmRpZiAjIElQX05GX0lQVEFCTEVTXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzI2LSMgQVJQIHRhYmxlc1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzI3OmNvbmZpZyBJUF9ORl9BUlBUQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBBUlBUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM0Mz1jb25maWcgSVBfTkZfQVJQRklMVEVSXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDthcnB0YWJsZXMtbGVnYWN5IHBhY2tldCBmaWx0ZXJpbmcgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzQ1Olx0c2VsZWN0IElQX05GX0FSUFRBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQ2LVx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzU3PWNvbmZpZyBJUF9ORl9BUlBfTUFOR0xFXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTgtXHR0cmlzdGF0ZSBcJiMzNDtBUlAgcGF5bG9hZCBtYW5nbGluZ1wmIzM0O1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU5Olx0ZGVwZW5kcyBvbiBJUF9ORl9BUlBUQUJMRVMgfHwgTkZUX0NPTVBBVF9BUlBcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM2MC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9TWU5QUk9YWSkgJiM0Mzs9IGlwdF9TWU5QUk9YWS5vXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ2LSMgZ2VuZXJpYyBBUlAgdGFibGVzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgJiM0Mzs9IGFycF90YWJsZXMub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ4LW9iai0kKENPTkZJR19JUF9ORl9BUlBfTUFOR0xFKSAmIzQzOz0gYXJwdF9tYW5nbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldGZpbHRlciBDb21wYXRpYmlsaXR5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgaW4gcGxhY2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIG9yIHNvbWUgb3RoZXIgY3J1Y2lhbCBjb25maWcgb3B0aW9uIG1pZ2h0IGJlIG1pc3NpbmcuIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6IGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgIChvciBgSVBfTkZfSVBUQUJMRVNgKSwgYElQNl9ORl9JUFRBQkxFU19MRUdBQ1lgIChvciBgSVA2X05GX0lQVEFCTEVTYCksIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQsIG9mIGNvdXJzZSwgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAgKG9yIGp1c3QgYE5FVEZJTFRFUl9YVEFCTEVTYCkuIEl0JiMzOTtzIGVzc2VudGlhbCB3ZSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBJUF9ORl9JUFRBQkxFU2AgYW5kIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgIHdpdGhpbiB0aGUgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGRldGFpbCB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFx0dHJpc3RhdGVcbiAgMTE6XHRcdGRlZmF1bHQgblxuICAxMjpcdFxuICAxMzpcdCMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcbiAgMTQ6XHRjb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDE3Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXG4gIDE4Olx0XHRkZWZhdWx0XHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxuICAxOTpcdFx0aGVscFxuICAyMDpcdFx0ICBpcHRhYmxlcyBpcyBhIGxlZ2FjeSBwYWNrZXQgY2xhc3NpZmllci5cbiAgMjE6XHRcdCAgVGhpcyBpcyBub3QgbmVlZGVkIGlmIHlvdSBhcmUgdXNpbmcgaXB0YWJsZXMgb3ZlciBuZnRhYmxlc1xuICAyMjpcdFx0ICAoaXB0YWJsZXMtbmZ0KS5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkZfU09DS0VUX0lQVjRcbiAgMjU6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgc29ja2V0IGxvb2t1cCBzdXBwb3J0XCYjMzQ7XG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc29ja2V0IGxvb2t1cCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc1xuICAyODpcdFx0ICBpcyByZXF1aXJlZCBieSB0aGUge2lwLG5mfXRhYmxlcyBzb2NrZXQgbWF0Y2guXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIE5GX1RQUk9YWV9JUFY0XG4gIDMxOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY0IHRwcm94eSBzdXBwb3J0XCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0aWYgTkZfVEFCTEVTXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIE5GX1RBQkxFU19JUFY0XG4gIDM2Olx0XHRib29sIFwmIzM0O0lQdjQgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGhlbHBcbiAgMzg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgSVB2NCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDM5Olx0XG4gIDQwOlx0aWYgTkZfVEFCTEVTX0lQVjRcbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XG4gIDQzOlx0XHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcbiAgNDQ6XHRcdGRlZmF1bHQgTkZUX1JFSkVDVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGluaXRpYWwgdGhvdWdodCwgYXMgSSBzZWUgaXQsIGlzIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAuICBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gIE15IGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBsZWdhY3kgY29tcG9uZW50IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyBkaXJlY3RseSB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdGhlIEtjb25maWcgZmlsZSB0byByZXZlYWwgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCBhcyBhIG1vZHVsZSwgYWxvbmcgd2l0aCBhbnkgZGVwZW5kZW5jaWVzIG9yIGhlbHAgdGV4dC4gIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXR1cyBvZiBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCBpcyBjcnVjaWFsLCBiZWNhdXNlIGl0IGFsbW9zdCBjZXJ0YWlubHkgaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiBvbGRlciBpcHRhYmxlcyBmdW5jdGlvbmFsaXRpZXMsIGFuZCBtYXkgYmUgYSBmYWN0b3Igd2hlbiBkZWFsaW5nIHdpdGggY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHN5c3RlbXMgb3IgYXBwbGljYXRpb25zIHRoYXQgcmVseSBvbiBsZWdhY3kgZXh0ZW5zaW9ucy4gVWx0aW1hdGVseSwgdGhpcyBpcyB0aGUgZm91bmRhdGlvbmFsIHN0ZXAgYmVmb3JlIGZ1cnRoZXIgYW5hbHlzaXM7IEkgbmVlZCB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgdG8gZHJpdmUgdGhlIHN1YnNlcXVlbnQgcXVlc3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NDM9Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0NTpcdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDYtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MTQ9Y29uZmlnIElQX05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE3LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTg6XHRkZWZhdWx0XHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTktXHRoZWxwXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzI3PWNvbmZpZyBJUF9ORl9BUlBUQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBBUlBUQUJMRVMgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzI5Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMzMC1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zNDM9Y29uZmlnIElQX05GX0FSUEZJTFRFUlxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0Ni1cdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0FSUFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0OC1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0xMD1jb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSVBWNiBcdTAwMjZcdTAwMjYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE0Olx0ZGVmYXVsdFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE1LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03Mzg9Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ3OmNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDgtXHRib29sIFwmIzM0O05ldGZpbHRlciBsZWdhY3kgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTQxND1FWFBPUlRfU1lNQk9MX0dQTCh4dF90ZWVfZW5hYmxlZCk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQxNS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNDE2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQxNy1ERUZJTkVfUEVSX0NQVShzZXFjb3VudF90LCB4dF9yZWNzZXEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0yMDk1PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3Byb3RvX2ZpbmkpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIwOTYtXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjA5NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIwOTgtLyoqXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTIxODQ9c3RhdGljIGludCBfX2luaXQgeHRfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMTg4LVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjIxODk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZKSkge1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIxOTAtXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjUwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgVGFibGUgRW50cnkgUmV0cmlldmFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGZpbHRlciB0YWJsZSBlbnRyaWVzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIEFSUCwgSVB2NCwgYW5kIElQdjYgdGFibGVzOiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLgoKRmlyc3QsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgaW4gZWFjaCBmaWxlIHRoYXQgc2VlbSByZWxldmFudC4gSW4gYGFycF90YWJsZXMuY2AsIEkgc2VlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGFuZCBgZ2V0X2VudHJpZXNgLiBUaGVzZSBhcmUgYWxsIHN0YXRpYywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZWlyIGNhbGxlcnMgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkLiBMb29rcyBsaWtlIHRoZSBjYWxsZXIgZm9yIGBnZXRfaW5mb2AgYW5kIGBnZXRfZW50cmllc2AgaXMgYGRvX2FycHRfZ2V0X2N0bGAuIEdvb2QsIHRoYXQgbmFycm93cyBpdCBkb3duLgoKTm93LCBsb29raW5nIGF0IGBpcF90YWJsZXMuY2AsIEkmIzM5O3ZlIGdvdCBhIHNpbWlsYXIgc2V0OiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLiBBZGRpdGlvbmFsbHksIEkgc2VlIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2dldF9lbnRyaWVzYCwgbGlrZWx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdXNlcnNwYWNlIGludGVyZmFjZXMuIFRoZSBjYWxsZXJzIGhlcmUgYXJlIGBkb19pcHRfZ2V0X2N0bGAgYW5kIGBjb21wYXRfZG9faXB0X2dldF9jdGxgLgoKRmluYWxseSwgYGlwNl90YWJsZXMuY2AgbWlycm9ycyB0aGUgSVB2NCBzdHJ1Y3R1cmUgd2l0aCBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYCwgYW5kIGBjb21wYXRfZ2V0X2VudHJpZXNgLiBUaGVpciBjYWxsZXJzIGFyZSBgZG9faXA2dF9nZXRfY3RsYCBhbmQgYGNvbXBhdF9kb19pcDZ0X2dldF9jdGxgLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gYW5hbHl6ZSB0aGVzZSBgZG9fKl9nZXRfY3RsYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSByZXRyaWV2YWwgYW5kIGNvcHlpbmcgcHJvY2VzcyBpcyBsaWtlbHkgaW5pdGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlaXIgaW1wbGVtZW50YXRpb25zIGluIGVhY2ggcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9faXB0X2dldF9jdGx8ZG9fYXJwdF9nZXRfY3RsfGRvX2lwNnRfZ2V0X2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz05ODQ9c3RhdGljIGludCBkb19hcnB0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtMTAwOS1cbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmM6MTAxMDpzdGF0aWMgaW50IGRvX2FycHRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtMTAxMS17XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz0xMTMxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgYXJwdF9zb2Nrb3B0cyA9IHtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTExMzctXHQuZ2V0X29wdG1heFx0PSBBUlBUX1NPX0dFVF9NQVgmIzQzOzEsXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jOjExMzg6XHQuZ2V0XHRcdD0gZG9fYXJwdF9nZXRfY3RsLFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy0xMTM5LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE2NzE9c3RhdGljIGludFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE2NzI6ZG9faXB0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTY3My17XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE4MDk9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBpcHRfc29ja29wdHMgPSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE4MTUtXHQuZ2V0X29wdG1heFx0PSBJUFRfU09fR0VUX01BWCYjNDM7MSxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYzoxODE2Olx0LmdldFx0XHQ9IGRvX2lwdF9nZXRfY3RsLFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE4MTctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTE2ODU9c3RhdGljIGludFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxNjg2OmRvX2lwNnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTY4Ny17XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xODI0PXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXA2dF9zb2Nrb3B0cyA9IHtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE4MzAtXHQuZ2V0X29wdG1heFx0PSBJUDZUX1NPX0dFVF9NQVgmIzQzOzEsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE4MzE6XHQuZ2V0XHRcdD0gZG9faXA2dF9nZXRfY3RsLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xODMyLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODY2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBnZXRfY3RsYCBpbiBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBjb21wYXJlIHRoZSBgZ2V0X2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCBzb3VyY2UgZmlsZXMuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY3Jvc3MtZXhhbWluYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGlmZmVyZW5jZXMgb3Igc2ltaWxhcml0aWVzIGluIGhvdyBJUHY0IGFuZCBJUHY2IGNvbnRyb2wgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgTmV0ZmlsdGVyIGxldmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB0YWJsZXMgdGhlbXNlbHZlcy4gSXMgdGhlcmUgc29tZSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jeSBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW0gSSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGJ1Zywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCBvciB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIGRlc2lnbiBkZWNpc2lvbj8gSXTigJlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZWlyIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZXRyaWV2ZSBjb250cm9sIHN0cnVjdHVyZXMsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcnVsZSBtYW5pcHVsYXRpb24gb3IgdGFibGUgbWFuYWdlbWVudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYW55IGRpZmZlcmVuY2VzIGluIHRoZSBrZXJuZWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcGF0LipnZXRfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIzOTQ9c3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MTMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MTQ6c3RhdGljIGludCBjb21wYXRfZG9fZWJ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNDE1LVx0XHR2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNDg3PXN0YXRpYyBpbnQgZG9fZWJ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTAzLVx0ICAgICAqbGVuICE9IHNpemVvZih0bXApKSlcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjUwNDpcdFx0cmV0dXJuIGNvbXBhdF9kb19lYnRfZ2V0X2N0bChzaywgY21kLCB1c2VyLCBsZW4pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTA1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM5OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIGBjb21wYXRfZ2V0X2VudHJpZXNgIENhbGxzIGluIGlwdGFibGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY29tcGF0X2dldF9lbnRyaWVzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlwX3RhYmxlcy5jYCBhbmQgYGlwNl90YWJsZXMuY2AgY29kZWJhc2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZD8gV2hhdCBpcyB0aGUgY29udGV4dD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29tcGF0aWJpbGl0eS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGlwdGFibGVzIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgcHVycG9zZSB0aGV5IHNlcnZlIGFuZCB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgdGhleSBhZGRyZXNzLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24gb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyBhIGNvZGUgZGl2ZSB0byBpZGVudGlmeSBldmVyeSBpbnN0YW5jZSBvZiBhIGBjb21wYXRfZ2V0X2VudHJpZXNgIGludm9jYXRpb24uIFRoaXMgd2lsbCBzZXJ2ZSBhcyB0aGUgZm91bmRhdGlvbiBvZiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcGF0X2dldF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTU4OT1zdGF0aWMgaW50XG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTU5MDpjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTU5MS1cdFx0ICAgaW50ICpsZW4pXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE2NzI9ZG9faXB0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTE2ODgtXHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE2ODk6XHRcdFx0cmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTtcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNjkwLVx0XHRlbHNlXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xNjAzPXN0YXRpYyBpbnRcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTYwNDpjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjA1LVx0XHQgICBpbnQgKmxlbilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTE2ODY9ZG9faXA2dF9nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTcwMi1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE3MDM6XHRcdFx0cmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTcwNC1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIFRhYmxlIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlc2UgbmV0ZmlsdGVyIHRhYmxlIGltcGxlbWVudGF0aW9ucy4gRmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZGVhbCB3aXRoIGluIHRoZSB0aHJlZSBDIGZpbGVzOiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLiAgSSYjMzk7bSBzZWVpbmcgYSBjb25zaXN0ZW50IHBhdHRlcm4gb2YgYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9pbmZvYCwgYW5kIGBnZXRfZW50cmllc2AgYWNyb3NzIGFsbCBvZiB0aGVtLiBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCBhbHNvIGhhdmUgdGhvc2UgJiMzNDtjb21wYXQmIzM0OyB2ZXJzaW9ucyBhbmQgdGhlIGBkb18qX2dldF9jdGxgIHZhcmlhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLCBvciBwZXJoYXBzIHRoZSBjYWxsZXJzIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuCgpUaGVyZWZvcmUsIHRoZSBzeW1ib2xzIG9mIGltbWVkaWF0ZSBpbnRlcmVzdCBhcmU6IGBkb19pcHRfZ2V0X2N0bGAsIGBjb21wYXRfZ2V0X2VudHJpZXNgLCBgZ2V0X2VudHJpZXNgLCBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZG9fYXJwdF9nZXRfY3RsYCwgYW5kIGBkb19pcDZ0X2dldF9jdGxgLiAgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGF0IHRob3NlICYjMzk7Y29tcGF0JiMzOTsgc3ltYm9scywgYW5kIHRoZSAmIzM5O2dldCYjMzk7IGFuZCAmIzM5O2NvcHkmIzM5OyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRpc3RpbmN0LgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlc2UgZnVuY3Rpb25zOiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYCwgYGNvbXBhdF9nZXRfZW50cmllc2AsIGBkb19hcnB0X2dldF9jdGxgLCBgZG9faXB0X2dldF9jdGxgLCBhbmQgYGRvX2lwNnRfZ2V0X2N0bGAuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgbGlrZSBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCwgYElQX05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZYCwgYElQX05GX0FSUFRBQkxFU2AsIGFuZCBgTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUYC4gVGltZSB0byBjb25maXJtIHRoYXQmIzM5O3MgYWN0dWFsbHkgdGhlIGNhc2UuCgpPa2F5LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhvc2UgaW4gdGhlIEtjb25maWcgZmlsZXMuCgpSaWdodCwgbm93IHRoZSBjcnVjaWFsIHN0ZXA6IGNoZWNraW5nIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciB0aGVzZS4gSW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGBORVRGSUxURVJfWFRBQkxFU2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgYW5kIGBORVRGSUxURVJfWFRBQkxFU2AgYW5kIGBJUF9ORl9JUFRBQkxFU2AuICBIbW0sIGlzIGBJUF9ORl9JUFRBQkxFU2AgYSBtZW51IG9yIGEgY29uZmlnPyBMZXQgbWUgY2hlY2sgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBhZ2Fpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE5GX0RFRlJBR19JUFY0XG4gIDEwOlx0XHR0cmlzdGF0ZVxuICAxMTpcdFx0ZGVmYXVsdCBuXG4gIDEyOlx0XG4gIDEzOlx0IyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxuICAxNDpcdGNvbmZpZyBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBJUCB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbiAgMTc6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbiAgMTg6XHRcdGRlZmF1bHRcdG0gaWYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIGlwdGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxuICAyMTpcdFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXG4gIDIyOlx0XHQgIChpcHRhYmxlcy1uZnQpLlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORl9TT0NLRVRfSVBWNFxuICAyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MTMKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogNDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIvWHRhYmxlcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaGVyZSBkZWFsaW5nIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdXNlci1zcGFjZSBhbmQga2VybmVsLXNwYWNlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyL1h0YWJsZXMgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzb2Nrb3B0IHJldHJpZXZhbCBoYW5kbGVycyBpbiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLiBUaGUgY29yZSBpc3N1ZSBhcHBlYXJzIHRvIGJlIGFyb3VuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBwYWdlIGZhdWx0cyBkdXJpbmcgdGhlIGNvcHlpbmcgb2YgZW50cmllcyB0byB1c2VyIHNwYWNlLCBhbGwgd2hpbGUgZGVhbGluZyB3aXRoIHRhYmxlIGxvY2tzLgoKSSYjMzk7dmUgbm90ZWQgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGFyZSBpbXBvcnRhbnQgaGVyZTogYE5FVEZJTFRFUl9YVEFCTEVTYCwgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgLCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQgcG90ZW50aWFsbHkgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAg4oCTIHRoZXNlIGFyZSBjbGVhcmx5IHJlbGV2YW50IHRvIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgcXVpY2tseSBjaGVja2VkIGZvciB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLCBidXQgYWxsIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGFyZSBzcGVjaWZpYyB0byBuZXRmaWx0ZXIgYW5kIHh0YWJsZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGludHJvZHVjaW5nIGNoYW5nZXMgdG8gaG93IHRoZSBjb2RlIGNvcGllcyBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IGRpc2FibGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgY29weSBvcGVyYXRpb24sIHdoaWNoIGlzIHNtYXJ0LCBidXQgSSYjMzk7bSBndWVzc2luZyBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtLiBgZmF1bHRfaW5fd3JpdGVhYmxlKClgIHNvdW5kcyBsaWtlIGEgY2xldmVyIHdheSB0byBoYW5kbGUgd3JpdGUgZmF1bHRzLiBBbHNvIHRoZSBtb3ZlbWVudCBvZiB1c2VyIGNvcHlpbmcgb3V0c2lkZSBvZiBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGxvb2tzIGxpa2UgYSBnb29kIHN0ZXAuCgpUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgdGhlIG5ldGZpbHRlciBjb3JlIGxvZ2ljIHdvcmtzLiBUaGlzIHNvcnQgb2YgY2hhbmdlIHdhcnJhbnRzIHRob3JvdWdoIHRlc3RpbmcuIEkgdGhpbmsgZnV6emluZyBpcyBlc3NlbnRpYWwgaGVyZS4gV2UgbmVlZCB0byBleHBvc2UgYW55IHBvdGVudGlhbCBlcnJvciBwYXRocyBvciBpc3N1ZXMgd2l0aCBob3cgcGFnZSBmYXVsdHMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIG1hbmlwdWxhdGluZyBkYXRhIHVuZGVyIHRoZXNlIHRhYmxlIGxvY2tzLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQsIEkgd2lsbCB1c2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9JUFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUF9ORl9BUlBUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfQ09NUEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9lbnRyaWVzX3RvX3VzZXImIzM0OywKICAgICYjMzQ7Z2V0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7Z2V0X2luZm8mIzM0OywKICAgICYjMzQ7Y29tcGF0X2NvcHlfZW50cmllc190b191c2VyJiMzNDssCiAgICAmIzM0O2NvbXBhdF9nZXRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtkb19pcHRfZ2V0X2N0bCYjMzQ7LAogICAgJiMzNDtkb19pcDZ0X2dldF9jdGwmIzM0OywKICAgICYjMzQ7ZG9fYXJwdF9nZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tvcHQgcmV0cmlldmFsIHBhdGhzIGluIGxlZ2FjeSBhcnBfdGFibGVzLCBpcF90YWJsZXMsIGFuZCBpcDZfdGFibGVzLiBJdCBhZGRzIHBhZ2VmYXVsdF9kaXNhYmxlKCkvcGFnZWZhdWx0X2VuYWJsZSgpIGFyb3VuZCB1c2VyIGNvcGllcyB3aGlsZSBob2xkaW5nIHh0X3RhYmxlIGxvY2tzLCBhZGRzIGZhdWx0X2luX3dyaXRlYWJsZSgpIHJldHJ5IGhhbmRsaW5nIGluIGdldF9lbnRyaWVzL2NvbXBhdF9nZXRfZW50cmllcywgYW5kIG1vdmVzIGNvcHlfdG9fdXNlciBvdXRzaWRlIGNyaXRpY2FsIGxvY2sgc2VjdGlvbnMgaW4gZ2V0X2luZm8uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZywgcGFnZSBmYXVsdCwgYW5kIGVycm9yIGhhbmRsaW5nIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0lQX05GX0lQVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtJUDZfTkZfSVBUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0lQX05GX0FSUFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19DT01QQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X2VudHJpZXNfdG9fdXNlciYjMzQ7LAogICAgJiMzNDtnZXRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtnZXRfaW5mbyYjMzQ7LAogICAgJiMzNDtjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXImIzM0OywKICAgICYjMzQ7Y29tcGF0X2dldF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2RvX2lwdF9nZXRfY3RsJiMzNDssCiAgICAmIzM0O2RvX2lwNnRfZ2V0X2N0bCYjMzQ7LAogICAgJiMzNDtkb19hcnB0X2dldF9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja29wdCByZXRyaWV2YWwgcGF0aHMgaW4gbGVnYWN5IGFycF90YWJsZXMsIGlwX3RhYmxlcywgYW5kIGlwNl90YWJsZXMuIEl0IGFkZHMgcGFnZWZhdWx0X2Rpc2FibGUoKS9wYWdlZmF1bHRfZW5hYmxlKCkgYXJvdW5kIHVzZXIgY29waWVzIHdoaWxlIGhvbGRpbmcgeHRfdGFibGUgbG9ja3MsIGFkZHMgZmF1bHRfaW5fd3JpdGVhYmxlKCkgcmV0cnkgaGFuZGxpbmcgaW4gZ2V0X2VudHJpZXMvY29tcGF0X2dldF9lbnRyaWVzLCBhbmQgbW92ZXMgY29weV90b191c2VyIG91dHNpZGUgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBpbiBnZXRfaW5mby4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nLCBwYWdlIGZhdWx0LCBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXG5cbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJiMzOTtmYXVsdGVkJiMzOTsgYW5kICYjMzk7cmV0JiMzOTsgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNjozOTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IGRiMzA3ZmE0OWYzZjYuLjdiNDMyNjlhYTZiMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCkBAIC02OTUsNiAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCiAKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0mZ3Q7ZW50cmllczsKIAomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCS8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi8KIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgJmx0OyB0b3RhbF9zaXplOyBvZmYgJiM0Mzs9IGUtJmd0O25leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXsKQEAgLTcxOSwxMiAmIzQzOzcyMSwxNCBAQCBzdGF0aWMgaW50IGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTczOCw3ICYjNDM7NzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAluYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAmIzM5O1wwJiMzOTs7CiAJdCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBhcnB0X2dldGluZm8gaW5mbzsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwogCiAJCW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC03NTEsMTUgJiM0Mzs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gMDsKJiM0MzsJCXJldCA9IDA7CiAJCXh0X3RhYmxlX3VubG9jayh0KTsKIAkJbW9kdWxlX3B1dCh0LSZndDttZSk7CiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBjb3B5X3RvX3VzZXIodXNlciwgJmFtcDtpbmZvLCAqbGVuKSAhPSAwKQomIzQzOwkJcmV0ID0gLUVGQVVMVDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjksNiAmIzQzOzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBnZXQ7CiAJc3RydWN0IHh0X3RhYmxlICp0OwomIzQzOwlib29sIGZhdWx0ZWQgPSBmYWxzZTsKIAogCWlmICgqbGVuICZsdDsgc2l6ZW9mKGdldCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc5LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgZ2V0Lm5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKQEAgLTc5NCw2ICYjNDM7Nzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIodCk7CiAKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb2NfZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVtYXNrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oJmd0OwpAQCAtODI0LDYgJiM0Mzs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLSZndDtlbnRyaWVzOwogCiYjNDM7CXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJLyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqLwogCS8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi8KIAlmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiAmbHQ7IHRvdGFsX3NpemU7IG9mZiAmIzQzOz0gZS0mZ3Q7bmV4dF9vZmZzZXQsIG51bSYjNDM7JiM0MzspewpAQCAtODYxLDYgJiM0Mzs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKIAl9CiAKICBmcmVlX2NvdW50ZXJzOgomIzQzOwlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CiB9CkBAIC05NDMsNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sCiAKIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiB7CiYjNDM7CXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk2MCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpOwogCWlmICghSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwogCQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVAogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CkBAIC05ODEsMTAgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCQlpbmZvLnNpemUgPSBwcml2YXRlLSZndDtzaXplOwogCQlzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtOTk0LDYgJiM0Mzs5OTQsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKQogCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKQogCQl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNCw2ICYjNDM7MTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDEzLDYgJiM0MzsxMDE2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LSZndDtwcml2YXRlOwpAQCAtMTAyNyw2ICYjNDM7MTAzMSwxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTYxLDEyICYjNDM7MTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU3OSw2ICYjNDM7MTU5Myw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAlpbnQgcmV0OwogCXN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiYjNDM7CWJvb2wgZmF1bHRlZCA9IGZhbHNlOwogCiAJaWYgKCpsZW4gJmx0OyBzaXplb2YoZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTkxLDYgJiM0MzsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQpOwogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKCFJU19FUlIodCkpIHsKQEAgLTE2MTAsNiAmIzQzOzE2MjYsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTsKJiM0MzsJaWYgKHJldCA9PSAtRUZBVUxUICZhbXA7JmFtcDsgIWZhdWx0ZWQpIHsKJiM0MzsJCWZhdWx0ZWQgPSB0cnVlOwomIzQzOwkJaWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLSZndDtlbnRyeXRhYmxlLAomIzQzOwkJCQkgICAgICAgZ2V0LnNpemUpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1bWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgmZ3Q7CkBAIC04NDUsNiAmIzQzOzg0Niw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtJmd0O2VudHJpZXM7CiAKJiM0MzsJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAkvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovCiAJLyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqLwogCWZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmICZsdDsgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLSZndDtuZXh0X29mZnNldCwgbnVtJiM0MzsmIzQzOyl7CkBAIC04ODIsNiAmIzQzOzg4NCw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAogCX0KIAogIGZyZWVfY291bnRlcnM6CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2NCw2ICYjNDM7OTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKIAogc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIHsKJiM0MzsJc3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvOwogCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAJaW50IHJldDsKQEAgLTk4MSw3ICYjNDM7OTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKICNlbmRpZgogCXQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewotCQlzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0mZ3Q7cHJpdmF0ZTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUCiAJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKQEAgLTEwMDIsMTAgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbikKIAkJaW5mby5zaXplID0gcHJpdmF0ZS0mZ3Q7c2l6ZTsKIAkJc3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmYW1wO2luZm8sICpsZW4pICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSAwOwomIzQzOwkJcmV0ID0gMDsKIAogCQl4dF90YWJsZV91bmxvY2sodCk7CiAJCW1vZHVsZV9wdXQodC0mZ3Q7bWUpOwpAQCAtMTAxNSw2ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pCiAJaWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpCiAJCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpOwogI2VuZGlmCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgY29weV90b191c2VyKHVzZXIsICZhbXA7aW5mbywgKmxlbikgIT0gMCkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAyNSw2ICYjNDM7MTAyNyw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCWludCByZXQ7CiAJc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMzUsNiAmIzQzOzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwKIAogCWdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICYjMzk7XDAmIzM5OzsKIAomIzQzOyByZXRyeToKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtJmd0O3ByaXZhdGU7CkBAIC0xMDQ5LDYgJiM0MzsxMDUzLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCX0gZWxzZQogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTc1LDEyICYjNDM7MTU4NywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAKIAlwb3MgPSB1c2VycHRyOwogCXNpemUgPSB0b3RhbF9zaXplOwomIzQzOwlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS0mZ3Q7ZW50cmllcywgdG90YWxfc2l6ZSkgewogCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZhbXA7cG9zLAogCQkJCQkJJmFtcDtzaXplLCBjb3VudGVycywgaSYjNDM7JiM0MzspOwogCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAl9CiYjNDM7CXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTU5Myw2ICYjNDM7MTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCiAJaW50IHJldDsKIAlzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgZ2V0OwogCXN0cnVjdCB4dF90YWJsZSAqdDsKJiM0MzsJYm9vbCBmYXVsdGVkID0gZmFsc2U7CiAKIAlpZiAoKmxlbiAmbHQ7IHNpemVvZihnZXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2MDUsNiAmIzQzOzE2MjAsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCiAJZ2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7IHJldHJ5OgogCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTsKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTsKIAlpZiAoIUlTX0VSUih0KSkgewpAQCAtMTYyNCw2ICYjNDM7MTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAogCQlyZXQgPSBQVFJfRVJSKHQpOwogCiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7CiYjNDM7CWlmIChyZXQgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICFmYXVsdGVkKSB7CiYjNDM7CQlmYXVsdGVkID0gdHJ1ZTsKJiM0MzsJCWlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci0mZ3Q7ZW50cnl0YWJsZSwKJiM0MzsJCQkJICAgICAgIGdldC5zaXplKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDk1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEFkZHJlc3NpbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBhbmQgRmF1bHRzIGluIE5ldGZpbHRlciBUYWJsZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBjb3JlIE5ldGZpbHRlciB0YWJsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHksIEkgYmVsaWV2ZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBjaGFuZ2VzIGFyb3VuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gcHJvYmxlbXMuIExldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKRmlyc3QsIGluIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIHRoZSBjb2RlIG5vdyB3cmFwcyB0aGUgZW50cnkgY29weSBsb29wIHdpdGggYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGFuZCBgcGFnZWZhdWx0X2VuYWJsZSgpYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byBwcmV2ZW50IHBhZ2UgZmF1bHRzIGR1cmluZyB0aGlzIGNyaXRpY2FsIG9wZXJhdGlvbiwgbGlrZWx5IHdoZW4gYWNjZXNzaW5nIHVzZXItc3BhY2UgbWVtb3J5LCBlbnN1cmluZyBhdG9taWNpdHkgYW5kIHByZXZlbnRpbmcgdW5leHBlY3RlZCBpbnRlcnJ1cHRpb25zLiBJIHVuZGVyc3RhbmQgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGludGVycnVwdGlvbnMgYW5kIHN1YnNlcXVlbnQgcmFjZSBjb25kaXRpb25zLgoKTm93LCB0aGUgYGdldF9pbmZvYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgbWFpbiBjaGFuZ2UgaGVyZSBpcyB0aGUgbW92ZW1lbnQgb2YgdGhlIGBpbmZvYCBzdHJ1Y3QgYW5kIGBjb3B5X3RvX3VzZXIoKWAgY2FsbC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgY29kZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGBpbmZvYCBzdHJ1Y3QgKndpdGhpbiogYW4gYGlmICghSVNfRVJSKHQpKWAgYmxvY2ssIHdoZXJlIGB0YCBpcyBhIHRhYmxlIHBvaW50ZXIuIEhvd2V2ZXIsIHRoZSBzdWJzZXF1ZW50IGBjb3B5X3RvX3VzZXIoKWAgY2FsbCwgd2hpY2ggc2VuZHMgdGhhdCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHN0cnVjdCB0byB1c2VyIHNwYWNlLCAqd2FzKiBvdXRzaWRlIG9mIHRoYXQgYGlmYCBibG9jaywgYnV0IG5vdyBpdCBoYXMgYmVlbiBtb3ZlZCBhbmQgaXMgZ3VhcmRlZCBieSBgaWYgKCFyZXQgJmFtcDsmYW1wOyAuLi4pYAoKVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZy4gVGhlIGBpbmZvYCBzdHJ1Y3QgaXMgb25seSBwb3B1bGF0ZWQgaWYgdGhlIHRhYmxlIGxvb2t1cCBzdWNjZWVkcyAoYCFJU19FUlIodClgKS4gTm93LCB3aGlsZSB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCBpcyBnYXRlZCBieSBgIXJldGAsIGVuc3VyaW5nIHRoYXQgY29weSB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gYHJldCA9PSAwYCAoaS5lLiBzdWNjZXNzKSwgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIGlmIGByZXRgIGlzIG1vZGlmaWVkIHNvbWV3aGVyZSBlbHNlIHdpdGhpbiB0aGUgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGNhdXNlIGEgYGNvcHlfdG9fdXNlcigpYCB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGlzIGlzIG5vdCBpZGVhbCwgYW5kIEkgYmV0IHRoYXQgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGRhdGEgY29ycnVwdGlvbi4KClRvIGJlIHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gaW4gYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYCwgdG8gZW5zdXJlIHRoYXQgYHJldGAgaXMgKm9ubHkqIG1vZGlmaWVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIHRhYmxlIGxvb2t1cC4KCkZpbmFsbHksIHRoZSBgZ2V0X2VudHJpZXNgIGZ1bmN0aW9uIGFkZHMgYHJldHJ5YCBsb2dpYyB1c2luZyBgZmF1bHRfaW5fd3JpdGVhYmxlYC4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHBvdGVudGlhbCB3cml0ZSBmYXVsdHMgZHVyaW5nIHRoZSBjb3B5aW5nIG9mIGVudHJpZXMsIGxpa2VseSB0byB1c2VyLXNwYWNlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBmYXVsdF9pbl93cml0ZWFibGVgIGlzIHRoZXJlIHRvIGhhbmRsZSB0aGUgc2NlbmFyaW9zIHdoZXJlIHdyaXRlcyB0byB1c2VyIHNwYWNlIGNvdWxkIGZhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzI1Olx0XHR2ZnJlZShjb3VudGVycyk7XG4gNzI2Olx0XHRyZXR1cm4gcmV0O1xuIDcyNzpcdH1cbiA3Mjg6XHRcbiA3Mjk6XHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIDczMDpcdHtcbiA3MzE6XHRcdHN0cnVjdCBhcnB0X2dldGluZm8gaW5mbztcbiA3MzI6XHRcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiA3MzM6XHRcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiA3MzQ6XHRcdGludCByZXQ7XG4gNzM1Olx0XG4gNzM2Olx0XHRpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGFycHRfZ2V0aW5mbykpXG4gNzM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDczODpcdFxuIDczOTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIHVzZXIsIHNpemVvZihuYW1lKSkgIT0gMClcbiA3NDA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzQxOlx0XG4gNzQyOlx0XHRuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAmIzM5O1xcMCYjMzk7O1xuIDc0MzpcdFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xuIDc0NDpcdFx0aWYgKCFJU19FUlIodCkpIHtcbiA3NDU6XHRcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gNzQ2Olx0XG4gNzQ3Olx0XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuIDc0ODpcdFx0XHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cdTAwM2V2YWxpZF9ob29rcztcbiA3NDk6XHRcdFx0bWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS1cdTAwM2Vob29rX2VudHJ5LFxuIDc1MDpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8uaG9va19lbnRyeSkpO1xuIDc1MTpcdFx0XHRtZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtXHUwMDNldW5kZXJmbG93LFxuIDc1MjpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8udW5kZXJmbG93KSk7XG4gNzUzOlx0XHRcdGluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLVx1MDAzZW51bWJlcjtcbiA3NTQ6XHRcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIDc1NTpcdFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gNzU2Olx0XG4gNzU3Olx0XHRcdHJldCA9IDA7XG4gNzU4Olx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiA3NTk6XHRcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiA3NjA6XHRcdH0gZWxzZVxuIDc2MTpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIDc2MjpcdFxuIDc2MzpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuIDc2NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDc2NTpcdFx0cmV0dXJuIHJldDtcbiA3NjY6XHR9XG4gNzY3Olx0XG4gNzY4Olx0c3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiA3Njk6XHRcdFx0ICAgICAgIGNvbnN0IGludCAqbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGlwX3RhYmxlcy5jYCoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBpbmZvcm1hdGlvbiBpcyBiZWluZyByZXRyaWV2ZWQuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBgaXBfdGFibGVzLmNgIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uIG9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWFsaW5nIHdpdGggcmV0dXJuaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGtlcm5lbCBzcGFjZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUgaGFwcGVuaW5nIC0gdGhlIGFjdHVhbCByZXRyaWV2YWwgb2YgdGhlIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBpdCwgc3RhcnRpbmcgd2l0aCB0aGF0IGBnZXRfaW5mb2AgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIHJlcXVlc3RzIGFuZCBob3cgaXQgcGFja2FnZXMgYW5kIHJldHVybnMgdGhlIHJlbGV2YW50IGRldGFpbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGF0dGVudGlvbiBmb3Igb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHQjZW5kaWZcbiA5NDY6XHRcbiA5NDc6XHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIDk0ODpcdHtcbiA5NDk6XHRcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xuIDk1MDpcdFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIDk1MTpcdFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIDk1MjpcdFx0aW50IHJldDtcbiA5NTM6XHRcbiA5NTQ6XHRcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldGluZm8pKVxuIDk1NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5NTY6XHRcbiA5NTc6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApXG4gOTU4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDk1OTpcdFxuIDk2MDpcdFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJiMzOTtcXDAmIzM5OztcbiA5NjE6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIDk2MjpcdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4gOTYzOlx0XHRcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQpO1xuIDk2NDpcdCNlbmRpZlxuIDk2NTpcdFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgbmFtZSk7XG4gOTY2Olx0XHRpZiAoIUlTX0VSUih0KSkge1xuIDk2NzpcdFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiA5Njg6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIDk2OTpcdFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XG4gOTcwOlx0XG4gOTcxOlx0XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4gOTcyOlx0XHRcdFx0cmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgXHUwMDI2dG1wKTtcbiA5NzM6XHRcdFx0XHR4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTtcbiA5NzQ6XHRcdFx0XHRwcml2YXRlID0gXHUwMDI2dG1wO1xuIDk3NTpcdFx0XHR9XG4gOTc2Olx0I2VuZGlmXG4gOTc3Olx0XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuIDk3ODpcdFx0XHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cdTAwM2V2YWxpZF9ob29rcztcbiA5Nzk6XHRcdFx0bWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS1cdTAwM2Vob29rX2VudHJ5LFxuIDk4MDpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8uaG9va19lbnRyeSkpO1xuIDk4MTpcdFx0XHRtZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtXHUwMDNldW5kZXJmbG93LFxuIDk4MjpcdFx0XHQgICAgICAgc2l6ZW9mKGluZm8udW5kZXJmbG93KSk7XG4gOTgzOlx0XHRcdGluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLVx1MDAzZW51bWJlcjtcbiA5ODQ6XHRcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIDk4NTpcdFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gOTg2Olx0XG4gOTg3Olx0XHRcdHJldCA9IDA7XG4gOTg4Olx0XG4gOTg5Olx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiA5OTA6XHRcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiA5OTE6XHRcdH0gZWxzZVxuIDk5MjpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIDk5MzpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gOTk0Olx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbiA5OTU6XHRcdFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcbiA5OTY6XHQjZW5kaWZcbiA5OTc6XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbiA5OTg6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiA5OTk6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUHY0IENvbXBhdCBUYWJsZSBJbmZvcm1hdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgaXBfdGFibGVzLmNgIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb21wYXRpYmlsaXR5IGhhbmRsaW5nIHdvcmtzLiBPa2F5LCBJIHNlZSB0aGUgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBjaGVja3MgZm9yIGBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUYCBhbmQsIHdpdGhpbiBpdCwgYGluX2NvbXBhdF9zeXNjYWxsKClgLiBOb3cgSSBzZWUgdGhlIGNydWNpYWwgcGFydDogdGhlIGBjb21wYXRfdGFibGVfaW5mb2AgZnVuY3Rpb24hCgpCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgaWYgYGNvbXBhdF90YWJsZV9pbmZvYCAqZmFpbHMqPyBUaGUgY29kZSBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGhhbmRsZSBhIHBvdGVudGlhbCBlcnJvciByZXR1cm4uIEl0IGNoZWNrcyBmb3IgYElTX0VSUih0KWAsIGJ1dCB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGFuIGVxdWl2YWxlbnQgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbXBhdF90YWJsZV9pbmZvYCBpdHNlbGYgYmVmb3JlIHRoYXQgYHByaXZhdGUgPSAmYW1wO3RtcDtgIGFzc2lnbm1lbnQuIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGNvbXBhdF90YWJsZV9pbmZvYCB0byB1bmRlcnN0YW5kIGl0cyBlcnJvciBiZWhhdmlvciBhbmQgc2VlIGlmIHRoaXMgcmVxdWlyZXMgYSBmaXguIEEgcmV0dXJuIG9mIGFuIGVycm9yIHdvdWxkIGhhdmUgYmVlbiBhIHNpZ25pZmljYW50IHByb2JsZW0uIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyNTpcdFx0Y29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeTtcbiA5MjY6XHRcdGludCByZXQ7XG4gOTI3Olx0XG4gOTI4Olx0XHRpZiAoIW5ld2luZm8gfHwgIWluZm8pXG4gOTI5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDkzMDpcdFxuIDkzMTpcdFx0Lyogd2UgZG9udCBjYXJlIGFib3V0IG5ld2luZm8tXHUwMDNlZW50cmllcyAqL1xuIDkzMjpcdFx0bWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7XG4gOTMzOlx0XHRuZXdpbmZvLVx1MDAzZWluaXRpYWxfZW50cmllcyA9IDA7XG4gOTM0Olx0XHRsb2NfY3B1X2VudHJ5ID0gaW5mby1cdTAwM2VlbnRyaWVzO1xuIDkzNTpcdFx0cmV0ID0geHRfY29tcGF0X2luaXRfb2Zmc2V0cyhBRl9JTkVULCBpbmZvLVx1MDAzZW51bWJlcik7XG4gOTM2Olx0XHRpZiAocmV0KVxuIDkzNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDkzODpcdFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBpbmZvLVx1MDAzZXNpemUpIHtcbiA5Mzk6XHRcdFx0cmV0ID0gY29tcGF0X2NhbGNfZW50cnkoaXRlciwgaW5mbywgbG9jX2NwdV9lbnRyeSwgbmV3aW5mbyk7XG4gOTQwOlx0XHRcdGlmIChyZXQgIT0gMClcbiA5NDE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDk0MjpcdFx0fVxuIDk0MzpcdFx0cmV0dXJuIDA7XG4gOTQ0Olx0fVxuIDk0NTpcdCNlbmRpZlxuIDk0NjpcdFxuIDk0NzpcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gOTQ4Olx0e1xuIDk0OTpcdFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdldF9pbmZvYCBQYXRjaDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgU2FmZXR5IGFuZCBMb2NraW5nKioKCk9rYXksIHNvIGJlZm9yZSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmJlZm9yZSogc3RhdGUgb2YgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24uIFJpZ2h0LCBoZXJlJiMzOTtzIHdoYXQgSSBzZWU6IHRoZSBvbGQgY29kZSB3YXMgcmVxdWVzdGluZyBhIHRhYmxlIGxvY2ssIHJldHJpZXZpbmcgdGFibGUgaW5mb3JtYXRpb24sIGFuZCB0aGVuIGRvaW5nIGEgYGNvcHlfdG9fdXNlcmAuIEkmIzM5O20gc2VlaW5nIHRoYXQgZXZlbiBpZiBgY29tcGF0X3RhYmxlX2luZm9gIGZhaWxlZCwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCBhbnl3YXksIHdoaWNoIHNlZW1z4oCmIHBlY3VsaWFyLiBBbmQgaW4gdGhlIG5ldyBjb2RlLCBJIG5vdGljZWQgdGhlIGxpbmUgYHJldCA9IDA7YCBzZXQgZXhwbGljaXRseSBhbmQgdGhlbiBvdmVyd3JpdHRlbiBvbmx5IG9uIGEgZmF1bHQuIENydWNpYWxseSwgYGluZm9gIGlzIGJlaW5nIGBtZW1zZXRgLWVkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgKndoeSogb2YgdGhpcyBwYXRjaC4gVGhlIGtleSBpcyBpbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gQWhhLCB0aGUgdXNlIG9mIGBwYWdlZmF1bHRfZGlzYWJsZSgpYCBhcm91bmQgdGhlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgYW5kIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGZ1bmN0aW9ucyBpcyB0aGUgZ2l2ZWF3YXkuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBnZXRfZW50cmllc2AgZnVuY3Rpb24gYXMgd2VsbC4KClRoZSBtb3RpdmF0aW9uIGhlcmUgaXMgY2xlYXI6IHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtYWtpbmcgYGNvcHlfdG9fdXNlcmAgY2FsbHMgKndoaWxlIGhvbGRpbmcgYSBsb2NrKiAobGlrZSBgeHRfdGFibGVfbG9ja2ApLiBUaGlzIGlzIGEgcG90ZW50aWFsIGRpc2FzdGVyISBXZSBjYW4gZW5kIHVwIHdpdGggZGVhZGxvY2tzLCBvciBhdCBsZWFzdCB1bmRlc2lyYWJsZSBiZWhhdmlvciBpZiBhIHBhZ2UgZmF1bHQgaGFwcGVucyB3aGlsZSB3ZSYjMzk7cmUgaW4gYW4gYXRvbWljIGNvbnRleHQgb3Igd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLiBBIHBhZ2UgZmF1bHQgZHVyaW5nIGEgYGNvcHlfdG9fdXNlcmAgY2FsbCBpbiBzdWNoIGEgc2l0dWF0aW9uIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcywgaW5jbHVkaW5nIGxvY2sgaW52ZXJzaW9uIGFuZCBpc3N1ZXMgd2l0aCBgbW1hcF9sb2NrYC4KClRoZXJlZm9yZSwgdGhlIHBhdGNoJiMzOTtzIG9iamVjdGl2ZSBpcyB0byBtb3ZlIHRoYXQgYGNvcHlfdG9fdXNlcmAgb3V0c2lkZSB0aGUgdGFibGUgbG9jayBpbiBgZ2V0X2luZm9gLCBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IGhvbGRpbmcgYW55IGxvY2tzIGR1cmluZyB0aGUgY29weS4gSW4gYGNvcHlfZW50cmllc190b191c2VyYCwgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGlzIHVzZWQgdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCB3aGlsZSB0aGUgbG9jayBpcyBoZWxkLiBJZiB3ZSBkbyBnZXQgYSAtRUZBVUxULCB0aGUgY29kZSB1bmxvY2tzLCBjaGVja3MgZm9yIGEgZmF1bHQgdXNpbmcgYGZhdWx0X2luX3dyaXRlYWJsZSgpYCwgYW5kIHJldHJpZXMuIENsZXZlci4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gc2NhbiB0aGVzZSBtb2RpZmllZCBmaWxlcywgZXNwZWNpYWxseSBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgYW55dGhpbmcgS01TQU4gbWlnaHQgZmxhZy4gQWxzbywgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGlwNl90YWJsZXMuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBoYW5kbGVkIHNpbWlsYXJseS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgcGF0Y2gsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTY1Olx0fVxuIDk2NjpcdCNlbmRpZlxuIDk2NzpcdFxuIDk2ODpcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gOTY5Olx0e1xuIDk3MDpcdFx0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xuIDk3MTpcdFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIDk3MjpcdFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIDk3MzpcdFx0aW50IHJldDtcbiA5NzQ6XHRcbiA5NzU6XHRcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXA2dF9nZXRpbmZvKSlcbiA5NzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTc3Olx0XG4gOTc4Olx0XHRpZiAoY29weV9mcm9tX3VzZXIobmFtZSwgdXNlciwgc2l6ZW9mKG5hbWUpKSAhPSAwKVxuIDk3OTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA5ODA6XHRcbiA5ODE6XHRcdG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICYjMzk7XFwwJiMzOTs7XG4gOTgyOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiA5ODM6XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIDk4NDpcdFx0XHR4dF9jb21wYXRfbG9jayhBRl9JTkVUNik7XG4gOTg1Olx0I2VuZGlmXG4gOTg2Olx0XHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgbmFtZSk7XG4gOTg3Olx0XHRpZiAoIUlTX0VSUih0KSkge1xuIDk4ODpcdFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiA5ODk6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIDk5MDpcdFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XG4gOTkxOlx0XG4gOTkyOlx0XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4gOTkzOlx0XHRcdFx0cmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgXHUwMDI2dG1wKTtcbiA5OTQ6XHRcdFx0XHR4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUNik7XG4gOTk1Olx0XHRcdFx0cHJpdmF0ZSA9IFx1MDAyNnRtcDtcbiA5OTY6XHRcdFx0fVxuIDk5NzpcdCNlbmRpZlxuIDk5ODpcdFx0XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiA5OTk6XHRcdFx0aW5mby52YWxpZF9ob29rcyA9IHQtXHUwMDNldmFsaWRfaG9va3M7XG4xMDAwOlx0XHRcdG1lbWNweShpbmZvLmhvb2tfZW50cnksIHByaXZhdGUtXHUwMDNlaG9va19lbnRyeSxcbjEwMDE6XHRcdFx0ICAgICAgIHNpemVvZihpbmZvLmhvb2tfZW50cnkpKTtcbjEwMDI6XHRcdFx0bWVtY3B5KGluZm8udW5kZXJmbG93LCBwcml2YXRlLVx1MDAzZXVuZGVyZmxvdyxcbjEwMDM6XHRcdFx0ICAgICAgIHNpemVvZihpbmZvLnVuZGVyZmxvdykpO1xuMTAwNDpcdFx0XHRpbmZvLm51bV9lbnRyaWVzID0gcHJpdmF0ZS1cdTAwM2VudW1iZXI7XG4xMDA1Olx0XHRcdGluZm8uc2l6ZSA9IHByaXZhdGUtXHUwMDNlc2l6ZTtcbjEwMDY6XHRcdFx0c3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4xMDA3Olx0XG4xMDA4Olx0XHRcdHJldCA9IDA7XG4xMDA5Olx0XG4xMDEwOlx0XHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbjEwMTE6XHRcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbjEwMTI6XHRcdH0gZWxzZVxuMTAxMzpcdFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuMTAxNDpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4xMDE1Olx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbjEwMTY6XHRcdFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7XG4xMDE3Olx0I2VuZGlmXG4xMDE4Olx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4xMDE5Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQ2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGNvcHlfZW50cmllc190b191c2VyYCBpbiBOZXR3b3JrIFRhYmxlcyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gdHJhY2UgaXRzIGJlaGF2aW9yIGFjcm9zcyB0aGUgdmFyaW91cyB0YWJsZSBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiBgYXJwX3RhYmxlc2AsIGBpcF90YWJsZXNgLCBhbmQgYGlwNl90YWJsZXNgLCBhcyB0aGVzZSBhcmUgdGhlIHByaW1hcnkgcG9pbnRzIG9mIGludGVyZXN0IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgZmlsdGVyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbW92ZW1lbnQgb2YgZW50cmllcyDigJMgYmUgdGhleSBBUlAgbWFwcGluZ3MsIElQdjQgZmlyZXdhbGwgcnVsZXMsIG9yIElQdjYgZmlsdGVycyDigJMgZnJvbSB0aGUga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuIFVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvcHkgb3BlcmF0aW9uLCBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCBpcyBwYXJhbW91bnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZGF0YSB0cmFuc2Zlci4gSSB3aWxsIGFsc28gYmUgY29uc2lkZXJpbmcgaG93IHRoZSBjb250ZXh0IG9mIHRoZSB1c2VyIHByb2Nlc3MgbWlnaHQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGJ5IHRoZSBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgYW55IGNoYW5nZXMgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIHByb3RlY3QgdGhlIHN5c3RlbS4gSSB3aWxsIHRoZW4gYW5hbHl6ZSBpdHMgcmVzb3VyY2UgdXNhZ2UgYW5kIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgZW1lcmdlIGR1cmluZyB0aGUgY29weSBwcm9jZXNzLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgcHJvY2VzcyBjYW4gYmUgb3B0aW1pemVkLCBhbmQgaG93IGl0IGNhbiBiZSBzZWN1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0aW50IHJldCA9IDA7XG4gNjkxOlx0XHR2b2lkICpsb2NfY3B1X2VudHJ5O1xuIDY5MjpcdFxuIDY5MzpcdFx0Y291bnRlcnMgPSBhbGxvY19jb3VudGVycyh0YWJsZSk7XG4gNjk0Olx0XHRpZiAoSVNfRVJSKGNvdW50ZXJzKSlcbiA2OTU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xuIDY5NjpcdFxuIDY5NzpcdFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiA2OTg6XHRcbiA2OTk6XHRcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gNzAwOlx0XHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gNzAxOlx0XHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gNzAyOlx0XHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICYjNDM7PSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0mIzQzOyYjNDM7KXtcbiA3MDM6XHRcdFx0Y29uc3Qgc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdDtcbiA3MDQ6XHRcbiA3MDU6XHRcdFx0ZSA9IGxvY19jcHVfZW50cnkgJiM0Mzsgb2ZmO1xuIDcwNjpcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJwdHIgJiM0Mzsgb2ZmLCBlLFxuIDcwNzpcdFx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBhcnB0X2VudHJ5LCBjb3VudGVycykpIHx8XG4gNzA4Olx0XHRcdCAgICBjb3B5X3RvX3VzZXIodXNlcnB0ciAmIzQzOyBvZmZcbiA3MDk6XHRcdFx0XHRcdCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgYXJwdF9lbnRyeSwgY291bnRlcnMpLFxuIDcxMDpcdFx0XHRcdFx0IFx1MDAyNmNvdW50ZXJzW251bV0sXG4gNzExOlx0XHRcdFx0XHQgc2l6ZW9mKGNvdW50ZXJzW251bV0pKSkge1xuIDcxMjpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNzEzOlx0XHRcdFx0Z290byBmcmVlX2NvdW50ZXJzO1xuIDcxNDpcdFx0XHR9XG4gNzE1Olx0XG4gNzE2Olx0XHRcdHQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTtcbiA3MTc6XHRcdFx0aWYgKHh0X3RhcmdldF90b191c2VyKHQsIHVzZXJwdHIgJiM0Mzsgb2ZmICYjNDM7IGUtXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcbiA3MTg6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuIDcxOTpcdFx0XHRcdGdvdG8gZnJlZV9jb3VudGVycztcbiA3MjA6XHRcdFx0fVxuIDcyMTpcdFx0fVxuIDcyMjpcdFxuIDcyMzpcdCBmcmVlX2NvdW50ZXJzOlxuIDcyNDpcdFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIDcyNTpcdFx0dmZyZWUoY291bnRlcnMpO1xuIDcyNjpcdFx0cmV0dXJuIHJldDtcbiA3Mjc6XHR9XG4gNzI4Olx0XG4gNzI5Olx0c3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTAKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMTM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgRGV0ZWN0ZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FudGVkIHRvIHJpZ29yb3VzbHkgY2hlY2sgYGdldF9lbnRyaWVzYCBhY3Jvc3MgYWxsIHRocmVlIHJlbGV2YW50IGZpbGVzOiBgYXJwX3RhYmxlcy5jYCwgYGlwX3RhYmxlcy5jYCwgYW5kIGBpcDZfdGFibGVzLmNgLiBJIGZvY3VzZWQgb24gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgYGdldF9lbnRyaWVzYCBmdW5jdGlvbiBhbmQgdGhlIHJlbGF0ZWQgYGNvcHlfZW50cmllc190b191c2VyYCBhbmQgYGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcmAgZnVuY3Rpb25zLgoKSSB6ZXJvZWQgaW4gb24gdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24sIGNoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UuIFRoZSBgaW5mb2Agc3RydWN0IGluIGBnZXRfaW5mb2AgaXMgZGVmaW5lZCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIGdvb2QuICBJIGNvbmZpcm1lZCB0aGF0IHRoZSBjb2RlIHdpdGhpbiB0aGUgYGlmICghSVNfRVJSKHQpKWAgYmxvY2sgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIGBpbmZvYCB3aXRoIGBtZW1zZXQoJmFtcDtpbmZvLCAwLCBzaXplb2YoaW5mbykpYC4gQWxsIGZpZWxkcyBhcmUgdGhlbiBwb3B1bGF0ZWQsIGFuZCBvbmx5IGlmIGByZXRgIGlzIHplcm8gKGluZGljYXRpbmcgc3VjY2VzcykgZG9lcyBgY29weV90b191c2VyYCBldmVuIGV4ZWN1dGUuIFRoaXMgcHJldmVudHMgYW55IHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgYGluZm9gIHN0cnVjdCBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4gSWYgYHJldGAgaXMgbm90IHplcm8sIHRoZSBgY29weV90b191c2VyYCBkb2VzIG5vdCBoYXBwZW4uCgpJIHRoZW4gbG9va2VkIGF0IGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgYW5kIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgLiBUaGUgb25seSBjaGFuZ2UgdGhlcmUgd2FzIHRoZSBhZGRpdGlvbiBvZiBgcGFnZWZhdWx0X2Rpc2FibGUoKWAgYW5kIGBwYWdlZmF1bHRfZW5hYmxlKClgLCBidXQgY3JpdGljYWxseSwgdGhlIGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBpbml0aWFsaXphdGlvbiBsb2dpYyB3ZXJlICpub3QqIG1vZGlmaWVkLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBzYWZlIHRoZXJlLgoKYGdldF9lbnRyaWVzYCBhbmQgYGNvbXBhdF9nZXRfZW50cmllc2AgYWxzbyBoYWQgdGhlIG5ldyByZXRyeSBsb2dpYy4gQnV0IGFnYWluLCBpdCYjMzk7cyBqdXN0IHJldHJ5IGxvZ2ljLCBzbyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzLiBJIGNoZWNrZWQgZm9yIGFueSBvdGhlciBwYXRocyBvciBjaGFuZ2VzIGluIHRoZSBkaWZmIHRvIGVuc3VyZSBub3RoaW5nIHNsaXBwZWQgbXkgYXR0ZW50aW9uLgoKTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/KiogTm8uIGBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm9lZCBiZWZvcmUgcG9wdWxhdGlvbi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBhcmUgc2VudC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBUaGUgYGZhdWx0ZWRgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIGByZXRgIGhhcyBiZWVuIHNldCBpbiBhbGwgYnJhbmNoZXMuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyoqIE5vLgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm8uCgpHaXZlbiB0aG9zZSBjaGVja3MsIEkgY29uY2x1ZGVkIHRoYXQsIGZyb20gdGhlIEtNU0FOIHBlcnNwZWN0aXZlLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZSB0eXBlcyBvZiBidWdzIHRoYXQgYXJlIHBvc3NpYmxlIGhlcmUgYXJlIHRoaW5ncyBsaWtlIGRlYWRsb2NrcywgbG9jayBvcmRlcmluZyBwcm9ibGVtcywgYW5kIGlzc3VlcyB3aXRoIHVzZXIgcG9pbnRlcnMsIGJ1dCB0aG9zZSBhcmUgdGhpbmdzIHRoYXQgS0FTQU4gb3IgbG9ja2RlcCB3b3VsZCBoYXZlIGZsYWdnZWQuIFRoZSBjb2RlIGxvb2tzIHNvbGlkIGZyb20gYSBLTVNBTiBwb2ludCBvZiB2aWV3LCBhbmQgSSBkb3VibGUtY2hlY2tlZCBgZ2V0X2luZm9gIGluIGBpcF90YWJsZXMuY2AgdG8gYmUgc3VyZSBldmVyeXRoaW5nIHdhcyBwcm9wZXJseSBpbml0aWFsaXplZCwgcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIHRoZSBgY29tcGF0YCBzeXNjYWxsIHBhdGguICBUaGUgYGluZm9gIHZhcmlhYmxlLCBzcGVjaWZpY2FsbHksIGlzIHNldCB0byB6ZXJvIHRoZXJlIGFzIHdlbGwuIEV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQhCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXG5cbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJiMzOTtmYXVsdGVkJiMzOTsgYW5kICYjMzk7cmV0JiMzOTsgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpcHRhYmxlcywgaXA2dGFibGVzLCBhbmQgYXJwdGFibGVzIHRvIHByZXZlbnQgZGVhZGxvY2tzIGFuZCBsb2NrIGludmVyc2lvbiB3aGVuIGNvcHlpbmcgZGF0YSB0by9mcm9tIHVzZXIgc3BhY2Ugd2hpbGUgaG9sZGluZyB0YWJsZSBsb2NrcyAoYnkgZGlzYWJsaW5nIHBhZ2UgZmF1bHRzIGluIGNvcHlfZW50cmllc190b191c2VyIGFuZCByZXRyeWluZyB3aXRoIGZhdWx0X2luX3dyaXRlYWJsZSwgYW5kIGJ5IGRlZmVycmluZyBjb3B5X3RvX3VzZXIgaW4gZ2V0X2luZm8gdW50aWwgYWZ0ZXIgdW5sb2NraW5nKS5cblxuQWxsIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZSAoc3VjaCBhcyBzdHJ1Y3QgaXB0X2dldGluZm8gLyBpcDZ0X2dldGluZm8gLyBhcnB0X2dldGluZm8pIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQgYW5kIGNvcGllZCwgYW5kIGNvcHlfdG9fdXNlciBpcyBvbmx5IGludm9rZWQgaWYgdGFibGUgbG9va3VwIHN1Y2NlZWRlZCB3aXRob3V0IGVycm9yLiBMb2NhbCB2YXJpYWJsZXMgbGlrZSAmIzM5O2ZhdWx0ZWQmIzM5OyBhbmQgJiMzOTtyZXQmIzM5OyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIGFsbCBicmFuY2hlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb2xlYWsgcmlza3MgYXJlIGludHJvZHVjZWQ7IGFueSBwb3RlbnRpYWwgYnVncyAobG9ja2luZywgZmF1bHQgaGFuZGxpbmcsIGVycm9yIGNvZGVzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQga2VybmVsIGNoZWNrcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MTEuNDIxODA0NTY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3OTgyODA1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUF9ORl9BUlBUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZW50cmllc190b191c2VyXCIsXG4gICAgXCJnZXRfZW50cmllc1wiLFxuICAgIFwiZ2V0X2luZm9cIixcbiAgICBcImNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiY29tcGF0X2dldF9lbnRyaWVzXCIsXG4gICAgXCJkb19pcHRfZ2V0X2N0bFwiLFxuICAgIFwiZG9faXA2dF9nZXRfY3RsXCIsXG4gICAgXCJkb19hcnB0X2dldF9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlwdGFibGVzLCBpcDZ0YWJsZXMsIGFuZCBhcnB0YWJsZXMgdG8gcHJldmVudCBkZWFkbG9ja3MgYW5kIGxvY2sgaW52ZXJzaW9uIHdoZW4gY29weWluZyBkYXRhIHRvL2Zyb20gdXNlciBzcGFjZSB3aGlsZSBob2xkaW5nIHRhYmxlIGxvY2tzIChieSBkaXNhYmxpbmcgcGFnZSBmYXVsdHMgaW4gY29weV9lbnRyaWVzX3RvX3VzZXIgYW5kIHJldHJ5aW5nIHdpdGggZmF1bHRfaW5fd3JpdGVhYmxlLCBhbmQgYnkgZGVmZXJyaW5nIGNvcHlfdG9fdXNlciBpbiBnZXRfaW5mbyB1bnRpbCBhZnRlciB1bmxvY2tpbmcpLlxcblxcbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSkgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZCBhbmQgY29waWVkLCBhbmQgY29weV90b191c2VyIGlzIG9ubHkgaW52b2tlZCBpZiB0YWJsZSBsb29rdXAgc3VjY2VlZGVkIHdpdGhvdXQgZXJyb3IuIExvY2FsIHZhcmlhYmxlcyBsaWtlICdmYXVsdGVkJyBhbmQgJ3JldCcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja29wdCByZXRyaWV2YWwgcGF0aHMgaW4gbGVnYWN5IGFycF90YWJsZXMsIGlwX3RhYmxlcywgYW5kIGlwNl90YWJsZXMuIEl0IGFkZHMgcGFnZWZhdWx0X2Rpc2FibGUoKS9wYWdlZmF1bHRfZW5hYmxlKCkgYXJvdW5kIHVzZXIgY29waWVzIHdoaWxlIGhvbGRpbmcgeHRfdGFibGUgbG9ja3MsIGFkZHMgZmF1bHRfaW5fd3JpdGVhYmxlKCkgcmV0cnkgaGFuZGxpbmcgaW4gZ2V0X2VudHJpZXMvY29tcGF0X2dldF9lbnRyaWVzLCBhbmQgbW92ZXMgY29weV90b191c2VyIG91dHNpZGUgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBpbiBnZXRfaW5mby4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nLCBwYWdlIGZhdWx0LCBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOToxMS40MjE4MDg3NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE1NzQ5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTY6Mzk6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcXG5pbmRleCBkYjMwN2ZhNDlmM2Y2Li43YjQzMjY5YWE2YjIxIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuIFxcbkBAIC02OTUsNiArNjk2LDcgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcXG4gXFxuIFxcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVxcdTAwM2VlbnRyaWVzO1xcbiBcXG4rXFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gXFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xcbiBcXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXFxuIFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuQEAgLTcxOSwxMiArNzIxLDE0IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXFxuIFxcdH1cXG4gXFxuICBmcmVlX2NvdW50ZXJzOlxcbitcXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4ge1xcbitcXHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XFxuIFxcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcXG4gXFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbiBcXHRpbnQgcmV0O1xcbkBAIC03MzgsNyArNzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4gXFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJ1xcXFwwJztcXG4gXFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbi1cXHRcXHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4gXFxuIFxcdFxcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG5AQCAtNzUxLDE1ICs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4gXFx0XFx0aW5mby5zaXplID0gcHJpdmF0ZS1cXHUwMDNlc2l6ZTtcXG4gXFx0XFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xcbiBcXG4tXFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4tXFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHR4dF90YWJsZV91bmxvY2sodCk7XFxuIFxcdFxcdG1vZHVsZV9wdXQodC1cXHUwMDNlbWUpO1xcbiBcXHR9IGVsc2VcXG4gXFx0XFx0cmV0ID0gUFRSX0VSUih0KTtcXG4gXFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNzY5LDYgKzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIGdldDtcXG4gXFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbitcXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgqbGVuIFxcdTAwM2Mgc2l6ZW9mKGdldCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC03NzksNiArNzgyLDcgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFxuIFxcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXFxcMCc7XFxuIFxcbisgcmV0cnk6XFxuIFxcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORlBST1RPX0FSUCwgZ2V0Lm5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuQEAgLTc5NCw2ICs3OTgsMTQgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFx0fSBlbHNlXFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIFxcbitcXHRpZiAocmV0ID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgIWZhdWx0ZWQpIHtcXG4rXFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuK1xcdFxcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cXHUwMDNlZW50cnl0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGdldC5zaXplKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1xcbmluZGV4IDgwOTQ0MWNlZGNlZGMuLmUwMjkwNzJiMDc1MDEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1bWFzay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmhcXHUwMDNlXFxuQEAgLTgyNCw2ICs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcXG4gXFxuIFxcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVxcdTAwM2VlbnRyaWVzO1xcbiBcXG4rXFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gXFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xcbiBcXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXFxuIFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuQEAgLTg2MSw2ICs4NjMsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcXG4gXFx0fVxcbiBcXG4gIGZyZWVfY291bnRlcnM6XFxuK1xcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4gXFx0dmZyZWUoY291bnRlcnMpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTk0Myw2ICs5NDYsNyBAQCBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLFxcbiBcXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4ge1xcbitcXHRzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbztcXG4gXFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xcbiBcXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XFxuIFxcdGludCByZXQ7XFxuQEAgLTk2MCw3ICs5NjQsNiBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiAjZW5kaWZcXG4gXFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgbmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuLVxcdFxcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIFxcdFxcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcXG5AQCAtOTgxLDEwICs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiBcXHRcXHRpbmZvLnNpemUgPSBwcml2YXRlLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XFxuIFxcbi1cXHRcXHRpZiAoY29weV90b191c2VyKHVzZXIsIFxcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxcbi1cXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdHJldCA9IDA7XFxuIFxcbiBcXHRcXHR4dF90YWJsZV91bmxvY2sodCk7XFxuIFxcdFxcdG1vZHVsZV9wdXQodC1cXHUwMDNlbWUpO1xcbkBAIC05OTQsNiArOTk0LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG4gXFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxuIFxcdFxcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7XFxuICNlbmRpZlxcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXFx1MDAyNmluZm8sICpsZW4pICE9IDApXFxuK1xcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTEwMDQsNiArMTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgZ2V0O1xcbiBcXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XFxuK1xcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKCpsZW4gXFx1MDAzYyBzaXplb2YoZ2V0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTEwMTMsNiArMTAxNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbiBcXG4rIHJldHJ5OlxcbiBcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuQEAgLTEwMjcsNiArMTAzMSwxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXHR9IGVsc2VcXG4gXFx0XFx0cmV0ID0gUFRSX0VSUih0KTtcXG4gXFxuK1xcdGlmIChyZXQgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAhZmF1bHRlZCkge1xcbitcXHRcXHRmYXVsdGVkID0gdHJ1ZTtcXG4rXFx0XFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVxcdTAwM2VlbnRyeXRhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZ2V0LnNpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTU2MSwxMiArMTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsXFxuIFxcbiBcXHRwb3MgPSB1c2VycHRyO1xcbiBcXHRzaXplID0gdG90YWxfc2l6ZTtcXG4rXFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gXFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBwcml2YXRlLVxcdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XFxuIFxcdFxcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXFx1MDAyNnBvcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpKyspO1xcbiBcXHRcXHRpZiAocmV0ICE9IDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4gXFxuIFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTU3OSw2ICsxNTkzLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXHRpbnQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBnZXQ7XFxuIFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4rXFx0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoKmxlbiBcXHUwMDNjIHNpemVvZihnZXQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTU5MSw2ICsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXG4gXFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcXFwwJztcXG4gXFxuKyByZXRyeTpcXG4gXFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVCk7XFxuIFxcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuQEAgLTE2MTAsNiArMTYyNiwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIFxcbiBcXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xcbitcXHRpZiAocmV0ID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgIWZhdWx0ZWQpIHtcXG4rXFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuK1xcdFxcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cXHUwMDNlZW50cnl0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGdldC5zaXplKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcXG5pbmRleCAzMTNjNGFhYzM3N2FhLi5hNjRmY2QzYTk5NDhjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1bWFzay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXFx1MDAzZVxcbkBAIC04NDUsNiArODQ2LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXFxuIFxcbiBcXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cXHUwMDNlZW50cmllcztcXG4gXFxuK1xcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuIFxcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cXG4gXFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xcbiBcXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcXHUwMDNjIHRvdGFsX3NpemU7IG9mZiArPSBlLVxcdTAwM2VuZXh0X29mZnNldCwgbnVtKyspe1xcbkBAIC04ODIsNiArODg0LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXFxuIFxcdH1cXG4gXFxuICBmcmVlX2NvdW50ZXJzOlxcbitcXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC05NjQsNiArOTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIHtcXG4rXFx0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xcbiBcXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XFxuIFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4gXFx0aW50IHJldDtcXG5AQCAtOTgxLDcgKzk4NSw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuICNlbmRpZlxcbiBcXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgbmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuLVxcdFxcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVxcdTAwM2Vwcml2YXRlO1xcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbiBcXHRcXHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XFxuQEAgLTEwMDIsMTAgKzEwMDUsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiBcXHRcXHRpbmZvLnNpemUgPSBwcml2YXRlLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcXG4gXFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlciwgXFx1MDAyNmluZm8sICpsZW4pICE9IDApXFxuLVxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0cmV0ID0gMDtcXG4gXFxuIFxcdFxcdHh0X3RhYmxlX3VubG9jayh0KTtcXG4gXFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuQEAgLTEwMTUsNiArMTAxNSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbiBcXHRcXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcXG4gI2VuZGlmXFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTAyNSw2ICsxMDI3LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIGdldDtcXG4gXFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbitcXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgqbGVuIFxcdTAwM2Mgc2l6ZW9mKGdldCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xMDM1LDYgKzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFxuIFxcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXFxcMCc7XFxuIFxcbisgcmV0cnk6XFxuIFxcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xcbiBcXHRpZiAoIUlTX0VSUih0KSkge1xcbiBcXHRcXHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuQEAgLTEwNDksNiArMTA1MywxNCBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFx0fSBlbHNlXFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIFxcbitcXHRpZiAocmV0ID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgIWZhdWx0ZWQpIHtcXG4rXFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuK1xcdFxcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cXHUwMDNlZW50cnl0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGdldC5zaXplKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTE1NzUsMTIgKzE1ODcsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxcbiBcXG4gXFx0cG9zID0gdXNlcnB0cjtcXG4gXFx0c2l6ZSA9IHRvdGFsX3NpemU7XFxuK1xcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuIFxcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cXHUwMDNlZW50cmllcywgdG90YWxfc2l6ZSkge1xcbiBcXHRcXHRyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsIFxcdTAwMjZwb3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzaXplLCBjb3VudGVycywgaSsrKTtcXG4gXFx0XFx0aWYgKHJldCAhPSAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcbiBcXHR2ZnJlZShjb3VudGVycyk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE1OTMsNiArMTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuIFxcdGludCByZXQ7XFxuIFxcdHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBnZXQ7XFxuIFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4rXFx0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoKmxlbiBcXHUwMDNjIHNpemVvZihnZXQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTYwNSw2ICsxNjIwLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4gXFxuIFxcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXFxcMCc7XFxuIFxcbisgcmV0cnk6XFxuIFxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcXG4gXFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XFxuIFxcdGlmICghSVNfRVJSKHQpKSB7XFxuQEAgLTE2MjQsNiArMTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKHQpO1xcbiBcXG4gXFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7XFxuK1xcdGlmIChyZXQgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAhZmF1bHRlZCkge1xcbitcXHRcXHRmYXVsdGVkID0gdHJ1ZTtcXG4rXFx0XFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVxcdTAwM2VlbnRyeXRhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZ2V0LnNpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOToxMy4wNzM5NDc4MjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYzODk4MjEwMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcIixcbiAgICBcIklQX05GX0lQVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVA2X05GX0lQVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfQVJQVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19DT01QQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiZ2V0X2VudHJpZXNcIixcbiAgICBcImdldF9pbmZvXCIsXG4gICAgXCJjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJcIixcbiAgICBcImNvbXBhdF9nZXRfZW50cmllc1wiLFxuICAgIFwiZG9faXB0X2dldF9jdGxcIixcbiAgICBcImRvX2lwNnRfZ2V0X2N0bFwiLFxuICAgIFwiZG9fYXJwdF9nZXRfY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja29wdCByZXRyaWV2YWwgcGF0aHMgaW4gbGVnYWN5IGFycF90YWJsZXMsIGlwX3RhYmxlcywgYW5kIGlwNl90YWJsZXMuIEl0IGFkZHMgcGFnZWZhdWx0X2Rpc2FibGUoKS9wYWdlZmF1bHRfZW5hYmxlKCkgYXJvdW5kIHVzZXIgY29waWVzIHdoaWxlIGhvbGRpbmcgeHRfdGFibGUgbG9ja3MsIGFkZHMgZmF1bHRfaW5fd3JpdGVhYmxlKCkgcmV0cnkgaGFuZGxpbmcgaW4gZ2V0X2VudHJpZXMvY29tcGF0X2dldF9lbnRyaWVzLCBhbmQgbW92ZXMgY29weV90b191c2VyIG91dHNpZGUgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBpbiBnZXRfaW5mby4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nLCBwYWdlIGZhdWx0LCBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiMzQxMzEyMmFlNDNiZjVmNWZmYmRlNWJmMGZlYWMxYWM0ZmRkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE2OjM5OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcbmluZGV4IGRiMzA3ZmE0OWYzZjYuLjdiNDMyNjlhYTZiMjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiBcbkBAIC02OTUsNiArNjk2LDcgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcbiBcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVx1MDAzZWVudHJpZXM7XG4gXG4rXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xuIFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xuIFx0Zm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgXHUwMDNjIHRvdGFsX3NpemU7IG9mZiArPSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XG5AQCAtNzE5LDEyICs3MjEsMTQgQEAgc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbitcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4ge1xuK1x0c3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvO1xuIFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIFx0aW50IHJldDtcbkBAIC03MzgsNyArNzQyLDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICdcXDAnO1xuIFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbi1cdFx0c3RydWN0IGFycHRfZ2V0aW5mbyBpbmZvO1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiBcbiBcdFx0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG5AQCAtNzUxLDE1ICs3NTQsMTQgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gMDtcbitcdFx0cmV0ID0gMDtcbiBcdFx0eHRfdGFibGVfdW5sb2NrKHQpO1xuIFx0XHRtb2R1bGVfcHV0KHQtXHUwMDNlbWUpO1xuIFx0fSBlbHNlXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC03NjksNiArNzcxLDcgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzc5LDYgKzc4Miw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFwwJztcbiBcbisgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuQEAgLTc5NCw2ICs3OTgsMTQgQEAgc3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG5pbmRleCA4MDk0NDFjZWRjZWRjLi5lMDI5MDcyYjA3NTAxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVtYXNrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oXHUwMDNlXG5AQCAtODI0LDYgKzgyNSw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFxuIFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiBcbitcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXHUwMDNlbmV4dF9vZmZzZXQsIG51bSsrKXtcbkBAIC04NjEsNiArODYzLDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXHR9XG4gXG4gIGZyZWVfY291bnRlcnM6XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC05NDMsNiArOTQ2LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbitcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xuIFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIFx0aW50IHJldDtcbkBAIC05NjAsNyArOTY0LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIG5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbi1cdFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcbkBAIC05ODEsMTAgKzk4NCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRcdGluZm8uc2l6ZSA9IHByaXZhdGUtXHUwMDNlc2l6ZTtcbiBcdFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IDA7XG4rXHRcdHJldCA9IDA7XG4gXG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbkBAIC05OTQsNiArOTk0LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIFx0XHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xuICNlbmRpZlxuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTAwNCw2ICsxMDA2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMDEzLDYgKzEwMTYsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXDAnO1xuIFxuKyByZXRyeTpcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbkBAIC0xMDI3LDYgKzEwMzEsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTU2MSwxMiArMTU3MywxNCBAQCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsXG4gXG4gXHRwb3MgPSB1c2VycHRyO1xuIFx0c2l6ZSA9IHRvdGFsX3NpemU7XG4rXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBwcml2YXRlLVx1MDAzZWVudHJpZXMsIHRvdGFsX3NpemUpIHtcbiBcdFx0cmV0ID0gY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlcihpdGVyLCBcdTAwMjZwb3MsXG4gXHRcdFx0XHRcdFx0XHUwMDI2c2l6ZSwgY291bnRlcnMsIGkrKyk7XG4gXHRcdGlmIChyZXQgIT0gMClcbiBcdFx0XHRicmVhaztcbiBcdH1cbitcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTU3OSw2ICsxNTkzLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNTkxLDYgKzE2MDYsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFwwJztcbiBcbisgcmV0cnk6XG4gXHR4dF9jb21wYXRfbG9jayhBRl9JTkVUKTtcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuQEAgLTE2MTAsNiArMTYyNiwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4gXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpO1xuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcbmluZGV4IDMxM2M0YWFjMzc3YWEuLmE2NGZjZDNhOTk0OGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG5AQCAtMjUsNiArMjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1bWFzay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcdTAwM2VcbkBAIC04NDUsNiArODQ2LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cbiBcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cbiBcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFx1MDAzYyB0b3RhbF9zaXplOyBvZmYgKz0gZS1cdTAwM2VuZXh0X29mZnNldCwgbnVtKyspe1xuQEAgLTg4Miw2ICs4ODQsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcdH1cbiBcbiAgZnJlZV9jb3VudGVyczpcbitcdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHZmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk2NCw2ICs5NjcsNyBAQCBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLFxuIFxuIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4ge1xuK1x0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xuIFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuIFx0aW50IHJldDtcbkBAIC05ODEsNyArOTg1LDYgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiAjZW5kaWZcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiBcdFx0c3RydWN0IHh0X3RhYmxlX2luZm8gdG1wO1xuQEAgLTEwMDIsMTAgKzEwMDUsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0XHRpbmZvLnNpemUgPSBwcml2YXRlLVx1MDAzZXNpemU7XG4gXHRcdHN0cmNweShpbmZvLm5hbWUsIG5hbWUpO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IDA7XG4rXHRcdHJldCA9IDA7XG4gXG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbkBAIC0xMDE1LDYgKzEwMTUsOCBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4gXHRcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpO1xuICNlbmRpZlxuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTAyNSw2ICsxMDI3LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuK1x0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XG4gXG4gXHRpZiAoKmxlbiBcdTAwM2Mgc2l6ZW9mKGdldCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEwMzUsNiArMTAzOCw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuIFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbkBAIC0xMDQ5LDYgKzEwNTMsMTQgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE1NzUsMTIgKzE1ODcsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxuIFxuIFx0cG9zID0gdXNlcnB0cjtcbiBcdHNpemUgPSB0b3RhbF9zaXplO1xuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XG4gXHRcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXHUwMDI2cG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpKyspO1xuIFx0XHRpZiAocmV0ICE9IDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1OTMsNiArMTYwNyw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNjA1LDYgKzE2MjAsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVDYpO1xuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuQEAgLTE2MjQsNiArMTY0MCwxMyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuIFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7XG4rXHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4rXHRcdGZhdWx0ZWQgPSB0cnVlO1xuK1x0XHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXHUwMDNlZW50cnl0YWJsZSxcbitcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjEzLjA3Mzk0ODkyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDY4MDY3MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGl0IHRvdWNoZXMgYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYCwgYWxsIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHJlYWxtLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IGEgY29uc2lzdGVudCBjaGFuZ2UgYWNyb3NzIElQdjQsIElQdjYgYW5kIEFSUCB0YWJsZSBoYW5kbGluZyB3aGljaCBpcyBhbiBleHBlY3RlZCByZWZhY3Rvci5cblxuUGVlbGluZyBiYWNrIHRoZSBsYXllcnMsIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHNvbWUgY29tbW9uIHBhdHRlcm5zIGVtZXJnaW5nLiBJbiBhbGwgdGhyZWUgZmlsZXMsIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgbm93IGluY2x1ZGVzIGBwYWdlZmF1bHRfZGlzYWJsZSgpYCBhbmQgYHBhZ2VmYXVsdF9lbmFibGUoKWAgY2FsbHMuIEFsc28sIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uIGhhcyBoYWQgdGhlIGBjb3B5X3RvX3VzZXJgIGNhbGwgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYHh0X3RhYmxlX3VubG9ja2Agc2VjdGlvbi4gQW5kIGEgcmV0cnkgbG9vcCB3aXRoIGBmYXVsdF9pbl93cml0ZWFibGUoKWAgaGFzIGJlZW4gYWRkZWQgdG8gYGdldF9lbnRyaWVzYC4gVGhlcmUgYXJlIHNpbWlsYXIgY2hhbmdlcyBmb3IgdGhlIGNvbXBhdCBmdW5jdGlvbnMgaW4gaXBfdGFibGVzIGFuZCBpcDZfdGFibGVzLiBUaGlzIHN0cm9uZ2x5IGluZGljYXRlcyBzb21lIGNvbmNlcm4gYXJvdW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cyBkdXJpbmcgdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHJlYWRpbmcgbmV0ZmlsdGVyIHRhYmxlIGVudHJpZXMuXG5cblNvLCB3aHkgYXJlIHRoZXNlIGNoYW5nZXMgaGVyZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgcmVsYXRlZCB0byBzb21lIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBkYXRhIHRyYW5zZmVyLCBzbyBsZXQncyBjaGVjayB3aGF0IGxvY2tzIGFyZSBiZWluZyBoZWxkIHdoaWxlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfZW50cmllc2AsIGFuZCB0aGVpciBjb21wYXRyaW90cyBhcmUgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gR3JlcHBpbmcgb3IgcmVhZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaXBfdGFibGVzLmNgIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHNwZWNpZmljYWxseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBsb2Nrcy4gTG9va3MgbGlrZSB3ZSdyZSB0cnlpbmcgdG8gbWFrZSBkYXRhIHRyYW5zZmVycyBtb3JlIHJvYnVzdCB0byBoYW5kbGUgcGFnZSBmYXVsdHMsIGFuZCBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGJ5IGNhcmVmdWxseSBtYW5hZ2luZyBsb2NraW5nLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBpbXByb3ZlbWVudCBpbiB0ZXJtcyBvZiByb2J1c3RuZXNzLCBidXQgdGhlIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGFjcm9zcyB0aGUgZmlsZXMgbWVhbnMgY2FyZWZ1bCByZXZpZXdpbmcgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MjYuMTQyMDE4OTgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0XFx0dW5zaWduZWQgaW50IG9mZiwgbnVtO1xcbiA4MTY6XFx0XFx0Y29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZTtcXG4gODE3OlxcdFxcdHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7XFxuIDgxODpcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLVxcdTAwM2Vwcml2YXRlO1xcbiA4MTk6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgyMDpcXHRcXHRjb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5O1xcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHRjb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTtcXG4gODIzOlxcdFxcdGlmIChJU19FUlIoY291bnRlcnMpKVxcbiA4MjQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xcbiA4MjU6XFx0XFxuIDgyNjpcXHRcXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cXHUwMDNlZW50cmllcztcXG4gODI3OlxcdFxcbiA4Mjg6XFx0XFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gODI5OlxcdFxcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cXG4gODMwOlxcdFxcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cXG4gODMxOlxcdFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuIDgzMjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gODMzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbTtcXG4gODM0OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQ7XFxuIDgzNTpcXHRcXG4gODM2OlxcdFxcdFxcdGUgPSBsb2NfY3B1X2VudHJ5ICsgb2ZmO1xcbiA4Mzc6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmLCBlLFxcbiA4Mzg6XFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSkgfHxcXG4gODM5OlxcdFxcdFxcdCAgICBjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZlxcbiA4NDA6XFx0XFx0XFx0XFx0XFx0ICsgb2Zmc2V0b2Yoc3RydWN0IGlwdF9lbnRyeSwgY291bnRlcnMpLFxcbiA4NDE6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjb3VudGVyc1tudW1dLFxcbiA4NDI6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihjb3VudGVyc1tudW1dKSkpIHtcXG4gODQzOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDg0NDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDg0NTpcXHRcXHRcXHR9XFxuIDg0NjpcXHRcXG4gODQ3OlxcdFxcdFxcdGZvciAoaSA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KTtcXG4gODQ4OlxcdFxcdFxcdCAgICAgaSBcXHUwMDNjIGUtXFx1MDAzZXRhcmdldF9vZmZzZXQ7XFxuIDg0OTpcXHRcXHRcXHQgICAgIGkgKz0gbS1cXHUwMDNldS5tYXRjaF9zaXplKSB7XFxuIDg1MDpcXHRcXHRcXHRcXHRtID0gKHZvaWQgKillICsgaTtcXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0XFx0XFx0aWYgKHh0X21hdGNoX3RvX3VzZXIobSwgdXNlcnB0ciArIG9mZiArIGkpKSB7XFxuIDg1MzpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2NvdW50ZXJzO1xcbiA4NTU6XFx0XFx0XFx0XFx0fVxcbiA4NTY6XFx0XFx0XFx0fVxcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRcXHR0ID0gaXB0X2dldF90YXJnZXRfYyhlKTtcXG4gODU5OlxcdFxcdFxcdGlmICh4dF90YXJnZXRfdG9fdXNlcih0LCB1c2VycHRyICsgb2ZmICsgZS1cXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcXG4gODYwOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDg2MTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDg2MjpcXHRcXHRcXHR9XFxuIDg2MzpcXHRcXHR9XFxuIDg2NDpcXHRcXG4gODY1OlxcdCBmcmVlX2NvdW50ZXJzOlxcbiA4NjY6XFx0XFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbiA4Njc6XFx0XFx0dmZyZWUoY291bnRlcnMpO1xcbiA4Njg6XFx0XFx0cmV0dXJuIHJldDtcXG4gODY5OlxcdH1cXG4gODcwOlxcdFxcbiA4NzE6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4gODcyOlxcdHN0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuIDg3MzpcXHR7XFxuIDg3NDpcXHRcXHRpbnQgdiA9ICooY29tcGF0X2ludF90ICopc3JjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOToyNi4xNDIxMzg0MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI5NDY0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBgZ2V0X2VudHJpZXNgKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG5vdyBvbiB0aGUgYGdldF9lbnRyaWVzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIGNvbnRleHQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmUgaXMgaXQgb3BlcmF0aW5nIG9uPyBJcyB0aGlzIGEgc3RhbmRhcmQgcmV0cmlldmFsIG1ldGhvZCwgYSBzcGVjaWFsaXplZCBxdWVyeSwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhZ2luYXRpb24sIGZpbHRlcmluZyBieSBzcGVjaWZpYyBjcml0ZXJpYSAoZGF0ZSwgYXV0aG9yLCBrZXl3b3JkLCBldGMuKSwgc29ydGluZyBvcHRpb25zPyBXaGF0J3MgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIOKAkyBhIGxpc3QsIGEgZGljdGlvbmFyeSwgcGVyaGFwcyBhbiBpdGVyYXRvciBmb3IgaGFuZGxpbmcgbGFyZ2UgZGF0YXNldHMgZWZmaWNpZW50bHk/IEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgaXRzIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24sIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIERvZXMgaXQgaGl0IGEgZGF0YWJhc2U/IElzIGl0IGNhY2hlZD8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgZm9yIGJvdHRsZW5lY2tzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSB0byBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MzAuNTcxNjA1MDQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdH1cXG4xMDAxOlxcdFxcbjEwMDI6XFx0c3RhdGljIGludFxcbjEwMDM6XFx0Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4xMDA0OlxcdFxcdCAgICBjb25zdCBpbnQgKmxlbilcXG4xMDA1OlxcdHtcXG4xMDA2OlxcdFxcdGludCByZXQ7XFxuMTAwNzpcXHRcXHRzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDtcXG4xMDA4OlxcdFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4xMDA5OlxcdFxcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xcbjEwMTA6XFx0XFxuMTAxMTpcXHRcXHRpZiAoKmxlbiBcXHUwMDNjIHNpemVvZihnZXQpKVxcbjEwMTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTAxMzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmdldCwgdXB0ciwgc2l6ZW9mKGdldCkpICE9IDApXFxuMTAxNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xMDE1OlxcdFxcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzKSArIGdldC5zaXplKVxcbjEwMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTAxNzpcXHRcXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHQgcmV0cnk6XFxuMTAyMDpcXHRcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbjEwMjE6XFx0XFx0aWYgKCFJU19FUlIodCkpIHtcXG4xMDIyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4xMDIzOlxcdFxcdFxcdGlmIChnZXQuc2l6ZSA9PSBwcml2YXRlLVxcdTAwM2VzaXplKVxcbjEwMjQ6XFx0XFx0XFx0XFx0cmV0ID0gY29weV9lbnRyaWVzX3RvX3VzZXIocHJpdmF0ZS1cXHUwMDNlc2l6ZSxcXG4xMDI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHQsIHVwdHItXFx1MDAzZWVudHJ5dGFibGUpO1xcbjEwMjY6XFx0XFx0XFx0ZWxzZVxcbjEwMjc6XFx0XFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4xMDI4OlxcdFxcbjEwMjk6XFx0XFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuMTAzMDpcXHRcXHRcXHR4dF90YWJsZV91bmxvY2sodCk7XFxuMTAzMTpcXHRcXHR9IGVsc2VcXG4xMDMyOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdGlmIChyZXQgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAhZmF1bHRlZCkge1xcbjEwMzU6XFx0XFx0XFx0ZmF1bHRlZCA9IHRydWU7XFxuMTAzNjpcXHRcXHRcXHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXFx1MDAzZWVudHJ5dGFibGUsXFxuMTAzNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ2V0LnNpemUpKVxcbjEwMzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTAzOTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjEwNDA6XFx0XFx0fVxcbjEwNDE6XFx0XFxuMTA0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwNDM6XFx0fVxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRzdGF0aWMgaW50XFxuMTA0NjpcXHRfX2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsXFxuMTA0NzpcXHRcXHQgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzLFxcbjEwNDg6XFx0XFx0ICAgICB2b2lkIF9fdXNlciAqY291bnRlcnNfcHRyKVxcbjEwNDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTozMC41NzE3NDE1NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE4NDU4MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGVidWdnaW5nIHRoZSBgeHRfdGFibGVfbG9ja2AgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHh0X3RhYmxlX2xvY2tgLCBhbmQgSSdtIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMuIFRoZSBmYWN0IHRoYXQgaXQncyBkaXNhYmxpbmcgcGFnZSBmYXVsdHMgaXMgYSByZWQgZmxhZywgbWVhbmluZyB0aGF0IHRoZSBjb2RlICpwcm9iYWJseSogaG9sZHMgc29tZSBraW5kIG9mIGNyaXRpY2FsIHNlY3Rpb24uIExpa2VseSBhIHNwaW5sb2NrIG9yIG11dGV4LCBtYXliZSBldmVuIGRpc2FibGluZyBwcmVlbXB0aW9uIG9yIGJvdHRvbS1oYWxmIHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0IG5lZWRzIHRvIHByZXZlbnQgcGFnZSBmYXVsdHMgaW4gdGhhdCBzcGVjaWZpYyBsb2NhdGlvbiwgYW5kIHRoZSB0eXBlIG9mIGxvY2sgZ2l2ZXMgYSBjbHVlIGFzIHRvIHdoZXJlIHRvIGxvb2suIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suXG5cblRvIHZlcmlmeSBteSBodW5jaCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGB4dF9maW5kX3RhYmxlX2xvY2tgIGlzIHVzZWQgYW5kIGRlZmluZWQuIEknbGwgZWl0aGVyIGdyZXAgdGhlIGNvZGUgZm9yIGluc3RhbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUgb3IgbG9vayBhdCBpdHMgYWN0dWFsIGRlZmluaXRpb24gdG8gY29uZmlybSB3aGF0IGtpbmQgb2YgbG9ja2luZyBpdCdzIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgeHRfdGFibGVfbG9ja2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDE0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTozMi43OTAyMDIyNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDM2MzU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4dF9maW5kX3RhYmxlX2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD0zMzg9c3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg6MzM5OnN0cnVjdCB4dF90YWJsZSAqeHRfZmluZF90YWJsZV9sb2NrKHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaC0zNDAtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUpO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz03Njg9c3RhdGljIGludCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtNzg1LSByZXRyeTpcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jOjc4NjpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIGdldC5uYW1lKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTc4Ny1cXHRpZiAoIUlTX0VSUih0KSkge1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz05MzU9c3RhdGljIGludCBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NDktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYzo5NTA6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GUFJPVE9fQVJQLCB0bXAubmFtZSk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy05NTEtXFx0aWYgKElTX0VSUih0KSkge1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTEwMDM9Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xMDE5LSByZXRyeTpcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTAyMDpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xMDIxLVxcdGlmICghSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTE2Nj1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jLTExODAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjExODE6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQsIHRtcC5uYW1lKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTE4Mi1cXHRpZiAoSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTU5MD1jb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTYxMC1cXHR4dF9jb21wYXRfbG9jayhBRl9JTkVUKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTYxMTpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNjEyLVxcdGlmICghSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTEwMjQ9Z2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDEtIHJldHJ5Olxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTA0MjpcXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIGdldC5uYW1lKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTEwNDMtXFx0aWYgKCFJU19FUlIodCkpIHtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTE4OD1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xMjAxLVxcdFxcdHJldHVybiBQVFJfRVJSKHBhZGRjKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjEyMDI6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCB0bXAubmFtZSk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xMjAzLVxcdGlmIChJU19FUlIodCkpIHtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTYwND1jb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjI0LVxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE2MjU6XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjI2LVxcdGlmICghSVNfRVJSKHQpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTMyNT1FWFBPUlRfU1lNQk9MKHh0X2ZpbmRfdGFibGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzMjctLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCBcXHUwMDI2IHJlZi4gIFJldHVybnMgRVJSX1BUUiBvbiBlcnJvci4gKi9cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTMyODpzdHJ1Y3QgeHRfdGFibGUgKnh0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzI5LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzItfVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzczOkVYUE9SVF9TWU1CT0xfR1BMKHh0X2ZpbmRfdGFibGVfbG9jayk7XFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzQtXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTEzNzU9c3RydWN0IHh0X3RhYmxlICp4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTEzNzcte1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzc4OlxcdHN0cnVjdCB4dF90YWJsZSAqdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIGFmLCBuYW1lKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTM3OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzg0LVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjEzODU6XFx0XFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIGFmLCBuYW1lKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTM4Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjM0LjkyMDU3MDk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5MTY1Mzk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOZXRmaWx0ZXIgVGFibGVzIGFyZSBQcmltZSBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBgYXJwX3RhYmxlc2AsIGBpcF90YWJsZXNgLCBhbmQgYGlwNl90YWJsZXNgIOKAkyB0aG9zZSBhcmUgdGhlIHN0YW5kYXJkIG5ldGZpbHRlciB0YWJsZXMgaW4gdGhlIExpbnV4IGtlcm5lbC4gQXJlIHRoZXkgYWNjZXNzaWJsZT8gQWJzb2x1dGVseSEgVGhleSdyZSBpbnZva2VkIHRocm91Z2ggYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgb24gc3RhbmRhcmQgc29ja2V0cyBsaWtlIGBBRl9JTkVUYCwgYEFGX0lORVQ2YCwgb3IgYEFGX0FSUGAsIG9yIGV2ZW4gYEFGX05FVExJTktgLiBJJ20gc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IGNhbGxzIGxpa2UgYElQX0dFVF9FTlRSSUVTYCwgYElQVF9TT19HRVRfRU5UUklFU2AsIGBJUFRfU09fR0VUX0lORk9gLCB0aGluZ3MgbGlrZSB0aGF0LCBhY2Nlc3NlZCB0aHJvdWdoIGBnZXRzb2Nrb3B0KGZkLCBTT0xfSVAsIC4uLilgIG9yIGBnZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgLi4uKWAg4oCTIGJhc2ljIG5ldGZpbHRlciBzb2NrZXQgaW50ZXJmYWNlcywgY29tcGxldGVseSBzdGFuZGFyZCBhbmQgdG90YWxseSByZWFjaGFibGUgYnkgc3l6a2FsbGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGZ1enppbmcgY3JpdGVyaWEuIEZpcnN0LCBpcyB0aGVyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZT8gWWVzLCBmb3Igc3VyZS4gV2UncmUgbG9va2luZyBhdCBgbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jYCwgYG5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNgLCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNgLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIGxvY2sgYW5kIHBhZ2VmYXVsdCBoYW5kbGluZywgcmlnaHQ/IEl0J3MgYWJvdXQgaG93IHRoZSBjb2RlIGhhbmRsZXMgYHBhZ2VmYXVsdF9kaXNhYmxlYC9gcGFnZWZhdWx0X2VuYWJsZWAgaW4gYGNvcHlfZW50cmllc190b191c2VyYCwgdGhlIHJldHJ5IGxvb3Agd2l0aCBgZmF1bHRfaW5fd3JpdGVhYmxlYCBpbiBgZ2V0X2VudHJpZXNgLCBhbmQgbW92aW5nIGBjb3B5X3RvX3VzZXJgIG91dHNpZGUgYHh0X3RhYmxlX3VubG9ja2AgaW4gYGdldF9pbmZvYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBob3cgdXNlciBtZW1vcnkgY29weWluZyBpcyBoYW5kbGVkIHVuZGVyIG5ldGZpbHRlciBsb2NrcyDigJMgdHJ5aW5nIHRvIGF2b2lkIHNsZWVwcyBvciBmYXVsdHMgd2hpbGUgaG9sZGluZyBtdXRleGVzIG9yIHNwaW5sb2NrcywgYW5kIGFsc28gYXZvaWQgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuXG5cblRoaXMgc2NyZWFtcyBcIldvcnRoRnV6emluZyA9IHRydWVcIi5cblxuTm93LCB0aW1lIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYG5ldC9pcHY0L25ldGZpbHRlci9gIGFuZCBgbmV0L2lwdjYvbmV0ZmlsdGVyL2AgdG8gbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgcmlnaHQgc2V0dGluZ3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6Mzk6MzguOTEyMjI4MDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTIxODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9ORl9JUFRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTk9Y29uZmlnIE5GX0RFRlJBR19JUFY0XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMy0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTQ6Y29uZmlnIElQX05GX0lQVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xMjg9ZW5kaWYgIyBORl9OQVRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTMwOmNvbmZpZyBJUF9ORl9JUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiSVAgdGFibGVzIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBmaWx0ZXJpbmcvbWFzcS9OQVQpXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTQxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE0MjppZiBJUF9ORl9JUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE0My1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTE4ND1jb25maWcgSVBfTkZfRklMVEVSXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTg1LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgZmlsdGVyaW5nXFxcIlxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjE4NjpcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTg3OlxcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTIyMT1jb25maWcgSVBfTkZfTkFUXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjMtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjQ6XFx0ZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0yNjU9Y29uZmlnIElQX05GX01BTkdMRVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTI2Ni1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IG1hbmdsaW5nXFxcIlxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjI2NzpcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4gfHwgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MjY4OlxcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMjY5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMwMT1jb25maWcgSVBfTkZfUkFXXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzAyLVxcdHRyaXN0YXRlICAncmF3IHRhYmxlIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBOT1RSQUNLL1RSQUNFKSdcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMDM6XFx0ZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDQtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzEzPWNvbmZpZyBJUF9ORl9TRUNVUklUWVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzE2LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzE3OlxcdGRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzE4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMjQ6ZW5kaWYgIyBJUF9ORl9JUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyNS1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfTkZUX0RVUF9JUFY0KSArPSBuZnRfZHVwX2lwdjQub1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTI3LSMgZ2VuZXJpYyBJUCB0YWJsZXNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX05GX0lQVEFCTEVTX0xFR0FDWSkgKz0gaXBfdGFibGVzLm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjM5LjAwMTQ1MjA3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU4ODc1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipNYWtlZmlsZSBFeHBsb3JhdGlvbiBmb3IgSVB2NCBhbmQgSVB2NiBOZXRmaWx0ZXIgTW9kdWxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZXNlIE5ldGZpbHRlciBtb2R1bGVzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYE1ha2VmaWxlYHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIG9uZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9gIGRpcmVjdG9yaWVzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbW9kdWxlcyBmb3IgSVB2NCBhbmQgSVB2NiBmaWx0ZXJpbmcgYXJlIGRlZmluZWQuIEJ5IGV4YW1pbmluZyB0aGUgTWFrZWZpbGVzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYnVpbGQgZmxhZ3MsIG1vZHVsZSB0YXJnZXRzLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgbGlua2VkIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhlc2UgY3J1Y2lhbCBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIGJ1aWx0LiBLbm93aW5nIHRoZSBNYWtlZmlsZSB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgSSBjYW4gc3RhcnQgbWFraW5nIGNoYW5nZXMgdG8gbXkgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0MS42NjAzMjk5MjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGZpbHRlciBtb2R1bGVzIG9uIHRvcCBvZiBJUHY0LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIGRlZnJhZ1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX05GX0RFRlJBR19JUFY0KSArPSBuZl9kZWZyYWdfaXB2NC5vXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNCkgKz0gbmZfc29ja2V0X2lwdjQub1xcbiAgMTA6XFx0b2JqLSQoQ09ORklHX05GX1RQUk9YWV9JUFY0KSArPSBuZl90cHJveHlfaXB2NC5vXFxuICAxMTpcXHRcXG4gIDEyOlxcdCMgcmVqZWN0XFxuICAxMzpcXHRvYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjQpICs9IG5mX3JlamVjdF9pcHY0Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0IyBOQVQgaGVscGVycyAobmZfY29ubnRyYWNrKVxcbiAgMTY6XFx0b2JqLSQoQ09ORklHX05GX05BVF9IMzIzKSArPSBuZl9uYXRfaDMyMy5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfTkZfTkFUX1BQVFApICs9IG5mX25hdF9wcHRwLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0bmZfbmF0X3NubXBfYmFzaWMteSA6PSBuZl9uYXRfc25tcF9iYXNpYy5hc24xLm8gbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vXFxuICAyMDpcXHQkKG9iaikvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5vOiAkKG9iaikvbmZfbmF0X3NubXBfYmFzaWMuYXNuMS5oXFxuICAyMTpcXHRvYmotJChDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMpICs9IG5mX25hdF9zbm1wX2Jhc2ljLm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0b2JqLSQoQ09ORklHX05GVF9SRUpFQ1RfSVBWNCkgKz0gbmZ0X3JlamVjdF9pcHY0Lm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORlRfRklCX0lQVjQpICs9IG5mdF9maWJfaXB2NC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfTkZUX0RVUF9JUFY0KSArPSBuZnRfZHVwX2lwdjQub1xcbiAgMjY6XFx0XFxuICAyNzpcXHQjIGdlbmVyaWMgSVAgdGFibGVzXFxuICAyODpcXHRvYmotJChDT05GSUdfSVBfTkZfSVBUQUJMRVNfTEVHQUNZKSArPSBpcF90YWJsZXMub1xcbiAgMjk6XFx0XFxuICAzMDpcXHQjIHRoZSB0aHJlZSBpbnN0YW5jZXMgb2YgaXBfdGFibGVzXFxuICAzMTpcXHRvYmotJChDT05GSUdfSVBfTkZfRklMVEVSKSArPSBpcHRhYmxlX2ZpbHRlci5vXFxuICAzMjpcXHRvYmotJChDT05GSUdfSVBfTkZfTUFOR0xFKSArPSBpcHRhYmxlX21hbmdsZS5vXFxuICAzMzpcXHRvYmotJChDT05GSUdfSVBfTkZfTkFUKSArPSBpcHRhYmxlX25hdC5vXFxuICAzNDpcXHRvYmotJChDT05GSUdfSVBfTkZfUkFXKSArPSBpcHRhYmxlX3Jhdy5vXFxuICAzNTpcXHRvYmotJChDT05GSUdfSVBfTkZfU0VDVVJJVFkpICs9IGlwdGFibGVfc2VjdXJpdHkub1xcbiAgMzY6XFx0XFxuICAzNzpcXHQjIG1hdGNoZXNcXG4gIDM4OlxcdG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BSCkgKz0gaXB0X2FoLm9cXG4gIDM5OlxcdG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUikgKz0gaXB0X3JwZmlsdGVyLm9cXG4gIDQwOlxcdFxcbiAgNDE6XFx0IyB0YXJnZXRzXFxuICA0MjpcXHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX0VDTikgKz0gaXB0X0VDTi5vXFxuICA0MzpcXHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCkgKz0gaXB0X1JFSkVDVC5vXFxuICA0NDpcXHRvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZKSArPSBpcHRfU1lOUFJPWFkub1xcbiAgNDU6XFx0XFxuICA0NjpcXHQjIGdlbmVyaWMgQVJQIHRhYmxlc1xcbiAgNDc6XFx0b2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgKz0gYXJwX3RhYmxlcy5vXFxuICA0ODpcXHRvYmotJChDT05GSUdfSVBfTkZfQVJQX01BTkdMRSkgKz0gYXJwdF9tYW5nbGUub1xcbiAgNDk6XFx0XFxuICA1MDpcXHQjIGp1c3QgZmlsdGVyaW5nIGluc3RhbmNlIG9mIEFSUCB0YWJsZXMgZm9yIG5vd1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0MS42NjAzOTQ1ODlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NTUyODUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgdGhlIE5ldGZpbHRlciBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJ1aWxkIHByb2Nlc3MsIGFuZCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkndmUgYWxyZWFkeSBsb29rZWQgYXQgWCwgWSwgYW5kIFosIGJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiBhbmQgbmV0ZmlsdGVyLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZWAgZmlsZS4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGltcGFjdGluZyB0aGUgdGFyZ2V0IEknbSB0cm91Ymxlc2hvb3RpbmcuIEJldHRlciB0byBiZSBjb21wbGV0ZSBhbmQgZWxpbWluYXRlIHRoaXMgc2VjdGlvbiBhcyBhbiBpc3N1ZSwgdGhhbiB0byBtaXNzIGEgcG9zc2libGUgcHJvYmxlbS4gSXQncyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMsIGFuZCBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGFueXRoaW5nLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0My42NDU5MjU1MjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGZpbHRlciBtb2R1bGVzIG9uIHRvcCBvZiBJUHY2LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIExpbmsgb3JkZXIgbWF0dGVycyBoZXJlLlxcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19MRUdBQ1kpICs9IGlwNl90YWJsZXMub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9GSUxURVIpICs9IGlwNnRhYmxlX2ZpbHRlci5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfSVA2X05GX01BTkdMRSkgKz0gaXA2dGFibGVfbWFuZ2xlLm9cXG4gIDEwOlxcdG9iai0kKENPTkZJR19JUDZfTkZfUkFXKSArPSBpcDZ0YWJsZV9yYXcub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9TRUNVUklUWSkgKz0gaXA2dGFibGVfc2VjdXJpdHkub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9OQVQpICs9IGlwNnRhYmxlX25hdC5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdCMgZGVmcmFnXFxuICAxNTpcXHRuZl9kZWZyYWdfaXB2Ni15IDo9IG5mX2RlZnJhZ19pcHY2X2hvb2tzLm8gbmZfY29ubnRyYWNrX3JlYXNtLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19ORl9ERUZSQUdfSVBWNikgKz0gbmZfZGVmcmFnX2lwdjYub1xcbiAgMTc6XFx0XFxuICAxODpcXHRvYmotJChDT05GSUdfTkZfU09DS0VUX0lQVjYpICs9IG5mX3NvY2tldF9pcHY2Lm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORl9UUFJPWFlfSVBWNikgKz0gbmZfdHByb3h5X2lwdjYub1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjIHJlamVjdFxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX05GX1JFSkVDVF9JUFY2KSArPSBuZl9yZWplY3RfaXB2Ni5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbiAgMjU6XFx0XFxuICAyNjpcXHQjIG5mX3RhYmxlc1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX05GVF9SRUpFQ1RfSVBWNikgKz0gbmZ0X3JlamVjdF9pcHY2Lm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19ORlRfRFVQX0lQVjYpICs9IG5mdF9kdXBfaXB2Ni5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfTkZUX0ZJQl9JUFY2KSArPSBuZnRfZmliX2lwdjYub1xcbiAgMzA6XFx0XFxuICAzMTpcXHQjIG1hdGNoZXNcXG4gIDMyOlxcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfQUgpICs9IGlwNnRfYWgub1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCkgKz0gaXA2dF9ldWk2NC5vXFxuICAzNDpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX0ZSQUcpICs9IGlwNnRfZnJhZy5vXFxuICAzNTpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIpICs9IGlwNnRfaXB2NmhlYWRlci5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgub1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRFUikgKz0gaXA2dF9ycGZpbHRlci5vXFxuICAzOTpcXHRvYmotJChDT05GSUdfSVA2X05GX01BVENIX1JUKSArPSBpcDZ0X3J0Lm9cXG4gIDQwOlxcdG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSArPSBpcDZ0X3NyaC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjQzLjY0NjAwMzE4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY1Mzg5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgSVB2NiBGaXJld2FsbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxlZ2FjeSBJUHY2IGlwdGFibGVzIHN1cHBvcnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgSVB2NiBuZXRmaWx0ZXIgZnJhbWV3b3JrIHJlc2lkZSwgYW5kIGBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZYCBzaG91bGQgYmUgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IG9wdGlvbiBpcyBzdGlsbCBwcmVzZW50IGFuZCwgaWYgc28sIHdoYXQgaXRzIGN1cnJlbnQgc3RhdGUgaXMuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBhbnkgYXNzb2NpYXRlZCBjb2RlIGNoYW5nZXMgb3IgcG90ZW50aWFsIGRlcHJlY2F0aW9uIHBhdGhzLiBJJ20gYXNzdW1pbmcgdGhhdCBzaW5jZSBpdCdzIGEgbGVnYWN5IGNvbXBvbmVudCwgdGhlcmUgbWlnaHQgYmUgc29tZSBjaHVybiBhcm91bmQgaXRzIHVzZS4gSXQncyB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjQ2LjcxMTM5NTEzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MTU5NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQNl9ORl9JUFRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTY9bWVudSBcXFwiSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05LSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMDpjb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NzI9Y29uZmlnIE5GX0xPR19JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpjb25maWcgSVA2X05GX0lQVEFCTEVTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctODEtXFx0dHJpc3RhdGUgXFxcIklQNiB0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05Mi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo5MzppZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05NC1cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTE5Nz1jb25maWcgSVA2X05GX0ZJTFRFUlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE5OC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IGZpbHRlcmluZ1xcXCJcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxOTk6XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uIHx8IElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMDA6XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjAxLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yMzQ9Y29uZmlnIElQNl9ORl9NQU5HTEVcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yMzUtXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBtYW5nbGluZ1xcXCJcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMzY6XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uIHx8IElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyMzc6XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTI0NT1jb25maWcgSVA2X05GX1JBV1xcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSAgJ3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJ1xcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjI0NzpcXHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjU3PWNvbmZpZyBJUDZfTkZfU0VDVVJJVFlcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI2MC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNjItXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjY4PWNvbmZpZyBJUDZfTkZfTkFUXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNzEtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNzI6XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcdHNlbGVjdCBORl9OQVRcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTI5MD1jb25maWcgSVA2X05GX1RBUkdFVF9OUFRcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI5OC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyOTk6ZW5kaWYgIyBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMDAtZW5kbWVudVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTYtIyBMaW5rIG9yZGVyIG1hdHRlcnMgaGVyZS5cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSVA2X05GX0lQVEFCTEVTX0xFR0FDWSkgKz0gaXA2X3RhYmxlcy5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX0lQNl9ORl9GSUxURVIpICs9IGlwNnRhYmxlX2ZpbHRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjQ2Ljk5OTU2MzY4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI3ODI1ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYElQX05GX0FSUFRBQkxFU2AqKlxuXG5BbHJpZ2h0LCBJJ20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBhbmFseXNpcywgYnV0IEkgY2FuJ3QgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLiBUaGUgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGhhcyBsZWQgbWUgdG8gYSBmZXcgaW50ZXJlc3RpbmcgcG9pbnRzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIGNyaXRpY2FsLiBBIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBJICpoYXZlKiB0byBjb25zaWRlciB0aGUgYElQX05GX0FSUFRBQkxFU2AgbW9kdWxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjaywgZXNwZWNpYWxseSByZWxldmFudCBpbiBzY2VuYXJpb3MgaW52b2x2aW5nIEFSUCBhbmQgSVAgYWRkcmVzcyBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIG5ldGZpbHRlci4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCB3aGV0aGVyIGl0IGlzIGEgcG9pbnQgb2YgYXR0YWNrIGluIHRoZSBzeXN0ZW0uIEdpdmVuIGl0cyBwb3RlbnRpYWwgZm9yIGFsdGVyaW5nIEFSUCBiZWhhdmlvciwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IHdoYXRldmVyIGlzIG9jY3VycmluZyB3aXRoaW4gdGhlIHN5c3RlbSBpc24ndCByZWxhdGVkIHRvIGltcHJvcGVyIGltcGxlbWVudGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIG5ldGZpbHRlciBtb2R1bGUuIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGl0cyB1c2UgYW5kIHF1aWNrbHkgYXNzZXNzIGlmIHRoYXQgbWF5IGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGlzc3VlIEknbSBjaGFzaW5nLiBJdCdzIGEgdml0YWwgcGllY2UgdG8gY29uZmlybSBJIGhhdmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0OS43MjczOTE2NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTc0MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX05GX0FSUFRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTMyND1lbmRpZiAjIElQX05GX0lQVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjYtIyBBUlAgdGFibGVzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzI3OmNvbmZpZyBJUF9ORl9BUlBUQUJMRVNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBBUlBUQUJMRVMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM0Mz1jb25maWcgSVBfTkZfQVJQRklMVEVSXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJhcnB0YWJsZXMtbGVnYWN5IHBhY2tldCBmaWx0ZXJpbmcgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozNDU6XFx0c2VsZWN0IElQX05GX0FSUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0Ni1cXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9BUlBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM1Nz1jb25maWcgSVBfTkZfQVJQX01BTkdMRVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM1OC1cXHR0cmlzdGF0ZSBcXFwiQVJQIHBheWxvYWQgbWFuZ2xpbmdcXFwiXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU5OlxcdGRlcGVuZHMgb24gSVBfTkZfQVJQVEFCTEVTIHx8IE5GVF9DT01QQVRfQVJQXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzYwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZKSArPSBpcHRfU1lOUFJPWFkub1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ2LSMgZ2VuZXJpYyBBUlAgdGFibGVzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19JUF9ORl9BUlBUQUJMRVMpICs9IGFycF90YWJsZXMub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS00OC1vYmotJChDT05GSUdfSVBfTkZfQVJQX01BTkdMRSkgKz0gYXJwdF9tYW5nbGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo0OS43NzkzNzMyNjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE1MDMzMDc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldGZpbHRlciBDb21wYXRpYmlsaXR5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgaW4gcGxhY2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIG9yIHNvbWUgb3RoZXIgY3J1Y2lhbCBjb25maWcgb3B0aW9uIG1pZ2h0IGJlIG1pc3NpbmcuIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nOiBgSVBfTkZfSVBUQUJMRVNfTEVHQUNZYCAob3IgYElQX05GX0lQVEFCTEVTYCksIGBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZYCAob3IgYElQNl9ORl9JUFRBQkxFU2ApLCBgSVBfTkZfQVJQVEFCTEVTYCwgYW5kLCBvZiBjb3Vyc2UsIGBORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIChvciBqdXN0IGBORVRGSUxURVJfWFRBQkxFU2ApLiBJdCdzIGVzc2VudGlhbCB3ZSBkb24ndCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgSVBfTkZfSVBUQUJMRVNgIGFuZCBgSVBfTkZfSVBUQUJMRVNfTEVHQUNZYCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGRldGFpbCB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo1Mi45Mjk3MDY0ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTA6XFx0XFx0dHJpc3RhdGVcXG4gIDExOlxcdFxcdGRlZmF1bHQgblxcbiAgMTI6XFx0XFxuICAxMzpcXHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxuICAxNDpcXHRjb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IElQIHRhYmxlcyBzdXBwb3J0XFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDE4OlxcdFxcdGRlZmF1bHRcXHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBpcHRhYmxlcyBpcyBhIGxlZ2FjeSBwYWNrZXQgY2xhc3NpZmllci5cXG4gIDIxOlxcdFxcdCAgVGhpcyBpcyBub3QgbmVlZGVkIGlmIHlvdSBhcmUgdXNpbmcgaXB0YWJsZXMgb3ZlciBuZnRhYmxlc1xcbiAgMjI6XFx0XFx0ICAoaXB0YWJsZXMtbmZ0KS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5GX1NPQ0tFVF9JUFY0XFxuICAyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc29ja2V0IGxvb2t1cCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc1xcbiAgMjg6XFx0XFx0ICBpcyByZXF1aXJlZCBieSB0aGUge2lwLG5mfXRhYmxlcyBzb2NrZXQgbWF0Y2guXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORl9UUFJPWFlfSVBWNFxcbiAgMzE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgdHByb3h5IHN1cHBvcnRcXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdGlmIE5GX1RBQkxFU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTkZfVEFCTEVTX0lQVjRcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIklQdjQgbmZfdGFibGVzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRpZiBORl9UQUJMRVNfSVBWNFxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XFxuICA0MzpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjozOTo1Mi45Mjk3Nzc2NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1MDI3NzI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSBpbml0aWFsIHRob3VnaHQsIGFzIEkgc2VlIGl0LCBpcyB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLiAgSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gIE15IGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBsZWdhY3kgY29tcG9uZW50IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSdtIGdvaW5nIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRoZSBLY29uZmlnIGZpbGUgdG8gcmV2ZWFsIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgYXMgYSBtb2R1bGUsIGFsb25nIHdpdGggYW55IGRlcGVuZGVuY2llcyBvciBoZWxwIHRleHQuICBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0dXMgb2YgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgaXMgY3J1Y2lhbCwgYmVjYXVzZSBpdCBhbG1vc3QgY2VydGFpbmx5IGltcGFjdHMgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2Ygb2xkZXIgaXB0YWJsZXMgZnVuY3Rpb25hbGl0aWVzLCBhbmQgbWF5IGJlIGEgZmFjdG9yIHdoZW4gZGVhbGluZyB3aXRoIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBzeXN0ZW1zIG9yIGFwcGxpY2F0aW9ucyB0aGF0IHJlbHkgb24gbGVnYWN5IGV4dGVuc2lvbnMuIFVsdGltYXRlbHksIHRoaXMgaXMgdGhlIGZvdW5kYXRpb25hbCBzdGVwIGJlZm9yZSBmdXJ0aGVyIGFuYWx5c2lzOyBJIG5lZWQgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdHVzIHRvIGRyaXZlIHRoZSBzdWJzZXF1ZW50IHF1ZXN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjU4LjA4MDA1Nzg2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4OTY5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XFxcIlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBCUklER0UgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00Ni1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xND1jb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBJUCB0YWJsZXMgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxODpcXHRkZWZhdWx0XFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xOS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMjc9Y29uZmlnIElQX05GX0FSUFRBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IEFSUFRBQkxFUyBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMyOTpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMzMC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zNDM9Y29uZmlnIElQX05GX0FSUEZJTFRFUlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQ2LVxcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0FSUFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjM0NzpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0OC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0xMD1jb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUFY2IFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTEzLVxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNDpcXHRkZWZhdWx0XFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzM4PWNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0Nzpjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc0OC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTE0MTQ9RVhQT1JUX1NZTUJPTF9HUEwoeHRfdGVlX2VuYWJsZWQpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE1LVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNDE2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE0MTctREVGSU5FX1BFUl9DUFUoc2VxY291bnRfdCwgeHRfcmVjc2VxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0yMDk1PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3Byb3RvX2ZpbmkpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMDk2LVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoyMDk3OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIwOTgtLyoqXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MjE4ND1zdGF0aWMgaW50IF9faW5pdCB4dF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjE4OC1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjE4OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZKSkge1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMTkwLVxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjM5OjU4LjE0Nzk2NDE4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMDkyNzEwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBUYWJsZSBFbnRyeSBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGZpbHRlciB0YWJsZSBlbnRyaWVzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzIHByb2Nlc3MuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgZmlsZXMgcmVsYXRlZCB0byB0aGUgQVJQLCBJUHY0LCBhbmQgSVB2NiB0YWJsZXM6IGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuXG5cbkZpcnN0LCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgaW4gZWFjaCBmaWxlIHRoYXQgc2VlbSByZWxldmFudC4gSW4gYGFycF90YWJsZXMuY2AsIEkgc2VlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGFuZCBgZ2V0X2VudHJpZXNgLiBUaGVzZSBhcmUgYWxsIHN0YXRpYywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZWlyIGNhbGxlcnMgdG8gc2VlIGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQuIExvb2tzIGxpa2UgdGhlIGNhbGxlciBmb3IgYGdldF9pbmZvYCBhbmQgYGdldF9lbnRyaWVzYCBpcyBgZG9fYXJwdF9nZXRfY3RsYC4gR29vZCwgdGhhdCBuYXJyb3dzIGl0IGRvd24uXG5cbk5vdywgbG9va2luZyBhdCBgaXBfdGFibGVzLmNgLCBJJ3ZlIGdvdCBhIHNpbWlsYXIgc2V0OiBgY29weV9lbnRyaWVzX3RvX3VzZXJgLCBgZ2V0X2luZm9gLCBgZ2V0X2VudHJpZXNgLiBBZGRpdGlvbmFsbHksIEkgc2VlIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2dldF9lbnRyaWVzYCwgbGlrZWx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdXNlcnNwYWNlIGludGVyZmFjZXMuIFRoZSBjYWxsZXJzIGhlcmUgYXJlIGBkb19pcHRfZ2V0X2N0bGAgYW5kIGBjb21wYXRfZG9faXB0X2dldF9jdGxgLlxuXG5GaW5hbGx5LCBgaXA2X3RhYmxlcy5jYCBtaXJyb3JzIHRoZSBJUHY0IHN0cnVjdHVyZSB3aXRoIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGBnZXRfZW50cmllc2AsIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgLCBhbmQgYGNvbXBhdF9nZXRfZW50cmllc2AuIFRoZWlyIGNhbGxlcnMgYXJlIGBkb19pcDZ0X2dldF9jdGxgIGFuZCBgY29tcGF0X2RvX2lwNnRfZ2V0X2N0bGAuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlc2UgYGRvXypfZ2V0X2N0bGAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgcmV0cmlldmFsIGFuZCBjb3B5aW5nIHByb2Nlc3MgaXMgbGlrZWx5IGluaXRpYXRlZC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlaXIgaW1wbGVtZW50YXRpb25zIGluIGVhY2ggcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNTAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MDIuMzU3MjM3OTg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk2MjU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19pcHRfZ2V0X2N0bHxkb19hcnB0X2dldF9jdGx8ZG9faXA2dF9nZXRfY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz05ODQ9c3RhdGljIGludCBkb19hcnB0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYy0xMDA5LVxcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmM6MTAxMDpzdGF0aWMgaW50IGRvX2FycHRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTEwMTEte1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYz0xMTMxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgYXJwdF9zb2Nrb3B0cyA9IHtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMtMTEzNy1cXHQuZ2V0X29wdG1heFxcdD0gQVJQVF9TT19HRVRfTUFYKzEsXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYzoxMTM4OlxcdC5nZXRcXHRcXHQ9IGRvX2FycHRfZ2V0X2N0bCxcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jLTExMzktXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYz0xNjcxPXN0YXRpYyBpbnRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTY3Mjpkb19pcHRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTY3My17XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTgwOT1zdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIGlwdF9zb2Nrb3B0cyA9IHtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xODE1LVxcdC5nZXRfb3B0bWF4XFx0PSBJUFRfU09fR0VUX01BWCsxLFxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYzoxODE2OlxcdC5nZXRcXHRcXHQ9IGRvX2lwdF9nZXRfY3RsLFxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xODE3LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jPTE2ODU9c3RhdGljIGludFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTY4Njpkb19pcDZ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjg3LXtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTgyND1zdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIGlwNnRfc29ja29wdHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE4MzAtXFx0LmdldF9vcHRtYXhcXHQ9IElQNlRfU09fR0VUX01BWCsxLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM6MTgzMTpcXHQuZ2V0XFx0XFx0PSBkb19pcDZ0X2dldF9jdGwsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xODMyLVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjAyLjQyOTIwODg1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ0NDIwODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGdldF9jdGxgIGluIGBpcF90YWJsZXMuY2AgYW5kIGBpcDZfdGFibGVzLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgY29tcGFyZSB0aGUgYGdldF9jdGxgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlwX3RhYmxlcy5jYCBhbmQgYGlwNl90YWJsZXMuY2Agc291cmNlIGZpbGVzLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhpcyBjcm9zcy1leGFtaW5hdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBkaWZmZXJlbmNlcyBvciBzaW1pbGFyaXRpZXMgaW4gaG93IElQdjQgYW5kIElQdjYgY29udHJvbCBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IHRoZSBOZXRmaWx0ZXIgbGV2ZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHRhYmxlcyB0aGVtc2VsdmVzLiBJcyB0aGVyZSBzb21lIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBbSBJIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgYnVnLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHksIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZGVzaWduIGRlY2lzaW9uPyBJdOKAmXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlaXIgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGFueSBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmV0cmlldmUgY29udHJvbCBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHJ1bGUgbWFuaXB1bGF0aW9uIG9yIHRhYmxlIG1hbmFnZW1lbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIGFueSBkaWZmZXJlbmNlcyBpbiB0aGUga2VybmVsIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MDQuODczNjMyMTYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzEyNzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYXQuKmdldF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIzOTQ9c3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZyxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxMy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MTQ6c3RhdGljIGludCBjb21wYXRfZG9fZWJ0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxNS1cXHRcXHR2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI0ODc9c3RhdGljIGludCBkb19lYnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjUwMy1cXHQgICAgICpsZW4gIT0gc2l6ZW9mKHRtcCkpKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjUwNDpcXHRcXHRyZXR1cm4gY29tcGF0X2RvX2VidF9nZXRfY3RsKHNrLCBjbWQsIHVzZXIsIGxlbik7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTA1LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDowNC45NDA3NjQ5OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQzNzkzNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyBgY29tcGF0X2dldF9lbnRyaWVzYCBDYWxscyBpbiBpcHRhYmxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY29tcGF0X2dldF9lbnRyaWVzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlwX3RhYmxlcy5jYCBhbmQgYGlwNl90YWJsZXMuY2AgY29kZWJhc2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZD8gV2hhdCBpcyB0aGUgY29udGV4dD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29tcGF0aWJpbGl0eS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGlwdGFibGVzIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgcHVycG9zZSB0aGV5IHNlcnZlIGFuZCB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgdGhleSBhZGRyZXNzLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24gb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyBhIGNvZGUgZGl2ZSB0byBpZGVudGlmeSBldmVyeSBpbnN0YW5jZSBvZiBhIGBjb21wYXRfZ2V0X2VudHJpZXNgIGludm9jYXRpb24uIFRoaXMgd2lsbCBzZXJ2ZSBhcyB0aGUgZm91bmRhdGlvbiBvZiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzOTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDowNi42ODQ1NjA5MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODY0NjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYXRfZ2V0X2VudHJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM9MTU4OT1zdGF0aWMgaW50XFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jOjE1OTA6Y29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNTkxLVxcdFxcdCAgIGludCAqbGVuKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jPTE2NzI9ZG9faXB0X2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMtMTY4OC1cXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmM6MTY4OTpcXHRcXHRcXHRyZXQgPSBjb21wYXRfZ2V0X2VudHJpZXMoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pO1xcbm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYy0xNjkwLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmM9MTYwMz1zdGF0aWMgaW50XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYzoxNjA0OmNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYy0xNjA1LVxcdFxcdCAgIGludCAqbGVuKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYz0xNjg2PWRvX2lwNnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMtMTcwMi1cXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jOjE3MDM6XFx0XFx0XFx0cmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jLTE3MDQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDowNy4zMTMyMTIyNzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MjE0NDkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIFRhYmxlIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBpbiB0aGVzZSBuZXRmaWx0ZXIgdGFibGUgaW1wbGVtZW50YXRpb25zLiBGaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGRlYWwgd2l0aCBpbiB0aGUgdGhyZWUgQyBmaWxlczogYGFycF90YWJsZXMuY2AsIGBpcF90YWJsZXMuY2AsIGFuZCBgaXA2X3RhYmxlcy5jYC4gIEknbSBzZWVpbmcgYSBjb25zaXN0ZW50IHBhdHRlcm4gb2YgYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9pbmZvYCwgYW5kIGBnZXRfZW50cmllc2AgYWNyb3NzIGFsbCBvZiB0aGVtLiBgaXBfdGFibGVzLmNgIGFuZCBgaXA2X3RhYmxlcy5jYCBhbHNvIGhhdmUgdGhvc2UgXCJjb21wYXRcIiB2ZXJzaW9ucyBhbmQgdGhlIGBkb18qX2dldF9jdGxgIHZhcmlhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLCBvciBwZXJoYXBzIHRoZSBjYWxsZXJzIG9mIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIHN5bWJvbHMgb2YgaW1tZWRpYXRlIGludGVyZXN0IGFyZTogYGRvX2lwdF9nZXRfY3RsYCwgYGNvbXBhdF9nZXRfZW50cmllc2AsIGBnZXRfZW50cmllc2AsIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBnZXRfaW5mb2AsIGBkb19hcnB0X2dldF9jdGxgLCBhbmQgYGRvX2lwNnRfZ2V0X2N0bGAuICBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgJ2NvbXBhdCcgc3ltYm9scywgYW5kIHRoZSAnZ2V0JyBhbmQgJ2NvcHknIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZGlzdGluY3QuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZXNlIGZ1bmN0aW9uczogYGNvcHlfZW50cmllc190b191c2VyYCwgYGdldF9pbmZvYCwgYGdldF9lbnRyaWVzYCwgYGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcmAsIGBjb21wYXRfZ2V0X2VudHJpZXNgLCBgZG9fYXJwdF9nZXRfY3RsYCwgYGRvX2lwdF9nZXRfY3RsYCwgYW5kIGBkb19pcDZ0X2dldF9jdGxgLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIGxpa2UgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgLCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAuIFRpbWUgdG8gY29uZmlybSB0aGF0J3MgYWN0dWFsbHkgdGhlIGNhc2UuXG5cbk9rYXksIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aG9zZSBpbiB0aGUgS2NvbmZpZyBmaWxlcy5cblxuUmlnaHQsIG5vdyB0aGUgY3J1Y2lhbCBzdGVwOiBjaGVja2luZyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UuIEluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCBgTkVURklMVEVSX1hUQUJMRVNgIGRlcGVuZHMgb24gYE5FVEZJTFRFUmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgSVBfTkZfSVBUQUJMRVNfTEVHQUNZYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGFuZCBgTkVURklMVEVSX1hUQUJMRVNgIGFuZCBgSVBfTkZfSVBUQUJMRVNgLiAgSG1tLCBpcyBgSVBfTkZfSVBUQUJMRVNgIGEgbWVudSBvciBhIGNvbmZpZz8gTGV0IG1lIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYWdhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MTIuNDA1MzU5MzkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElQIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIklQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIE5GX0RFRlJBR19JUFY0XFxuICAxMDpcXHRcXHR0cmlzdGF0ZVxcbiAgMTE6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMjpcXHRcXG4gIDEzOlxcdCMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcXG4gIDE0OlxcdGNvbmZpZyBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgSVAgdGFibGVzIHN1cHBvcnRcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU1xcbiAgMTg6XFx0XFx0ZGVmYXVsdFxcdG0gaWYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIGlwdGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxcbiAgMjE6XFx0XFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXFxuICAyMjpcXHRcXHQgIChpcHRhYmxlcy1uZnQpLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkZfU09DS0VUX0lQVjRcXG4gIDI1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY0IHNvY2tldCBsb29rdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MTIuNDA1NDQ2NjUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0OTE4NDU2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGZpbHRlci9YdGFibGVzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXJlJ3MgYSBwYXRjaCBoZXJlIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyLXNwYWNlIGFuZCBrZXJuZWwtc3BhY2Ugd2l0aGluIHRoZSBOZXRmaWx0ZXIvWHRhYmxlcyBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHNvY2tvcHQgcmV0cmlldmFsIGhhbmRsZXJzIGluIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuIFRoZSBjb3JlIGlzc3VlIGFwcGVhcnMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgY29weWluZyBvZiBlbnRyaWVzIHRvIHVzZXIgc3BhY2UsIGFsbCB3aGlsZSBkZWFsaW5nIHdpdGggdGFibGUgbG9ja3MuXG5cbkkndmUgbm90ZWQgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGFyZSBpbXBvcnRhbnQgaGVyZTogYE5FVEZJTFRFUl9YVEFCTEVTYCwgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9JUFRBQkxFU19MRUdBQ1lgLCBgSVA2X05GX0lQVEFCTEVTX0xFR0FDWWAsIGBJUF9ORl9BUlBUQUJMRVNgLCBhbmQgcG90ZW50aWFsbHkgYE5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVGAg4oCTIHRoZXNlIGFyZSBjbGVhcmx5IHJlbGV2YW50IHRvIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgcXVpY2tseSBjaGVja2VkIGZvciB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLCBidXQgYWxsIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGFyZSBzcGVjaWZpYyB0byBuZXRmaWx0ZXIgYW5kIHh0YWJsZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgdGhlIGNvZGUgY29waWVzIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgZGlzYWJsZXMgcGFnZSBmYXVsdHMgZHVyaW5nIHRoZSBjb3B5IG9wZXJhdGlvbiwgd2hpY2ggaXMgc21hcnQsIGJ1dCBJJ20gZ3Vlc3NpbmcgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbS4gYGZhdWx0X2luX3dyaXRlYWJsZSgpYCBzb3VuZHMgbGlrZSBhIGNsZXZlciB3YXkgdG8gaGFuZGxlIHdyaXRlIGZhdWx0cy4gQWxzbyB0aGUgbW92ZW1lbnQgb2YgdXNlciBjb3B5aW5nIG91dHNpZGUgb2YgY3JpdGljYWwgbG9jayBzZWN0aW9ucyBsb29rcyBsaWtlIGEgZ29vZCBzdGVwLlxuXG5UaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgbmV0ZmlsdGVyIGNvcmUgbG9naWMgd29ya3MuIFRoaXMgc29ydCBvZiBjaGFuZ2Ugd2FycmFudHMgdGhvcm91Z2ggdGVzdGluZy4gSSB0aGluayBmdXp6aW5nIGlzIGVzc2VudGlhbCBoZXJlLiBXZSBuZWVkIHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGVycm9yIHBhdGhzIG9yIGlzc3VlcyB3aXRoIGhvdyBwYWdlIGZhdWx0cyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBtYW5pcHVsYXRpbmcgZGF0YSB1bmRlciB0aGVzZSB0YWJsZSBsb2Nrcy5cblxuSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIGlzIGltcG9ydGFudCwgSSB3aWxsIHVzZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxMywiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoxNi44OTcyOTQ3OTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg1ODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUF9ORl9BUlBUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZW50cmllc190b191c2VyXCIsXG4gICAgXCJnZXRfZW50cmllc1wiLFxuICAgIFwiZ2V0X2luZm9cIixcbiAgICBcImNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiY29tcGF0X2dldF9lbnRyaWVzXCIsXG4gICAgXCJkb19pcHRfZ2V0X2N0bFwiLFxuICAgIFwiZG9faXA2dF9nZXRfY3RsXCIsXG4gICAgXCJkb19hcnB0X2dldF9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2Nrb3B0IHJldHJpZXZhbCBwYXRocyBpbiBsZWdhY3kgYXJwX3RhYmxlcywgaXBfdGFibGVzLCBhbmQgaXA2X3RhYmxlcy4gSXQgYWRkcyBwYWdlZmF1bHRfZGlzYWJsZSgpL3BhZ2VmYXVsdF9lbmFibGUoKSBhcm91bmQgdXNlciBjb3BpZXMgd2hpbGUgaG9sZGluZyB4dF90YWJsZSBsb2NrcywgYWRkcyBmYXVsdF9pbl93cml0ZWFibGUoKSByZXRyeSBoYW5kbGluZyBpbiBnZXRfZW50cmllcy9jb21wYXRfZ2V0X2VudHJpZXMsIGFuZCBtb3ZlcyBjb3B5X3RvX3VzZXIgb3V0c2lkZSBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGluIGdldF9pbmZvLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcsIHBhZ2UgZmF1bHQsIGFuZCBlcnJvciBoYW5kbGluZyBpbiByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiSVBfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJJUF9ORl9BUlBUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZW50cmllc190b191c2VyXCIsXG4gICAgXCJnZXRfZW50cmllc1wiLFxuICAgIFwiZ2V0X2luZm9cIixcbiAgICBcImNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlclwiLFxuICAgIFwiY29tcGF0X2dldF9lbnRyaWVzXCIsXG4gICAgXCJkb19pcHRfZ2V0X2N0bFwiLFxuICAgIFwiZG9faXA2dF9nZXRfY3RsXCIsXG4gICAgXCJkb19hcnB0X2dldF9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2Nrb3B0IHJldHJpZXZhbCBwYXRocyBpbiBsZWdhY3kgYXJwX3RhYmxlcywgaXBfdGFibGVzLCBhbmQgaXA2X3RhYmxlcy4gSXQgYWRkcyBwYWdlZmF1bHRfZGlzYWJsZSgpL3BhZ2VmYXVsdF9lbmFibGUoKSBhcm91bmQgdXNlciBjb3BpZXMgd2hpbGUgaG9sZGluZyB4dF90YWJsZSBsb2NrcywgYWRkcyBmYXVsdF9pbl93cml0ZWFibGUoKSByZXRyeSBoYW5kbGluZyBpbiBnZXRfZW50cmllcy9jb21wYXRfZ2V0X2VudHJpZXMsIGFuZCBtb3ZlcyBjb3B5X3RvX3VzZXIgb3V0c2lkZSBjcml0aWNhbCBsb2NrIHNlY3Rpb25zIGluIGdldF9pbmZvLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcsIHBhZ2UgZmF1bHQsIGFuZCBlcnJvciBoYW5kbGluZyBpbiByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjE2Ljk3MjE2MjM3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyNDc5MDk4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoxNi45NzI2MTIzODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzI0NzQ1NDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXFxuXFxuQWxsIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZSAoc3VjaCBhcyBzdHJ1Y3QgaXB0X2dldGluZm8gLyBpcDZ0X2dldGluZm8gLyBhcnB0X2dldGluZm8pIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJ2ZhdWx0ZWQnIGFuZCAncmV0JyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIGFsbCBicmFuY2hlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb2xlYWsgcmlza3MgYXJlIGludHJvZHVjZWQ7IGFueSBwb3RlbnRpYWwgYnVncyAobG9ja2luZywgZmF1bHQgaGFuZGxpbmcsIGVycm9yIGNvZGVzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQga2VybmVsIGNoZWNrcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYjM0MTMxMjJhZTQzYmY1ZjVmZmJkZTViZjBmZWFjMWFjNGZkZDE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNjozOTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jXG5pbmRleCBkYjMwN2ZhNDlmM2Y2Li43YjQzMjY5YWE2YjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1xuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG5AQCAtNjk1LDYgKzY5Niw3IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXG4gXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cdTAwM2VlbnRyaWVzO1xuIFxuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cbiBcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cbiBcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFx1MDAzYyB0b3RhbF9zaXplOyBvZmYgKz0gZS1cdTAwM2VuZXh0X29mZnNldCwgbnVtKyspe1xuQEAgLTcxOSwxMiArNzIxLDE0IEBAIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXHR9XG4gXG4gIGZyZWVfY291bnRlcnM6XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbitcdHN0cnVjdCBhcnB0X2dldGluZm8gaW5mbztcbiBcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiBcdGludCByZXQ7XG5AQCAtNzM4LDcgKzc0Miw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAnXFwwJztcbiBcdHQgPSB4dF9yZXF1ZXN0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GUFJPVE9fQVJQLCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBhcnB0X2dldGluZm8gaW5mbztcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gXG4gXHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuQEAgLTc1MSwxNSArNzU0LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRcdGluZm8uc2l6ZSA9IHByaXZhdGUtXHUwMDNlc2l6ZTtcbiBcdFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKHVzZXIsIFx1MDAyNmluZm8sICpsZW4pICE9IDApXG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IDA7XG4rXHRcdHJldCA9IDA7XG4gXHRcdHh0X3RhYmxlX3VubG9jayh0KTtcbiBcdFx0bW9kdWxlX3B1dCh0LVx1MDAzZW1lKTtcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNzY5LDYgKzc3MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGFycHRfZ2V0X2VudHJpZXMgZ2V0O1xuIFx0c3RydWN0IHh0X3RhYmxlICp0O1xuK1x0Ym9vbCBmYXVsdGVkID0gZmFsc2U7XG4gXG4gXHRpZiAoKmxlbiBcdTAwM2Mgc2l6ZW9mKGdldCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc3OSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0dCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GUFJPVE9fQVJQLCBnZXQubmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbkBAIC03OTQsNiArNzk4LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1xuaW5kZXggODA5NDQxY2VkY2VkYy4uZTAyOTA3MmIwNzUwMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1bWFzay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaFx1MDAzZVxuQEAgLTgyNCw2ICs4MjUsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSxcbiBcbiBcdGxvY19jcHVfZW50cnkgPSBwcml2YXRlLVx1MDAzZWVudHJpZXM7XG4gXG4rXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuIFx0LyogRklYTUU6IHVzZSBpdGVyYXRvciBtYWNyb3MgLS1SUiAqL1xuIFx0LyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqL1xuIFx0Zm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgXHUwMDNjIHRvdGFsX3NpemU7IG9mZiArPSBlLVx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XG5AQCAtODYxLDYgKzg2Myw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFx0fVxuIFxuICBmcmVlX2NvdW50ZXJzOlxuK1x0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFx0dmZyZWUoY291bnRlcnMpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtOTQzLDYgKzk0Niw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sXG4gXG4gc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiB7XG4rXHRzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbztcbiBcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiBcdGludCByZXQ7XG5AQCAtOTYwLDcgKzk2NCw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gI2VuZGlmXG4gXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBuYW1lKTtcbiBcdGlmICghSVNfRVJSKHQpKSB7XG4tXHRcdHN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvO1xuIFx0XHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXHUwMDNlcHJpdmF0ZTtcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxuIFx0XHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XG5AQCAtOTgxLDEwICs5ODQsNyBAQCBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIFx0XHRpbmZvLnNpemUgPSBwcml2YXRlLVx1MDAzZXNpemU7XG4gXHRcdHN0cnNjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuK1x0XHRyZXQgPSAwO1xuIFxuIFx0XHR4dF90YWJsZV91bmxvY2sodCk7XG4gXHRcdG1vZHVsZV9wdXQodC1cdTAwM2VtZSk7XG5AQCAtOTk0LDYgKzk5NCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbiBcdFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcbiAjZW5kaWZcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbitcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEwMDQsNiArMTAwNiw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGlwdF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTAxMyw2ICsxMDE2LDcgQEAgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRnZXQubmFtZVtzaXplb2YoZ2V0Lm5hbWUpIC0gMV0gPSAnXFwwJztcbiBcbisgcmV0cnk6XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG5AQCAtMTAyNyw2ICsxMDMxLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE1NjEsMTIgKzE1NzMsMTQgQEAgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLFxuIFxuIFx0cG9zID0gdXNlcnB0cjtcbiBcdHNpemUgPSB0b3RhbF9zaXplO1xuK1x0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbiBcdHh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcHJpdmF0ZS1cdTAwM2VlbnRyaWVzLCB0b3RhbF9zaXplKSB7XG4gXHRcdHJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgXHUwMDI2cG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNnNpemUsIGNvdW50ZXJzLCBpKyspO1xuIFx0XHRpZiAocmV0ICE9IDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1NzksNiArMTU5Myw3IEBAIGNvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjb21wYXRfaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTU5MSw2ICsxNjA2LDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFxuIFx0Z2V0Lm5hbWVbc2l6ZW9mKGdldC5uYW1lKSAtIDFdID0gJ1xcMCc7XG4gXG4rIHJldHJ5OlxuIFx0eHRfY29tcGF0X2xvY2soQUZfSU5FVCk7XG4gXHR0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjEwLDYgKzE2MjYsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0XHRyZXQgPSBQVFJfRVJSKHQpO1xuIFxuIFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcbitcdGlmIChyZXQgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIWZhdWx0ZWQpIHtcbitcdFx0ZmF1bHRlZCA9IHRydWU7XG4rXHRcdGlmIChmYXVsdF9pbl93cml0ZWFibGUoKGNoYXIgX191c2VyICopdXB0ci1cdTAwM2VlbnRyeXRhYmxlLFxuK1x0XHRcdFx0ICAgICAgIGdldC5zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbiBcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jXG5pbmRleCAzMTNjNGFhYzM3N2FhLi5hNjRmY2QzYTk5NDhjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG5AQCAtODQ1LDYgKzg0Niw3IEBAIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLFxuIFxuIFx0bG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtXHUwMDNlZW50cmllcztcbiBcbitcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHQvKiBGSVhNRTogdXNlIGl0ZXJhdG9yIG1hY3JvcyAtLVJSICovXG4gXHQvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovXG4gXHRmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiBcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXHUwMDNlbmV4dF9vZmZzZXQsIG51bSsrKXtcbkBAIC04ODIsNiArODg0LDcgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsXG4gXHR9XG4gXG4gIGZyZWVfY291bnRlcnM6XG4rXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHR2ZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC05NjQsNiArOTY3LDcgQEAgc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyxcbiBcbiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxuIHtcbitcdHN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbztcbiBcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbiBcdGludCByZXQ7XG5AQCAtOTgxLDcgKzk4NSw2IEBAIHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXG4gI2VuZGlmXG4gXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgbmFtZSk7XG4gXHRpZiAoIUlTX0VSUih0KSkge1xuLVx0XHRzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87XG4gXHRcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cdTAwM2Vwcml2YXRlO1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4gXHRcdHN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDtcbkBAIC0xMDAyLDEwICsxMDA1LDcgQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdFx0aW5mby5zaXplID0gcHJpdmF0ZS1cdTAwM2VzaXplO1xuIFx0XHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyLCBcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSAwO1xuK1x0XHRyZXQgPSAwO1xuIFxuIFx0XHR4dF90YWJsZV91bmxvY2sodCk7XG4gXHRcdG1vZHVsZV9wdXQodC1cdTAwM2VtZSk7XG5AQCAtMTAxNSw2ICsxMDE1LDggQEAgc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcbiBcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuIFx0XHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcbiAjZW5kaWZcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodXNlciwgXHUwMDI2aW5mbywgKmxlbikgIT0gMClcbitcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEwMjUsNiArMTAyNyw3IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIGdldDtcbiBcdHN0cnVjdCB4dF90YWJsZSAqdDtcbitcdGJvb2wgZmF1bHRlZCA9IGZhbHNlO1xuIFxuIFx0aWYgKCpsZW4gXHUwMDNjIHNpemVvZihnZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMDM1LDYgKzEwMzgsNyBAQCBnZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXDAnO1xuIFxuKyByZXRyeTpcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbiBcdFx0c3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LVx1MDAzZXByaXZhdGU7XG5AQCAtMTA0OSw2ICsxMDUzLDE0IEBAIGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0fSBlbHNlXG4gXHRcdHJldCA9IFBUUl9FUlIodCk7XG4gXG4rXHRpZiAocmV0ID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFmYXVsdGVkKSB7XG4rXHRcdGZhdWx0ZWQgPSB0cnVlO1xuK1x0XHRpZiAoZmF1bHRfaW5fd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKXVwdHItXHUwMDNlZW50cnl0YWJsZSxcbitcdFx0XHRcdCAgICAgICBnZXQuc2l6ZSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xNTc1LDEyICsxNTg3LDE0IEBAIGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwgc3RydWN0IHh0X3RhYmxlICp0YWJsZSxcbiBcbiBcdHBvcyA9IHVzZXJwdHI7XG4gXHRzaXplID0gdG90YWxfc2l6ZTtcbitcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4gXHR4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHByaXZhdGUtXHUwMDNlZW50cmllcywgdG90YWxfc2l6ZSkge1xuIFx0XHRyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsIFx1MDAyNnBvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzaXplLCBjb3VudGVycywgaSsrKTtcbiBcdFx0aWYgKHJldCAhPSAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuK1x0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFxuIFx0dmZyZWUoY291bnRlcnMpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xNTkzLDYgKzE2MDcsNyBAQCBjb21wYXRfZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY29tcGF0X2lwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb21wYXRfaXA2dF9nZXRfZW50cmllcyBnZXQ7XG4gXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XG4rXHRib29sIGZhdWx0ZWQgPSBmYWxzZTtcbiBcbiBcdGlmICgqbGVuIFx1MDAzYyBzaXplb2YoZ2V0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTYwNSw2ICsxNjIwLDcgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcbiBcdGdldC5uYW1lW3NpemVvZihnZXQubmFtZSkgLSAxXSA9ICdcXDAnO1xuIFxuKyByZXRyeTpcbiBcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcbiBcdHQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVUNiwgZ2V0Lm5hbWUpO1xuIFx0aWYgKCFJU19FUlIodCkpIHtcbkBAIC0xNjI0LDYgKzE2NDAsMTMgQEAgY29tcGF0X2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pcDZ0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0cixcbiBcdFx0cmV0ID0gUFRSX0VSUih0KTtcbiBcbiBcdHh0X2NvbXBhdF91bmxvY2soQUZfSU5FVDYpO1xuK1x0aWYgKHJldCA9PSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhZmF1bHRlZCkge1xuK1x0XHRmYXVsdGVkID0gdHJ1ZTtcbitcdFx0aWYgKGZhdWx0X2luX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKil1cHRyLVx1MDAzZWVudHJ5dGFibGUsXG4rXHRcdFx0XHQgICAgICAgZ2V0LnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoxNi45NzI2MTMyODJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyMTIyNjczNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGFuZCBGYXVsdHMgaW4gTmV0ZmlsdGVyIFRhYmxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBjb3JlIE5ldGZpbHRlciB0YWJsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHksIEkgYmVsaWV2ZSB3ZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBwcm9ibGVtcy4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLlxuXG5GaXJzdCwgaW4gYGNvcHlfZW50cmllc190b191c2VyYCwgdGhlIGNvZGUgbm93IHdyYXBzIHRoZSBlbnRyeSBjb3B5IGxvb3Agd2l0aCBgcGFnZWZhdWx0X2Rpc2FibGUoKWAgYW5kIGBwYWdlZmF1bHRfZW5hYmxlKClgLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIHRvIHByZXZlbnQgcGFnZSBmYXVsdHMgZHVyaW5nIHRoaXMgY3JpdGljYWwgb3BlcmF0aW9uLCBsaWtlbHkgd2hlbiBhY2Nlc3NpbmcgdXNlci1zcGFjZSBtZW1vcnksIGVuc3VyaW5nIGF0b21pY2l0eSBhbmQgcHJldmVudGluZyB1bmV4cGVjdGVkIGludGVycnVwdGlvbnMuIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgaW50ZXJydXB0aW9ucyBhbmQgc3Vic2VxdWVudCByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24gaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIG1haW4gY2hhbmdlIGhlcmUgaXMgdGhlIG1vdmVtZW50IG9mIHRoZSBgaW5mb2Agc3RydWN0IGFuZCBgY29weV90b191c2VyKClgIGNhbGwuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGNvZGUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBgaW5mb2Agc3RydWN0ICp3aXRoaW4qIGFuIGBpZiAoIUlTX0VSUih0KSlgIGJsb2NrLCB3aGVyZSBgdGAgaXMgYSB0YWJsZSBwb2ludGVyLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBgY29weV90b191c2VyKClgIGNhbGwsIHdoaWNoIHNlbmRzIHRoYXQgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBzdHJ1Y3QgdG8gdXNlciBzcGFjZSwgKndhcyogb3V0c2lkZSBvZiB0aGF0IGBpZmAgYmxvY2ssIGJ1dCBub3cgaXQgaGFzIGJlZW4gbW92ZWQgYW5kIGlzIGd1YXJkZWQgYnkgYGlmICghcmV0IFx1MDAyNlx1MDAyNiAuLi4pYFxuXG5UaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBUaGUgYGluZm9gIHN0cnVjdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiB0aGUgdGFibGUgbG9va3VwIHN1Y2NlZWRzIChgIUlTX0VSUih0KWApLiBOb3csIHdoaWxlIHRoZSBgY29weV90b191c2VyYCBjYWxsIGlzIGdhdGVkIGJ5IGAhcmV0YCwgZW5zdXJpbmcgdGhhdCBjb3B5IHdpbGwgb25seSBoYXBwZW4gd2hlbiBgcmV0ID09IDBgIChpLmUuIHN1Y2Nlc3MpLCB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gaWYgYHJldGAgaXMgbW9kaWZpZWQgc29tZXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBmdW5jdGlvbiwgd2hpY2ggY291bGQgY2F1c2UgYSBgY29weV90b191c2VyKClgIHdpdGggdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoaXMgaXMgbm90IGlkZWFsLCBhbmQgSSBiZXQgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgZGF0YSBjb3JydXB0aW9uLlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGluIGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AsIHRvIGVuc3VyZSB0aGF0IGByZXRgIGlzICpvbmx5KiBtb2RpZmllZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSB0YWJsZSBsb29rdXAuXG5cbkZpbmFsbHksIHRoZSBgZ2V0X2VudHJpZXNgIGZ1bmN0aW9uIGFkZHMgYHJldHJ5YCBsb2dpYyB1c2luZyBgZmF1bHRfaW5fd3JpdGVhYmxlYC4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHBvdGVudGlhbCB3cml0ZSBmYXVsdHMgZHVyaW5nIHRoZSBjb3B5aW5nIG9mIGVudHJpZXMsIGxpa2VseSB0byB1c2VyLXNwYWNlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBmYXVsdF9pbl93cml0ZWFibGVgIGlzIHRoZXJlIHRvIGhhbmRsZSB0aGUgc2NlbmFyaW9zIHdoZXJlIHdyaXRlcyB0byB1c2VyIHNwYWNlIGNvdWxkIGZhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoyOS4xODQ4ODM3NDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcdHZmcmVlKGNvdW50ZXJzKTtcXG4gNzI2OlxcdFxcdHJldHVybiByZXQ7XFxuIDcyNzpcXHR9XFxuIDcyODpcXHRcXG4gNzI5OlxcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87XFxuIDczMjpcXHRcXHRjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07XFxuIDczMzpcXHRcXHRzdHJ1Y3QgeHRfdGFibGUgKnQ7XFxuIDczNDpcXHRcXHRpbnQgcmV0O1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGFycHRfZ2V0aW5mbykpXFxuIDczNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIHVzZXIsIHNpemVvZihuYW1lKSkgIT0gMClcXG4gNzQwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAnXFxcXDAnO1xcbiA3NDM6XFx0XFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgTkZQUk9UT19BUlAsIG5hbWUpO1xcbiA3NDQ6XFx0XFx0aWYgKCFJU19FUlIodCkpIHtcXG4gNzQ1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4gNzQ2OlxcdFxcbiA3NDc6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xcbiA3NDg6XFx0XFx0XFx0aW5mby52YWxpZF9ob29rcyA9IHQtXFx1MDAzZXZhbGlkX2hvb2tzO1xcbiA3NDk6XFx0XFx0XFx0bWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS1cXHUwMDNlaG9va19lbnRyeSxcXG4gNzUwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoaW5mby5ob29rX2VudHJ5KSk7XFxuIDc1MTpcXHRcXHRcXHRtZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtXFx1MDAzZXVuZGVyZmxvdyxcXG4gNzUyOlxcdFxcdFxcdCAgICAgICBzaXplb2YoaW5mby51bmRlcmZsb3cpKTtcXG4gNzUzOlxcdFxcdFxcdGluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLVxcdTAwM2VudW1iZXI7XFxuIDc1NDpcXHRcXHRcXHRpbmZvLnNpemUgPSBwcml2YXRlLVxcdTAwM2VzaXplO1xcbiA3NTU6XFx0XFx0XFx0c3Ryc2NweShpbmZvLm5hbWUsIG5hbWUpO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRcXHRyZXQgPSAwO1xcbiA3NTg6XFx0XFx0XFx0eHRfdGFibGVfdW5sb2NrKHQpO1xcbiA3NTk6XFx0XFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuIDc2MDpcXHRcXHR9IGVsc2VcXG4gNzYxOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuIDc2MjpcXHRcXG4gNzYzOlxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcih1c2VyLCBcXHUwMDI2aW5mbywgKmxlbikgIT0gMClcXG4gNzY0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDc2NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NjY6XFx0fVxcbiA3Njc6XFx0XFxuIDc2ODpcXHRzdGF0aWMgaW50IGdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLFxcbiA3Njk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IGludCAqbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDoyOS4xODUwMjE1MzVaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MjMyNzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYGlwX3RhYmxlcy5jYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGluZm9ybWF0aW9uIGlzIGJlaW5nIHJldHJpZXZlZC4gVGltZSB0byBqdW1wIGludG8gdGhlIGBpcF90YWJsZXMuY2Agc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBnZXRfaW5mb2AgZnVuY3Rpb24gb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGRlYWxpbmcgd2l0aCByZXR1cm5pbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUga2VybmVsIHNwYWNlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZyAtIHRoZSBhY3R1YWwgcmV0cmlldmFsIG9mIHRoZSBkYXRhLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBpdCwgc3RhcnRpbmcgd2l0aCB0aGF0IGBnZXRfaW5mb2AgZnVuY3Rpb24uIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgcmVxdWVzdHMgYW5kIGhvdyBpdCBwYWNrYWdlcyBhbmQgcmV0dXJucyB0aGUgcmVsZXZhbnQgZGV0YWlscy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBhdHRlbnRpb24gZm9yIG9wdGltaXphdGlvbiBvciBkZWJ1Z2dpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQ1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDozMS4yNzczNTI2MjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NDUsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NDU6XFx0I2VuZGlmXFxuIDk0NjpcXHRcXG4gOTQ3OlxcdHN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgY29uc3QgaW50ICpsZW4pXFxuIDk0ODpcXHR7XFxuIDk0OTpcXHRcXHRzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbztcXG4gOTUwOlxcdFxcdGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTtcXG4gOTUxOlxcdFxcdHN0cnVjdCB4dF90YWJsZSAqdDtcXG4gOTUyOlxcdFxcdGludCByZXQ7XFxuIDk1MzpcXHRcXG4gOTU0OlxcdFxcdGlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgaXB0X2dldGluZm8pKVxcbiA5NTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApXFxuIDk1ODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gOTU5OlxcdFxcbiA5NjA6XFx0XFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJ1xcXFwwJztcXG4gOTYxOlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDk2MjpcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG4gOTYzOlxcdFxcdFxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQpO1xcbiA5NjQ6XFx0I2VuZGlmXFxuIDk2NTpcXHRcXHR0ID0geHRfcmVxdWVzdF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBuYW1lKTtcXG4gOTY2OlxcdFxcdGlmICghSVNfRVJSKHQpKSB7XFxuIDk2NzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtXFx1MDAzZXByaXZhdGU7XFxuIDk2ODpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbiA5Njk6XFx0XFx0XFx0c3RydWN0IHh0X3RhYmxlX2luZm8gdG1wO1xcbiA5NzA6XFx0XFxuIDk3MTpcXHRcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSkge1xcbiA5NzI6XFx0XFx0XFx0XFx0cmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgXFx1MDAyNnRtcCk7XFxuIDk3MzpcXHRcXHRcXHRcXHR4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTtcXG4gOTc0OlxcdFxcdFxcdFxcdHByaXZhdGUgPSBcXHUwMDI2dG1wO1xcbiA5NzU6XFx0XFx0XFx0fVxcbiA5NzY6XFx0I2VuZGlmXFxuIDk3NzpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuIDk3ODpcXHRcXHRcXHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cXHUwMDNldmFsaWRfaG9va3M7XFxuIDk3OTpcXHRcXHRcXHRtZW1jcHkoaW5mby5ob29rX2VudHJ5LCBwcml2YXRlLVxcdTAwM2Vob29rX2VudHJ5LFxcbiA5ODA6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLmhvb2tfZW50cnkpKTtcXG4gOTgxOlxcdFxcdFxcdG1lbWNweShpbmZvLnVuZGVyZmxvdywgcHJpdmF0ZS1cXHUwMDNldW5kZXJmbG93LFxcbiA5ODI6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLnVuZGVyZmxvdykpO1xcbiA5ODM6XFx0XFx0XFx0aW5mby5udW1fZW50cmllcyA9IHByaXZhdGUtXFx1MDAzZW51bWJlcjtcXG4gOTg0OlxcdFxcdFxcdGluZm8uc2l6ZSA9IHByaXZhdGUtXFx1MDAzZXNpemU7XFxuIDk4NTpcXHRcXHRcXHRzdHJzY3B5KGluZm8ubmFtZSwgbmFtZSk7XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcdFxcdHJldCA9IDA7XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdFxcdHh0X3RhYmxlX3VubG9jayh0KTtcXG4gOTkwOlxcdFxcdFxcdG1vZHVsZV9wdXQodC1cXHUwMDNlbWUpO1xcbiA5OTE6XFx0XFx0fSBlbHNlXFxuIDk5MjpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHQpO1xcbiA5OTM6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4gOTk0OlxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbiA5OTU6XFx0XFx0XFx0eHRfY29tcGF0X3VubG9jayhBRl9JTkVUKTtcXG4gOTk2OlxcdCNlbmRpZlxcbiA5OTc6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFxcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxcbiA5OTg6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gOTk5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjMxLjI3NzUzMDU4NloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEwMTI0NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NCBDb21wYXQgVGFibGUgSW5mb3JtYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBpcF90YWJsZXMuY2AgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXBhdGliaWxpdHkgaGFuZGxpbmcgd29ya3MuIE9rYXksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNoZWNrcyBmb3IgYENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRgIGFuZCwgd2l0aGluIGl0LCBgaW5fY29tcGF0X3N5c2NhbGwoKWAuIE5vdyBJIHNlZSB0aGUgY3J1Y2lhbCBwYXJ0OiB0aGUgYGNvbXBhdF90YWJsZV9pbmZvYCBmdW5jdGlvbiFcblxuQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gd2hhdCBoYXBwZW5zIGlmIGBjb21wYXRfdGFibGVfaW5mb2AgKmZhaWxzKj8gVGhlIGNvZGUgZG9lc24ndCBleHBsaWNpdGx5IGhhbmRsZSBhIHBvdGVudGlhbCBlcnJvciByZXR1cm4uIEl0IGNoZWNrcyBmb3IgYElTX0VSUih0KWAsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW4gZXF1aXZhbGVudCBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29tcGF0X3RhYmxlX2luZm9gIGl0c2VsZiBiZWZvcmUgdGhhdCBgcHJpdmF0ZSA9IFx1MDAyNnRtcDtgIGFzc2lnbm1lbnQuIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGNvbXBhdF90YWJsZV9pbmZvYCB0byB1bmRlcnN0YW5kIGl0cyBlcnJvciBiZWhhdmlvciBhbmQgc2VlIGlmIHRoaXMgcmVxdWlyZXMgYSBmaXguIEEgcmV0dXJuIG9mIGFuIGVycm9yIHdvdWxkIGhhdmUgYmVlbiBhIHNpZ25pZmljYW50IHByb2JsZW0uIExldCdzIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6MzMuNzg3NjU3OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyNTpcXHRcXHRjb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5O1xcbiA5MjY6XFx0XFx0aW50IHJldDtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0aWYgKCFuZXdpbmZvIHx8ICFpbmZvKVxcbiA5Mjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdC8qIHdlIGRvbnQgY2FyZSBhYm91dCBuZXdpbmZvLVxcdTAwM2VlbnRyaWVzICovXFxuIDkzMjpcXHRcXHRtZW1jcHkobmV3aW5mbywgaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpKTtcXG4gOTMzOlxcdFxcdG5ld2luZm8tXFx1MDAzZWluaXRpYWxfZW50cmllcyA9IDA7XFxuIDkzNDpcXHRcXHRsb2NfY3B1X2VudHJ5ID0gaW5mby1cXHUwMDNlZW50cmllcztcXG4gOTM1OlxcdFxcdHJldCA9IHh0X2NvbXBhdF9pbml0X29mZnNldHMoQUZfSU5FVCwgaW5mby1cXHUwMDNlbnVtYmVyKTtcXG4gOTM2OlxcdFxcdGlmIChyZXQpXFxuIDkzNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5Mzg6XFx0XFx0eHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBpbmZvLVxcdTAwM2VzaXplKSB7XFxuIDkzOTpcXHRcXHRcXHRyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTtcXG4gOTQwOlxcdFxcdFxcdGlmIChyZXQgIT0gMClcXG4gOTQxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDk0MjpcXHRcXHR9XFxuIDk0MzpcXHRcXHRyZXR1cm4gMDtcXG4gOTQ0OlxcdH1cXG4gOTQ1OlxcdCNlbmRpZlxcbiA5NDY6XFx0XFxuIDk0NzpcXHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiA5NDg6XFx0e1xcbiA5NDk6XFx0XFx0c3RydWN0IGlwdF9nZXRpbmZvIGluZm87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjMzLjc4Nzg2NTc5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDgzOTc5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2V0X2luZm9gIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBTYWZldHkgYW5kIExvY2tpbmcqKlxuXG5Pa2F5LCBzbyBiZWZvcmUgZGl2aW5nIGludG8gdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpiZWZvcmUqIHN0YXRlIG9mIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uLiBSaWdodCwgaGVyZSdzIHdoYXQgSSBzZWU6IHRoZSBvbGQgY29kZSB3YXMgcmVxdWVzdGluZyBhIHRhYmxlIGxvY2ssIHJldHJpZXZpbmcgdGFibGUgaW5mb3JtYXRpb24sIGFuZCB0aGVuIGRvaW5nIGEgYGNvcHlfdG9fdXNlcmAuIEknbSBzZWVpbmcgdGhhdCBldmVuIGlmIGBjb21wYXRfdGFibGVfaW5mb2AgZmFpbGVkLCB0aGUgY29kZSB3b3VsZCBwcm9jZWVkIHRvIHRoZSBgY29weV90b191c2VyYCBjYWxsIGFueXdheSwgd2hpY2ggc2VlbXPigKYgcGVjdWxpYXIuIEFuZCBpbiB0aGUgbmV3IGNvZGUsIEkgbm90aWNlZCB0aGUgbGluZSBgcmV0ID0gMDtgIHNldCBleHBsaWNpdGx5IGFuZCB0aGVuIG92ZXJ3cml0dGVuIG9ubHkgb24gYSBmYXVsdC4gQ3J1Y2lhbGx5LCBgaW5mb2AgaXMgYmVpbmcgYG1lbXNldGAtZWQsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB0aGUgKndoeSogb2YgdGhpcyBwYXRjaC4gVGhlIGtleSBpcyBpbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gQWhhLCB0aGUgdXNlIG9mIGBwYWdlZmF1bHRfZGlzYWJsZSgpYCBhcm91bmQgdGhlIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgYW5kIGBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXJgIGZ1bmN0aW9ucyBpcyB0aGUgZ2l2ZWF3YXkuIEl0J3MgcmVsYXRlZCB0byB0aGUgYGdldF9lbnRyaWVzYCBmdW5jdGlvbiBhcyB3ZWxsLlxuXG5UaGUgbW90aXZhdGlvbiBoZXJlIGlzIGNsZWFyOiB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbWFraW5nIGBjb3B5X3RvX3VzZXJgIGNhbGxzICp3aGlsZSBob2xkaW5nIGEgbG9jayogKGxpa2UgYHh0X3RhYmxlX2xvY2tgKS4gVGhpcyBpcyBhIHBvdGVudGlhbCBkaXNhc3RlciEgV2UgY2FuIGVuZCB1cCB3aXRoIGRlYWRsb2Nrcywgb3IgYXQgbGVhc3QgdW5kZXNpcmFibGUgYmVoYXZpb3IgaWYgYSBwYWdlIGZhdWx0IGhhcHBlbnMgd2hpbGUgd2UncmUgaW4gYW4gYXRvbWljIGNvbnRleHQgb3Igd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLiBBIHBhZ2UgZmF1bHQgZHVyaW5nIGEgYGNvcHlfdG9fdXNlcmAgY2FsbCBpbiBzdWNoIGEgc2l0dWF0aW9uIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcywgaW5jbHVkaW5nIGxvY2sgaW52ZXJzaW9uIGFuZCBpc3N1ZXMgd2l0aCBgbW1hcF9sb2NrYC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2gncyBvYmplY3RpdmUgaXMgdG8gbW92ZSB0aGF0IGBjb3B5X3RvX3VzZXJgIG91dHNpZGUgdGhlIHRhYmxlIGxvY2sgaW4gYGdldF9pbmZvYCwgZW5zdXJpbmcgd2UncmUgbm90IGhvbGRpbmcgYW55IGxvY2tzIGR1cmluZyB0aGUgY29weS4gSW4gYGNvcHlfZW50cmllc190b191c2VyYCwgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGlzIHVzZWQgdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCB3aGlsZSB0aGUgbG9jayBpcyBoZWxkLiBJZiB3ZSBkbyBnZXQgYSAtRUZBVUxULCB0aGUgY29kZSB1bmxvY2tzLCBjaGVja3MgZm9yIGEgZmF1bHQgdXNpbmcgYGZhdWx0X2luX3dyaXRlYWJsZSgpYCwgYW5kIHJldHJpZXMuIENsZXZlci5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIHNjYW4gdGhlc2UgbW9kaWZpZWQgZmlsZXMsIGVzcGVjaWFsbHkgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGFueXRoaW5nIEtNU0FOIG1pZ2h0IGZsYWcuIEFsc28sIEknbGwgdGFrZSBhIGxvb2sgYXQgYGlwNl90YWJsZXMuY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIGhhbmRsZWQgc2ltaWxhcmx5LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBwYXRjaCwgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDo0MC4wMzYyNjY2MzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTY1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTY1OlxcdH1cXG4gOTY2OlxcdCNlbmRpZlxcbiA5Njc6XFx0XFxuIDk2ODpcXHRzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGNvbnN0IGludCAqbGVuKVxcbiA5Njk6XFx0e1xcbiA5NzA6XFx0XFx0c3RydWN0IGlwNnRfZ2V0aW5mbyBpbmZvO1xcbiA5NzE6XFx0XFx0Y2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dO1xcbiA5NzI6XFx0XFx0c3RydWN0IHh0X3RhYmxlICp0O1xcbiA5NzM6XFx0XFx0aW50IHJldDtcXG4gOTc0OlxcdFxcbiA5NzU6XFx0XFx0aWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2dldGluZm8pKVxcbiA5NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk3NzpcXHRcXG4gOTc4OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApXFxuIDk3OTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gOTgwOlxcdFxcbiA5ODE6XFx0XFx0bmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOLTFdID0gJ1xcXFwwJztcXG4gOTgyOlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDk4MzpcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG4gOTg0OlxcdFxcdFxcdHh0X2NvbXBhdF9sb2NrKEFGX0lORVQ2KTtcXG4gOTg1OlxcdCNlbmRpZlxcbiA5ODY6XFx0XFx0dCA9IHh0X3JlcXVlc3RfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVDYsIG5hbWUpO1xcbiA5ODc6XFx0XFx0aWYgKCFJU19FUlIodCkpIHtcXG4gOTg4OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC1cXHUwMDNlcHJpdmF0ZTtcXG4gOTg5OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDk5MDpcXHRcXHRcXHRzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuIDk5MzpcXHRcXHRcXHRcXHRyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCBcXHUwMDI2dG1wKTtcXG4gOTk0OlxcdFxcdFxcdFxcdHh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKEFGX0lORVQ2KTtcXG4gOTk1OlxcdFxcdFxcdFxcdHByaXZhdGUgPSBcXHUwMDI2dG1wO1xcbiA5OTY6XFx0XFx0XFx0fVxcbiA5OTc6XFx0I2VuZGlmXFxuIDk5ODpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuIDk5OTpcXHRcXHRcXHRpbmZvLnZhbGlkX2hvb2tzID0gdC1cXHUwMDNldmFsaWRfaG9va3M7XFxuMTAwMDpcXHRcXHRcXHRtZW1jcHkoaW5mby5ob29rX2VudHJ5LCBwcml2YXRlLVxcdTAwM2Vob29rX2VudHJ5LFxcbjEwMDE6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLmhvb2tfZW50cnkpKTtcXG4xMDAyOlxcdFxcdFxcdG1lbWNweShpbmZvLnVuZGVyZmxvdywgcHJpdmF0ZS1cXHUwMDNldW5kZXJmbG93LFxcbjEwMDM6XFx0XFx0XFx0ICAgICAgIHNpemVvZihpbmZvLnVuZGVyZmxvdykpO1xcbjEwMDQ6XFx0XFx0XFx0aW5mby5udW1fZW50cmllcyA9IHByaXZhdGUtXFx1MDAzZW51bWJlcjtcXG4xMDA1OlxcdFxcdFxcdGluZm8uc2l6ZSA9IHByaXZhdGUtXFx1MDAzZXNpemU7XFxuMTAwNjpcXHRcXHRcXHRzdHJjcHkoaW5mby5uYW1lLCBuYW1lKTtcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0XFx0cmV0ID0gMDtcXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0XFx0eHRfdGFibGVfdW5sb2NrKHQpO1xcbjEwMTE6XFx0XFx0XFx0bW9kdWxlX3B1dCh0LVxcdTAwM2VtZSk7XFxuMTAxMjpcXHRcXHR9IGVsc2VcXG4xMDEzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodCk7XFxuMTAxNDpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbjEwMTU6XFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxuMTAxNjpcXHRcXHRcXHR4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTtcXG4xMDE3OlxcdCNlbmRpZlxcbjEwMTg6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVzZXIsIFxcdTAwMjZpbmZvLCAqbGVuKSAhPSAwKVxcbjEwMTk6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6NDAuMDM2NDg5NjI4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjEyMjk5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgaW4gTmV0d29yayBUYWJsZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGBjb3B5X2VudHJpZXNfdG9fdXNlcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gdHJhY2UgaXRzIGJlaGF2aW9yIGFjcm9zcyB0aGUgdmFyaW91cyB0YWJsZSBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiBgYXJwX3RhYmxlc2AsIGBpcF90YWJsZXNgLCBhbmQgYGlwNl90YWJsZXNgLCBhcyB0aGVzZSBhcmUgdGhlIHByaW1hcnkgcG9pbnRzIG9mIGludGVyZXN0IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgZmlsdGVyaW5nLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBtb3ZlbWVudCBvZiBlbnRyaWVzIOKAkyBiZSB0aGV5IEFSUCBtYXBwaW5ncywgSVB2NCBmaXJld2FsbCBydWxlcywgb3IgSVB2NiBmaWx0ZXJzIOKAkyBmcm9tIHRoZSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29weSBvcGVyYXRpb24sIGZyb20gYSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgcGVyc3BlY3RpdmUsIGlzIHBhcmFtb3VudC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW50cm9kdWNlZCBieSB0aGlzIGRhdGEgdHJhbnNmZXIuIEkgd2lsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGhvdyB0aGUgY29udGV4dCBvZiB0aGUgdXNlciBwcm9jZXNzIG1pZ2h0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCBieSB0aGUgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIGFueSBjaGFuZ2VzIG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBwcm90ZWN0IHRoZSBzeXN0ZW0uIEkgd2lsbCB0aGVuIGFuYWx5emUgaXRzIHJlc291cmNlIHVzYWdlIGFuZCBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGVtZXJnZSBkdXJpbmcgdGhlIGNvcHkgcHJvY2Vzcy4gSSB3aWxsIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIHByb2Nlc3MgY2FuIGJlIG9wdGltaXplZCwgYW5kIGhvdyBpdCBjYW4gYmUgc2VjdXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjQwOjQyLjI1NzcyMjgxOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDY5MTpcXHRcXHR2b2lkICpsb2NfY3B1X2VudHJ5O1xcbiA2OTI6XFx0XFxuIDY5MzpcXHRcXHRjb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTtcXG4gNjk0OlxcdFxcdGlmIChJU19FUlIoY291bnRlcnMpKVxcbiA2OTU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoY291bnRlcnMpO1xcbiA2OTY6XFx0XFxuIDY5NzpcXHRcXHRsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS1cXHUwMDNlZW50cmllcztcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcXG4gNzAwOlxcdFxcdC8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi9cXG4gNzAxOlxcdFxcdC8qIC4uLiB0aGVuIGdvIGJhY2sgYW5kIGZpeCBjb3VudGVycyBhbmQgbmFtZXMgKi9cXG4gNzAyOlxcdFxcdGZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIFxcdTAwM2MgdG90YWxfc2l6ZTsgb2ZmICs9IGUtXFx1MDAzZW5leHRfb2Zmc2V0LCBudW0rKyl7XFxuIDcwMzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0O1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRcXHRlID0gbG9jX2NwdV9lbnRyeSArIG9mZjtcXG4gNzA2OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZiwgZSxcXG4gNzA3OlxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgYXJwdF9lbnRyeSwgY291bnRlcnMpKSB8fFxcbiA3MDg6XFx0XFx0XFx0ICAgIGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmXFxuIDcwOTpcXHRcXHRcXHRcXHRcXHQgKyBvZmZzZXRvZihzdHJ1Y3QgYXJwdF9lbnRyeSwgY291bnRlcnMpLFxcbiA3MTA6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjb3VudGVyc1tudW1dLFxcbiA3MTE6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihjb3VudGVyc1tudW1dKSkpIHtcXG4gNzEyOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDcxMzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDcxNDpcXHRcXHRcXHR9XFxuIDcxNTpcXHRcXG4gNzE2OlxcdFxcdFxcdHQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTtcXG4gNzE3OlxcdFxcdFxcdGlmICh4dF90YXJnZXRfdG9fdXNlcih0LCB1c2VycHRyICsgb2ZmICsgZS1cXHUwMDNldGFyZ2V0X29mZnNldCkpIHtcXG4gNzE4OlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDcxOTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY291bnRlcnM7XFxuIDcyMDpcXHRcXHRcXHR9XFxuIDcyMTpcXHRcXHR9XFxuIDcyMjpcXHRcXG4gNzIzOlxcdCBmcmVlX2NvdW50ZXJzOlxcbiA3MjQ6XFx0XFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbiA3MjU6XFx0XFx0dmZyZWUoY291bnRlcnMpO1xcbiA3MjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gNzI3OlxcdH1cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0c3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBjb25zdCBpbnQgKmxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6NDA6NDIuMjU3ODQxODg5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NjIxOTE4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIERldGVjdGVkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSB3YW50ZWQgdG8gcmlnb3JvdXNseSBjaGVjayBgZ2V0X2VudHJpZXNgIGFjcm9zcyBhbGwgdGhyZWUgcmVsZXZhbnQgZmlsZXM6IGBhcnBfdGFibGVzLmNgLCBgaXBfdGFibGVzLmNgLCBhbmQgYGlwNl90YWJsZXMuY2AuIEkgZm9jdXNlZCBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBgZ2V0X2VudHJpZXNgIGZ1bmN0aW9uIGFuZCB0aGUgcmVsYXRlZCBgY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYCBmdW5jdGlvbnMuXG5cbkkgemVyb2VkIGluIG9uIHRoZSBgZ2V0X2luZm9gIGZ1bmN0aW9uLCBjaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGUgYGluZm9gIHN0cnVjdCBpbiBgZ2V0X2luZm9gIGlzIGRlZmluZWQgb24gdGhlIHN0YWNrLCB3aGljaCBpcyBnb29kLiAgSSBjb25maXJtZWQgdGhhdCB0aGUgY29kZSB3aXRoaW4gdGhlIGBpZiAoIUlTX0VSUih0KSlgIGJsb2NrICpleHBsaWNpdGx5KiBpbml0aWFsaXplcyBgaW5mb2Agd2l0aCBgbWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSlgLiBBbGwgZmllbGRzIGFyZSB0aGVuIHBvcHVsYXRlZCwgYW5kIG9ubHkgaWYgYHJldGAgaXMgemVybyAoaW5kaWNhdGluZyBzdWNjZXNzKSBkb2VzIGBjb3B5X3RvX3VzZXJgIGV2ZW4gZXhlY3V0ZS4gVGhpcyBwcmV2ZW50cyBhbnkgcG9zc2liaWxpdHkgb2YgYW4gdW5pbml0aWFsaXplZCBgaW5mb2Agc3RydWN0IGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBJZiBgcmV0YCBpcyBub3QgemVybywgdGhlIGBjb3B5X3RvX3VzZXJgIGRvZXMgbm90IGhhcHBlbi5cblxuSSB0aGVuIGxvb2tlZCBhdCBgY29weV9lbnRyaWVzX3RvX3VzZXJgIGFuZCBgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyYC4gVGhlIG9ubHkgY2hhbmdlIHRoZXJlIHdhcyB0aGUgYWRkaXRpb24gb2YgYHBhZ2VmYXVsdF9kaXNhYmxlKClgIGFuZCBgcGFnZWZhdWx0X2VuYWJsZSgpYCwgYnV0IGNyaXRpY2FsbHksIHRoZSBidWZmZXJzLCBsZW5ndGhzLCBhbmQgaW5pdGlhbGl6YXRpb24gbG9naWMgd2VyZSAqbm90KiBtb2RpZmllZC4gVGhpcyBtZWFucyB3ZSdyZSBzYWZlIHRoZXJlLlxuXG5gZ2V0X2VudHJpZXNgIGFuZCBgY29tcGF0X2dldF9lbnRyaWVzYCBhbHNvIGhhZCB0aGUgbmV3IHJldHJ5IGxvZ2ljLiBCdXQgYWdhaW4sIGl0J3MganVzdCByZXRyeSBsb2dpYywgc28gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcy4gSSBjaGVja2VkIGZvciBhbnkgb3RoZXIgcGF0aHMgb3IgY2hhbmdlcyBpbiB0aGUgZGlmZiB0byBlbnN1cmUgbm90aGluZyBzbGlwcGVkIG15IGF0dGVudGlvbi5cblxuTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZz8qKiBOby4gYGluZm9gIGlzIGV4cGxpY2l0bHkgemVyb2VkIGJlZm9yZSBwb3B1bGF0aW9uLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIGFyZSBzZW50LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBUaGUgYGZhdWx0ZWRgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIGByZXRgIGhhcyBiZWVuIHNldCBpbiBhbGwgYnJhbmNoZXMuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8qKiBOby5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8qKiBOby5cblxuR2l2ZW4gdGhvc2UgY2hlY2tzLCBJIGNvbmNsdWRlZCB0aGF0LCBmcm9tIHRoZSBLTVNBTiBwZXJzcGVjdGl2ZSwgdGhlcmUncyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBhcmUgcG9zc2libGUgaGVyZSBhcmUgdGhpbmdzIGxpa2UgZGVhZGxvY2tzLCBsb2NrIG9yZGVyaW5nIHByb2JsZW1zLCBhbmQgaXNzdWVzIHdpdGggdXNlciBwb2ludGVycywgYnV0IHRob3NlIGFyZSB0aGluZ3MgdGhhdCBLQVNBTiBvciBsb2NrZGVwIHdvdWxkIGhhdmUgZmxhZ2dlZC4gVGhlIGNvZGUgbG9va3Mgc29saWQgZnJvbSBhIEtNU0FOIHBvaW50IG9mIHZpZXcsIGFuZCBJIGRvdWJsZS1jaGVja2VkIGBnZXRfaW5mb2AgaW4gYGlwX3RhYmxlcy5jYCB0byBiZSBzdXJlIGV2ZXJ5dGhpbmcgd2FzIHByb3Blcmx5IGluaXRpYWxpemVkLCBwYXJ0aWN1bGFybHkgd2l0aCByZWdhcmQgdG8gdGhlIGBjb21wYXRgIHN5c2NhbGwgcGF0aC4gIFRoZSBgaW5mb2AgdmFyaWFibGUsIHNwZWNpZmljYWxseSwgaXMgc2V0IHRvIHplcm8gdGhlcmUgYXMgd2VsbC4gRXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZCFcblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDUwLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjo0MDo1MC4yMjAwMzY1MDlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlwdGFibGVzLCBpcDZ0YWJsZXMsIGFuZCBhcnB0YWJsZXMgdG8gcHJldmVudCBkZWFkbG9ja3MgYW5kIGxvY2sgaW52ZXJzaW9uIHdoZW4gY29weWluZyBkYXRhIHRvL2Zyb20gdXNlciBzcGFjZSB3aGlsZSBob2xkaW5nIHRhYmxlIGxvY2tzIChieSBkaXNhYmxpbmcgcGFnZSBmYXVsdHMgaW4gY29weV9lbnRyaWVzX3RvX3VzZXIgYW5kIHJldHJ5aW5nIHdpdGggZmF1bHRfaW5fd3JpdGVhYmxlLCBhbmQgYnkgZGVmZXJyaW5nIGNvcHlfdG9fdXNlciBpbiBnZXRfaW5mbyB1bnRpbCBhZnRlciB1bmxvY2tpbmcpLlxcblxcbkFsbCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKHN1Y2ggYXMgc3RydWN0IGlwdF9nZXRpbmZvIC8gaXA2dF9nZXRpbmZvIC8gYXJwdF9nZXRpbmZvKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSkgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZCBhbmQgY29waWVkLCBhbmQgY29weV90b191c2VyIGlzIG9ubHkgaW52b2tlZCBpZiB0YWJsZSBsb29rdXAgc3VjY2VlZGVkIHdpdGhvdXQgZXJyb3IuIExvY2FsIHZhcmlhYmxlcyBsaWtlICdmYXVsdGVkJyBhbmQgJ3JldCcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgYnJhbmNoZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkOyBhbnkgcG90ZW50aWFsIGJ1Z3MgKGxvY2tpbmcsIGZhdWx0IGhhbmRsaW5nLCBlcnJvciBjb2RlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIGtlcm5lbCBjaGVja3MgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaXB0YWJsZXMsIGlwNnRhYmxlcywgYW5kIGFycHRhYmxlcyB0byBwcmV2ZW50IGRlYWRsb2NrcyBhbmQgbG9jayBpbnZlcnNpb24gd2hlbiBjb3B5aW5nIGRhdGEgdG8vZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGFibGUgbG9ja3MgKGJ5IGRpc2FibGluZyBwYWdlIGZhdWx0cyBpbiBjb3B5X2VudHJpZXNfdG9fdXNlciBhbmQgcmV0cnlpbmcgd2l0aCBmYXVsdF9pbl93cml0ZWFibGUsIGFuZCBieSBkZWZlcnJpbmcgY29weV90b191c2VyIGluIGdldF9pbmZvIHVudGlsIGFmdGVyIHVubG9ja2luZykuXFxuXFxuQWxsIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBwYXNzZWQgdG8gdXNlciBzcGFjZSAoc3VjaCBhcyBzdHJ1Y3QgaXB0X2dldGluZm8gLyBpcDZ0X2dldGluZm8gLyBhcnB0X2dldGluZm8pIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKSBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBjb3BpZWQsIGFuZCBjb3B5X3RvX3VzZXIgaXMgb25seSBpbnZva2VkIGlmIHRhYmxlIGxvb2t1cCBzdWNjZWVkZWQgd2l0aG91dCBlcnJvci4gTG9jYWwgdmFyaWFibGVzIGxpa2UgJ2ZhdWx0ZWQnIGFuZCAncmV0JyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYWNyb3NzIGFsbCBicmFuY2hlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb2xlYWsgcmlza3MgYXJlIGludHJvZHVjZWQ7IGFueSBwb3RlbnRpYWwgYnVncyAobG9ja2luZywgZmF1bHQgaGFuZGxpbmcsIGVycm9yIGNvZGVzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQga2VybmVsIGNoZWNrcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsrmwx[1] Phase: Succeeded StartedAt: 2026-09-09 16:41:01 +0000 UTC FinishedAt: 2026-09-09 16:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 16:41:01 +0000 UTC FinishedAt: 2026-09-09 16:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2] Phase: Succeeded StartedAt: 2026-09-09 16:41:01 +0000 UTC FinishedAt: 2026-09-09 20:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 16:41:01 +0000 UTC FinishedAt: 2026-09-09 20:27:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:41:01 +0000 UTC FinishedAt: 2026-09-09 16:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:41:01 +0000 UTC FinishedAt: 2026-09-09 16:41:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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-workflowsrmwx/series-workflowsrmwx-convert-artifact-3647903532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:41:11 +0000 UTC FinishedAt: 2026-09-09 16:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:41:11 +0000 UTC FinishedAt: 2026-09-09 16:58:53 +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:*bf4d543d-aefa-4753-ab1a-cea720d1bc0c,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-workflowsrmwx/series-workflowsrmwx-convert-artifact-3647903532/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": "881ef7ca-f66e-4cd7-bcbf-e42ac4b365cf", "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-workflowsrmwx/series-workflowsrmwx-build-action-2737937754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:41:11 +0000 UTC FinishedAt: 2026-09-09 16:58:43 +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:*bf4d543d-aefa-4753-ab1a-cea720d1bc0c,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-workflowsrmwx/series-workflowsrmwx-convert-artifact-3647903532/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": "881ef7ca-f66e-4cd7-bcbf-e42ac4b365cf", "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-workflowsrmwx/series-workflowsrmwx-build-action-2737937754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:58:53 +0000 UTC FinishedAt: 2026-09-09 16:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:58:53 +0000 UTC FinishedAt: 2026-09-09 16:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:58:53 +0000 UTC FinishedAt: 2026-09-09 16:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:58:53 +0000 UTC FinishedAt: 2026-09-09 16:58:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-workflowsrmwx/series-workflowsrmwx-convert-artifact-2679134699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:59:03 +0000 UTC FinishedAt: 2026-09-09 17:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 16:59:03 +0000 UTC FinishedAt: 2026-09-09 17:01:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*881ef7ca-f66e-4cd7-bcbf-e42ac4b365cf,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-workflowsrmwx/series-workflowsrmwx-build-action-2737937754/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-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:01:14 +0000 UTC FinishedAt: 2026-09-09 17:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:01:14 +0000 UTC FinishedAt: 2026-09-09 17:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:01:14 +0000 UTC FinishedAt: 2026-09-09 17:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:01:14 +0000 UTC FinishedAt: 2026-09-09 17:23:36 +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:*bf4d543d-aefa-4753-ab1a-cea720d1bc0c,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-workflowsrmwx/series-workflowsrmwx-convert-artifact-2679134699/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": "2d181713-02ad-4489-9e28-bed58b3acd61", "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-workflowsrmwx/series-workflowsrmwx-build-action-4259682063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:01:14 +0000 UTC FinishedAt: 2026-09-09 17:23:14 +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:*bf4d543d-aefa-4753-ab1a-cea720d1bc0c,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-workflowsrmwx/series-workflowsrmwx-convert-artifact-2679134699/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": "2d181713-02ad-4489-9e28-bed58b3acd61", "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-workflowsrmwx/series-workflowsrmwx-build-action-4259682063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:23:36 +0000 UTC FinishedAt: 2026-09-09 17:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:23:36 +0000 UTC FinishedAt: 2026-09-09 17:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:23:36 +0000 UTC FinishedAt: 2026-09-09 17:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:23:36 +0000 UTC FinishedAt: 2026-09-09 17:25:34 +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:*2d181713-02ad-4489-9e28-bed58b3acd61,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-workflowsrmwx/series-workflowsrmwx-build-action-4259682063/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-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 20:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 20:27:30 +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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"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:*881ef7ca-f66e-4cd7-bcbf-e42ac4b365cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d181713-02ad-4489-9e28-bed58b3acd61,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-workflowsrmwx/series-workflowsrmwx-build-action-2737937754/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-workflowsrmwx/series-workflowsrmwx-build-action-4259682063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 17:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 17:25:50 +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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"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-workflowsrmwx/series-workflowsrmwx-convert-artifact-3913743876/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 17:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 17:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","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-09 17:25:44 +0000 UTC FinishedAt: 2026-09-09 17:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 17:25:54 +0000 UTC FinishedAt: 2026-09-09 20:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrmwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"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":["copy_entries_to_user","get_entries","get_info","compat_copy_entries_to_user","compat_get_entries","do_ipt_get_ctl","do_ip6t_get_ctl","do_arpt_get_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a099b347fef536a84068076e2d384f044e5cfc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","IP_NF_IPTABLES_LEGACY","IP6_NF_IPTABLES_LEGACY","IP_NF_ARPTABLES","NETFILTER_XTABLES_COMPAT"],"series_id":"c82e66ad-a1f8-40b9-add9-717f129c8f63","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 17:25:54 +0000 UTC FinishedAt: 2026-09-09 20:27:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*881ef7ca-f66e-4cd7-bcbf-e42ac4b365cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d181713-02ad-4489-9e28-bed58b3acd61,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-workflowsrmwx/series-workflowsrmwx-build-action-2737937754/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-workflowsrmwx/series-workflowsrmwx-build-action-4259682063/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-workflowsrmwx/series-workflowsrmwx-convert-artifact-3913743876/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}